{ config, lib, ... }: let servers = { atm6 = "atm6.alicehuston.xyz"; stoneblock3 = "sb3.alicehuston.xyz"; RAD2 = "rad.alicehuston.xyz"; skyfactory = "sf.alicehuston.xyz"; divinejourney = "dj.alicehuston.xyz"; rlcraft = "rlcraft.alicehuston.xyz"; arcanum-institute = "arcanum.alicehuston.xyz"; }; defaultServer = "rlcraft"; defaultEnv = { EULA = "true"; TYPE = "AUTO_CURSEFORGE"; STOP_SERVER_ANNOUNCE_DELAY = "120"; STOP_DURATION = "600"; SYNC_CHUNK_WRITES = "false"; USE_AIKAR_FLAGS = "true"; MEMORY = "8GB"; ALLOW_FLIGHT = "true"; MAX_TICK_TIME = -1; }; defaultOptions = [ "--stop-signal=SIGTERM" "--stop-timeout=30m" "--restart=unless-stopped" "--network=minecraft-net" ]; in { virtualisation.oci-containers = { mc-router = { image = "itzg/mc-router:latest"; extraOptions = [ "--restart=always" "--network=haproxy-net" "--network=minecraft-net" ]; command = "--mapping=mc.alicehuston.xyz=${defaultServer}:25565" + (lib.mapAttrs (hostname: url: ",${url}=${hostname}:25565") servers); }; rlcraft = { image = "itzg/minecraft-server:java8"; volumes = [ "/ZFS/ZFS-primary/games/minecraft/rlcraft/modpacks:/modpacks:ro" "/ZFS/ZFS-primary/games/minecraft/rlcraft/data:/data" ]; hostname = "rlcraft"; environment = defaultEnv // { VERSION = "1.12.2"; CF_SLUG = "rlcraft"; DIFFICULTY = "hard"; ENABLE_COMMAND_BLOCK = "true"; }; extraOptions = defaultOptions; log-driver = "local"; environmentFiles = [ config.sops.secrets."docker/minecraft".path ]; }; }; sops = { defaultSopsFile = ../secrets.yaml; secrets = { "docker/minecraft".owner = "docker-service"; }; }; }