at 17.09-beta 1.9 kB view raw
1{ config, lib, pkgs, ... }: 2 3with lib; 4 5let 6 cfg = config.services.minecraft-server; 7in 8{ 9 options = { 10 services.minecraft-server = { 11 12 enable = mkOption { 13 type = types.bool; 14 default = false; 15 description = '' 16 If enabled, start a Minecraft Server. The listening port for 17 the server is always <literal>25565</literal>. The server 18 data will be loaded from and saved to 19 <literal>${cfg.dataDir}</literal>. 20 ''; 21 }; 22 23 dataDir = mkOption { 24 type = types.path; 25 default = "/var/lib/minecraft"; 26 description = '' 27 Directory to store minecraft database and other state/data files. 28 ''; 29 }; 30 31 openFirewall = mkOption { 32 type = types.bool; 33 default = false; 34 description = '' 35 Whether to open ports in the firewall (if enabled) for the server. 36 ''; 37 }; 38 39 jvmOpts = mkOption { 40 type = types.str; 41 default = "-Xmx2048M -Xms2048M"; 42 description = "JVM options for the Minecraft Service."; 43 }; 44 }; 45 }; 46 47 config = mkIf cfg.enable { 48 users.extraUsers.minecraft = { 49 description = "Minecraft Server Service user"; 50 home = cfg.dataDir; 51 createHome = true; 52 uid = config.ids.uids.minecraft; 53 }; 54 55 systemd.services.minecraft-server = { 56 description = "Minecraft Server Service"; 57 wantedBy = [ "multi-user.target" ]; 58 after = [ "network.target" ]; 59 60 serviceConfig.Restart = "always"; 61 serviceConfig.User = "minecraft"; 62 script = '' 63 cd ${cfg.dataDir} 64 exec ${pkgs.minecraft-server}/bin/minecraft-server ${cfg.jvmOpts} 65 ''; 66 }; 67 68 networking.firewall = mkIf cfg.openFirewall { 69 allowedUDPPorts = [ 25565 ]; 70 allowedTCPPorts = [ 25565 ]; 71 }; 72 }; 73}