summary refs log tree commit diff
path: root/services
diff options
context:
space:
mode:
Diffstat (limited to 'services')
-rw-r--r--services/minecraft.nix49
1 files changed, 49 insertions, 0 deletions
diff --git a/services/minecraft.nix b/services/minecraft.nix
new file mode 100644
index 0000000..29e8e00
--- /dev/null
+++ b/services/minecraft.nix
@@ -0,0 +1,49 @@
+{ pkgs, auxiliaryPkgs, ... }:
+
+let
+  inherit (pkgs) dockerTools;
+  inherit (auxiliaryPkgs) common;
+
+  minecraft = pkgs.minecraft-server.overrideAttrs {
+    version = "1.21.4";
+
+    src = pkgs.fetchurl {
+      url = "https://piston-data.mojang.com/v1/objects/4707d00eb834b446575d89a61a11b5d548d8c001/server.jar";
+      hash = "sha256-EGaXCwnpxnGERXIpHEqHHMGsK4WDi/cAT6DneOEPE1g=";
+    };
+  };
+
+  minecraftPort = 25565;
+  minecraftDir = "/srv/mc";
+  minecraftMemory = "8G";
+
+  minecraftImage = dockerTools.buildLayeredImage {
+    name = "minecraft";
+    tag = minecraft.version;
+    fromImage = common.alpine.base;
+    contents = [ minecraft ];
+  };
+
+in
+{
+  networking.firewall.allowedTCPPorts = [ minecraftPort ];
+
+  # TODO: put global ports and streamed images into foundation
+  virtualisation.oci-containers.containers.minecraft = {
+    imageFile = minecraftImage;
+    image = "minecraft:${minecraft.version}";
+    # expose minecraft service port globally.
+    ports = [ "0.0.0.0:${toString minecraftPort}:${toString minecraftPort}" ];
+
+    volumes = [
+      "${minecraftDir}:/server"
+    ];
+
+    workdir = "/server";
+    entrypoint = "${minecraft}/bin/minecraft-server";
+    cmd = [
+      "-Xms${minecraftMemory}"
+      "-Xmx${minecraftMemory}"
+    ];
+  };
+}