diff --git a/nixos/modules/misc/ids.nix b/nixos/modules/misc/ids.nix index fc05584e2565..9c413e36d568 100644 --- a/nixos/modules/misc/ids.nix +++ b/nixos/modules/misc/ids.nix @@ -122,6 +122,7 @@ notbit = 111; ngircd = 112; btsync = 113; + minecraft = 114; # When adding a uid, make sure it doesn't match an existing gid. diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index e59b0ff5ac2c..652a99e7c5a6 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -96,6 +96,7 @@ ./services/databases/postgresql.nix ./services/databases/virtuoso.nix ./services/games/ghost-one.nix + ./services/games/minecraft-server.nix ./services/hardware/acpid.nix ./services/hardware/amd-hybrid-graphics.nix ./services/hardware/bluetooth.nix diff --git a/nixos/modules/services/games/minecraft-server.nix b/nixos/modules/services/games/minecraft-server.nix new file mode 100644 index 000000000000..ac70bc53473d --- /dev/null +++ b/nixos/modules/services/games/minecraft-server.nix @@ -0,0 +1,51 @@ +{ config, pkgs, ... }: + +with pkgs.lib; + +let + cfg = config.services.minecraft-server; +in +{ + options = { + services.minecraft-server = { + enable = mkOption { + type = types.bool; + default = false; + description = '' + If enabled, start a Minecraft Server. The listening port for + the server is always 25565. The server + data will be loaded from and saved to + /var/lib/minecraft. + ''; + }; + + jvmOpts = mkOption { + type = types.str; + default = "-Xmx2048M -Xms2048M"; + description = "JVM options for the Minecraft Service."; + }; + }; + }; + + config = mkIf cfg.enable { + users.extraUsers.minecraft = { + description = "Minecraft Server Service user"; + home = "/var/lib/minecraft"; + createHome = true; + uid = config.ids.uids.minecraft; + }; + + systemd.services.minecraft-server = { + description = "Minecraft Server Service"; + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" ]; + + serviceConfig.Restart = "always"; + serviceConfig.User = "minecraft"; + script = '' + cd /var/lib/minecraft + exec ${pkgs.minecraft-server}/bin/minecraft-server ${cfg.jvmOpts} + ''; + }; + }; +}