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} + ''; + }; + }; +} diff --git a/pkgs/games/minecraft-server/default.nix b/pkgs/games/minecraft-server/default.nix new file mode 100644 index 000000000000..bfa5a69dfc32 --- /dev/null +++ b/pkgs/games/minecraft-server/default.nix @@ -0,0 +1,35 @@ +{ stdenv, fetchurl, jre }: + +with import {}; + +stdenv.mkDerivation rec { + name = "minecraft-server-${version}"; + version = "1.7.5"; + + src = fetchurl { + url = "http://s3.amazonaws.com/Minecraft.Download/versions/${version}/minecraft_server.${version}.jar"; + sha256 = "0f3sh3fws02yl4xqa8qrvn0cchfp0hymqrf30c5syzzcz9w4l8pq"; + }; + + installPhase = '' + mkdir -p $out/bin $out/lib/minecraft + cp -v $src $out/lib/minecraft/server.jar + + cat > $out/bin/minecraft-server << EOF + #!/bin/sh + exec ${jre}/bin/java \$@ -jar $out/lib/minecraft/server.jar nogui + EOF + + chmod +x $out/bin/minecraft-server + ''; + + phases = "installPhase"; + + meta = { + description = "Minecraft Server"; + homepage = "https://minecraft.net"; + license = stdenv.lib.licenses.unfreeRedistributable; + platforms = stdenv.lib.platforms.unix; + maintainers = [ stdenv.lib.maintainers.thoughtpolice ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 86b07854c023..6d1d908e935e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1394,6 +1394,8 @@ let minecraft = callPackage ../games/minecraft { }; + minecraft-server = callPackage ../games/minecraft-server { }; + minetest = callPackage ../games/minetest { libpng = libpng12; };