From 5a0086d881492d8912d72649b2a22aba682cc492 Mon Sep 17 00:00:00 2001 From: Mel Date: Sun, 6 Sep 2026 03:19:17 +0200 Subject: Add modded Minecraft server (Prominence II) Signed-off-by: Mel --- services/minecraft.nix | 44 ------------------------------------- services/minecraft/default.nix | 8 +++++++ services/minecraft/p2.nix | 50 ++++++++++++++++++++++++++++++++++++++++++ services/minecraft/vanilla.nix | 44 +++++++++++++++++++++++++++++++++++++ 4 files changed, 102 insertions(+), 44 deletions(-) delete mode 100644 services/minecraft.nix create mode 100644 services/minecraft/default.nix create mode 100644 services/minecraft/p2.nix create mode 100644 services/minecraft/vanilla.nix (limited to 'services') diff --git a/services/minecraft.nix b/services/minecraft.nix deleted file mode 100644 index 0690f40..0000000 --- a/services/minecraft.nix +++ /dev/null @@ -1,44 +0,0 @@ -{ 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.streamLayeredImage { - name = "minecraft"; - tag = minecraft.version; - fromImage = common.alpine.base; - contents = [ minecraft ]; - }; - -in -{ - networking.firewall.allowedTCPPorts = [ minecraftPort ]; - - foundation.services.minecraft = { - image = minecraftImage; - ports = [ (common.globalPort minecraftPort) ]; - - volumes = [ [ "${minecraftDir}" "/server" ] ]; - - workdir = "/server"; - entrypoint = "${minecraft}/bin/minecraft-server"; - cmd = [ - "-Xms${minecraftMemory}" - "-Xmx${minecraftMemory}" - ]; - }; -} diff --git a/services/minecraft/default.nix b/services/minecraft/default.nix new file mode 100644 index 0000000..99671e1 --- /dev/null +++ b/services/minecraft/default.nix @@ -0,0 +1,8 @@ +{ ... }: + +{ + imports = [ + ./vanilla.nix + ./p2.nix + ]; +} diff --git a/services/minecraft/p2.nix b/services/minecraft/p2.nix new file mode 100644 index 0000000..3946c6b --- /dev/null +++ b/services/minecraft/p2.nix @@ -0,0 +1,50 @@ +{ auxiliaryPkgs, ... }: + +let + inherit (auxiliaryPkgs) common; + + # next to vanilla! a srv dns record handles the routing + # from `p2.mc.rnrd.eu` to here. + p2Port = 25566; + p2Directory = "/srv/mc-p2"; + p2Memory = "8G"; + + p2Image = common.pullImage { + name = "itzg/minecraft-server"; + tag = "2026.9.0-java17"; # fabric, 1.20.1, java 17 + digest = "sha256:40f4721c1e6020164e5b7eed81c844734ca4ae8339f6546869edc48be82f82dc"; + x86.sha256 = "sha256-M8sHIOegqJsMYvk2Lnc6Zwkj9NO30hgf67OscjpW7KE="; + }; + +in +{ + networking.firewall.allowedTCPPorts = [ p2Port ]; + + foundation.services.minecraft-p2 = { + fullImage = p2Image; + + ports = [ (common.globalPort [ p2Port 25565 ]) ]; + + volumes = [ [ "${p2Directory}" "/data" ] ]; + + environment = { + EULA = "TRUE"; + + # image can configure everything by itself! (woah!) + TYPE = "MODRINTH"; + MODRINTH_MODPACK = "prominence-2-fabric"; + MODRINTH_VERSION = "4.0.4"; # id: v5JSKaF2 + MODRINTH_LOADER = "fabric"; + + MEMORY = p2Memory; + + OVERRIDE_SERVER_PROPERTIES = "false"; # configs are managed by hand + + # runs as root, so the mounted files are root-owned too, + # created as 0755/0644 to match the mount point itself. + UID = "0"; + GID = "0"; + UMASK = "0022"; + }; + }; +} diff --git a/services/minecraft/vanilla.nix b/services/minecraft/vanilla.nix new file mode 100644 index 0000000..0690f40 --- /dev/null +++ b/services/minecraft/vanilla.nix @@ -0,0 +1,44 @@ +{ 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.streamLayeredImage { + name = "minecraft"; + tag = minecraft.version; + fromImage = common.alpine.base; + contents = [ minecraft ]; + }; + +in +{ + networking.firewall.allowedTCPPorts = [ minecraftPort ]; + + foundation.services.minecraft = { + image = minecraftImage; + ports = [ (common.globalPort minecraftPort) ]; + + volumes = [ [ "${minecraftDir}" "/server" ] ]; + + workdir = "/server"; + entrypoint = "${minecraft}/bin/minecraft-server"; + cmd = [ + "-Xms${minecraftMemory}" + "-Xmx${minecraftMemory}" + ]; + }; +} -- cgit v1.3.1