From fa964a8d1ab2dc83386f457b51b2de87b68cbe70 Mon Sep 17 00:00:00 2001 From: Mel Date: Tue, 3 Dec 2024 18:45:38 +0100 Subject: Add Minecraft server service module Signed-off-by: Mel --- services/minecraft.nix | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 services/minecraft.nix (limited to 'services') 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}" + ]; + }; +} -- cgit 1.4.1