diff --git a/config/services.nix b/config/services.nix index 3b44792..bf2b232 100644 --- a/config/services.nix +++ b/config/services.nix @@ -4,6 +4,14 @@ rec { domain = "git.nudelerde.de"; }; + gtnh = { + port = 25565; + serverPackUrl = "https://downloads.gtnewhorizons.com/ServerPacks/GT_New_Horizons_2.8.4_Server_Java_17-25.zip"; + version = "1.7.10"; + memory = "12G"; + timezone = "Europe/Berlin"; + }; + "metric-exporter" = { port = 9100; collectors = [ diff --git a/services/default.nix b/services/default.nix index a87a956..ba920bb 100644 --- a/services/default.nix +++ b/services/default.nix @@ -5,5 +5,6 @@ ./forgejo.nix ./node-exporter.nix ./prometheus.nix + ./minecraft.nix ]; } diff --git a/services/minecraft.nix b/services/minecraft.nix new file mode 100644 index 0000000..add23ec --- /dev/null +++ b/services/minecraft.nix @@ -0,0 +1,49 @@ +{ lib, ... }: +let + serv = import ../config/services.nix; + gtnh = serv.gtnh; + minecraftUid = 2000; + minecraftGid = 2000; + gtnhEnvironment = { + EULA = "TRUE"; + TYPE = "FORGE"; + VERSION = gtnh.version; + GENERIC_PACK = gtnh.serverPackUrl; + LOAD_ENV_FROM_GENERIC_PACK = "true"; + REMOVE_OLD_MODS = "TRUE"; + MEMORY = gtnh.memory; + USE_AIKAR_FLAGS = "true"; + TZ = gtnh.timezone; + UID = toString minecraftUid; + GID = toString minecraftGid; + }; +in { + virtualisation.docker.enable = true; + + users.groups.minecraft.gid = minecraftGid; + + users.users.minecraft = { + isSystemUser = true; + group = "minecraft"; + home = "/var/lib/minecraft"; + createHome = true; + uid = minecraftUid; + }; + + networking.firewall.allowedTCPPorts = [ gtnh.port ]; + + virtualisation.oci-containers.containers.gtnh = { + image = "itzg/minecraft-server:java21"; + autoStart = true; + + ports = [ + "${toString gtnh.port}:${toString gtnh.port}" + ]; + + volumes = [ + "/var/lib/minecraft:/data" + ]; + + environment = gtnhEnvironment; + }; +}