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;
};