{ 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"; bcg-plus = "bcg.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=1800" "--network=minecraft-net" ]; vars = import ../vars.nix; minecraft_path = "${vars.primary_games}/minecraft"; in { virtualisation.oci-containers.containers = { mc-router = { image = "itzg/mc-router:latest"; extraOptions = [ "--network=haproxy-net" "--network=minecraft-net" ]; cmd = [ ( "--mapping=mc.alicehuston.xyz=${defaultServer}:25565" + (lib.rad-dev.mapAttrsToString (hostname: url: "," + url + "=" + hostname + ":25565") servers) ) ]; }; # rlcraft = { # image = "itzg/minecraft-server:java8"; # volumes = [ # "${minecraft_path}/rlcraft/modpacks:/modpacks:ro" # "${minecraft_path}/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 ]; # }; bcg-plus = { image = "itzg/minecraft-server:java17"; volumes = [ "${minecraft_path}/bcg-plus/modpacks:/modpacks:ro" "${minecraft_path}/bcg-plus/data:/data" ]; hostname = "bcg-plus"; environment = defaultEnv // { VERSION = "1.17"; CF_SLUG = "bcg"; DIFFICULTY = "normal"; DEBUG = "true"; # 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"; }; }; }