2024-11-23 15:22:48 +01:00
{
inputs ,
config ,
lib ,
pkgs ,
system ,
. . .
} :
let
cfg = config . services . minecraft ;
in
{
config = lib . mkIf ( cfg . enable && cfg . servers . velocity . enable ) {
2024-12-14 02:29:16 +01:00
# Configure Server
2024-11-23 15:22:48 +01:00
services . minecraft-servers . servers . " v e l o c i t y " = {
enable = true ;
autoStart = true ;
enableReload = true ;
2024-12-14 02:29:16 +01:00
stopCommand = " e n d " ;
2024-11-23 15:22:48 +01:00
package = pkgs . velocityServers . velocity ;
symlinks = {
2024-12-14 02:29:16 +01:00
" p l u g i n s / L u c k P e r m s . j a r " = pkgs . fetchurl {
url = " h t t p s : / / d o w n l o a d . l u c k p e r m s . n e t / 1 5 6 7 / v e l o c i t y / L u c k P e r m s - V e l o c i t y - 5 . 4 . 1 5 0 . j a r " ;
sha512 = " 3 d r 6 9 g 2 f b a v 3 i f 4 4 n m i f g z 7 h n 8 6 g d f 6 2 h c k s 9 2 k k v w x f 4 x a 3 z 7 x 6 1 5 j 4 2 6 k g l j y h g y 8 4 h f 7 5 w z p a i 2 5 8 m g 7 d j 9 x 1 7 v p k n 6 3 4 k k z w m w 6 " ;
} ;
" p l u g i n s / G e y s e r - V e l o c i t y . j a r " = pkgs . fetchurl {
url = " h t t p s : / / d o w n l o a d . g e y s e r m c . o r g / v 2 / p r o j e c t s / g e y s e r / v e r s i o n s / 2 . 6 . 0 / b u i l d s / 7 3 0 / d o w n l o a d s / v e l o c i t y " ;
sha512 = " 3 s h n m 8 q 8 v q 8 j 4 4 x x g 4 q w q w a l w 6 m l 9 n k z f r z v v 8 p k b l k j p 2 5 n f k 3 h 1 4 b 4 y 9 v d i m 1 s a 2 a 1 8 m k f 8 h m h b 1 6 g 1 m k a 2 r h 7 l 0 z 0 y g 4 k h 3 l j 2 i 0 " ;
} ;
" p l u g i n s / f l o o d g a t e - v e l o c i t y . j a r " = pkgs . fetchurl {
url = " h t t p s : / / d o w n l o a d . g e y s e r m c . o r g / v 2 / p r o j e c t s / f l o o d g a t e / v e r s i o n s / 2 . 2 . 3 / b u i l d s / 1 1 4 / d o w n l o a d s / v e l o c i t y " ;
sha512 = " 1 k 7 q b a n 3 g a r 0 f x x i 5 k p 5 i 8 d 7 2 k 6 c k 6 5 c v s f b g 4 n h 8 b z 4 0 j w q n 3 5 f x 9 g j 3 z b b 0 6 x 5 l 8 s g 6 q x l 7 w 2 n s n 3 j a n 4 h j q 7 m 5 l w f 2 c 1 l 1 m j a w 8 1 " ;
} ;
" p l u g i n s / L i b r e L o g i n . j a r " = pkgs . fetchurl {
url = " h t t p s : / / m o d r i n t h . c o m / p l u g i n / l i b r e - l o g i n / v e r s i o n / 0 . 2 3 . 0 " ;
sha512 = " 1 w r n p 8 2 v v 4 7 h h v j p 1 l x d n d m n g n d y k s h i 7 i i n d n p g 6 1 j 0 v 7 i 8 b d g r 9 r k 5 q v a n v w 9 5 g c j 5 9 c n h x d m j y n q 8 f m 1 2 7 n 4 g v 5 3 a c d i d l x z 3 9 s d " ;
} ;
2024-11-23 15:22:48 +01:00
} ;
2024-12-14 02:29:16 +01:00
files = {
" v e l o c i t y . t o m l " . value = {
config-version = " 2 . 7 " ; # NEVER change this!
bind = " 0 . 0 . 0 . 0 : 2 5 5 6 5 " ;
online-mode = false ;
player-info-forwarding-mode = " m o d e r n " ;
enable-player-address-logging = false ;
2025-01-26 02:43:21 +01:00
# servers.lobby = "";
servers . survival = " 1 2 7 . 0 . 0 . 1 : ${ toString config . services . minecraft-servers . servers . " s u r v i v a l " . serverProperties . server-port } " ;
servers . lobby = " 1 2 7 . 0 . 0 . 1 : 1 2 3 " ;
2024-12-14 02:29:16 +01:00
servers . try = [
2025-01-26 02:43:21 +01:00
#"lobby"
2024-12-14 02:29:16 +01:00
" s u r v i v a l "
] ;
2025-01-26 02:43:21 +01:00
forced-hosts . " l o b b y . e x a m p l e . c o m " = [ " l o b b y " ] ;
2024-12-14 02:29:16 +01:00
advanced . tcp-fast-open = true ;
} ;
} ;
} ;
networking . firewall . allowedTCPPorts = [ 25565 ] ;
# Configure Plugin Luckperms
2025-02-08 22:16:37 +01:00
sops . templates . " m i n e c r a f t / v e l o c i t y / p l u g i n / l u c k p e r m s / c o n f i g . y m l " . path = " / s r v / m i n e c r a f t / v e l o c i t y / p l u g i n s / l u c k p e r m s / c o n f i g . y m l " ;
2025-02-09 00:14:13 +01:00
sops . templates . " m i n e c r a f t / v e l o c i t y / p l u g i n / l u c k p e r m s / c o n f i g . y m l " . owner = config . services . minecraft-servers . user ;
sops . templates . " m i n e c r a f t / v e l o c i t y / p l u g i n / l u c k p e r m s / c o n f i g . y m l " . content = lib . generators . toYAML { } { # Unfortunately currently lib.generators.toYAML generates JSON, and the File will not be Human readable
storage-method = " m a r i a d b " ;
data . address = " l o c a l h o s t : ${ toString config . services . mysql . settings . mysqld . port } " ;
data . database = " l u c k p e r m s " ;
data . username = " l u c k p e r m s " ;
data . password = '' ${ config . sops . placeholder . " m i n e c r a f t / d a t a b a s e / l u c k p e r m s _ p a s s w o r d " } '' ; # Secret created in ./database.nix
} ;
2024-11-23 15:22:48 +01:00
} ;
}