From 7bd5b8cbdf0bd5b3f216a08fbc58004f91b3a3d5 Mon Sep 17 00:00:00 2001 From: Jack O'Sullivan Date: Tue, 18 Feb 2025 17:15:03 +0000 Subject: [PATCH] nixos/whale2: Add kevcraft --- lib/constants.nix | 15 +++++-- nixos/boxes/colony/vms/estuary/default.nix | 4 +- nixos/boxes/colony/vms/estuary/dns.nix | 2 + nixos/boxes/colony/vms/whale2/default.nix | 1 + .../colony/vms/whale2/minecraft/default.nix | 40 ++++++++++++++++++ .../boxes/colony/vms/whale2/minecraft/kev.png | Bin 0 -> 10635 bytes 6 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 nixos/boxes/colony/vms/whale2/minecraft/kev.png diff --git a/lib/constants.nix b/lib/constants.nix index c9920cc..93b0f59 100644 --- a/lib/constants.nix +++ b/lib/constants.nix @@ -200,12 +200,17 @@ rec { port = 25566; dst = aa.simpcraft-staging-oci.internal.ipv4.address; } - { - port = 25575; - dst = aa.simpcraft-oci.internal.ipv4.address; + port = 25567; + dst = aa.kevcraft-oci.internal.ipv4.address; } + # RCON... unsafe? + # { + # port = 25575; + # dst = aa.simpcraft-oci.internal.ipv4.address; + # } + { port = 2456; dst = aa.valheim-oci.internal.ipv4.address; @@ -228,6 +233,10 @@ rec { dst = aa.simpcraft-oci.internal.ipv4.address; proto = "udp"; } + { + port = 25567; + dst = aa.kevcraft-oci.internal.ipv4.address; + } { port = 15636; diff --git a/nixos/boxes/colony/vms/estuary/default.nix b/nixos/boxes/colony/vms/estuary/default.nix index 76946d2..9715b1f 100644 --- a/nixos/boxes/colony/vms/estuary/default.nix +++ b/nixos/boxes/colony/vms/estuary/default.nix @@ -399,8 +399,9 @@ in ip6 daddr ${aa.middleman.internal.ipv6.address} tcp dport { http, https, 8448 } accept ${matchInet "tcp dport { http, https } accept" "git"} - ip6 daddr ${aa.simpcraft-oci.internal.ipv6.address} tcp dport { 25565, 25575 } accept + ip6 daddr ${aa.simpcraft-oci.internal.ipv6.address} tcp dport 25565 accept ip6 daddr ${aa.simpcraft-staging-oci.internal.ipv6.address} tcp dport 25565 accept + ip6 daddr ${aa.kevcraft-oci.internal.ipv6.address} tcp dport 25567 accept return } chain routing-udp { @@ -408,6 +409,7 @@ in ip6 daddr ${aa.waffletail.internal.ipv6.address} udp dport 41641 accept ip6 daddr ${aa.simpcraft-oci.internal.ipv6.address} udp dport 25565 accept ip6 daddr ${aa.enshrouded-oci.internal.ipv6.address} udp dport { 15636-15637 } accept + ip6 daddr ${aa.kevcraft-oci.internal.ipv6.address} udp dport 25567 accept return } chain filter-routing { diff --git a/nixos/boxes/colony/vms/estuary/dns.nix b/nixos/boxes/colony/vms/estuary/dns.nix index b1363f9..ab1e5ad 100644 --- a/nixos/boxes/colony/vms/estuary/dns.nix +++ b/nixos/boxes/colony/vms/estuary/dns.nix @@ -154,6 +154,8 @@ in simpcraft-staging IN A ${assignments.internal.ipv4.address} simpcraft-staging IN AAAA ${allAssignments.simpcraft-staging-oci.internal.ipv6.address} enshrouded IN A ${assignments.internal.ipv4.address} + kevcraft IN A ${assignments.internal.ipv4.address} + kevcraft IN AAAA ${allAssignments.kevcraft-oci.internal.ipv6.address} mail-vm IN A ${net.cidr.host 0 prefixes.mail.v4} mail-vm IN AAAA ${net.cidr.host 1 prefixes.mail.v6} diff --git a/nixos/boxes/colony/vms/whale2/default.nix b/nixos/boxes/colony/vms/whale2/default.nix index c154e1f..8c38791 100644 --- a/nixos/boxes/colony/vms/whale2/default.nix +++ b/nixos/boxes/colony/vms/whale2/default.nix @@ -53,6 +53,7 @@ in simpcraft-oci = 3; simpcraft-staging-oci = 4; enshrouded-oci = 5; + kevcraft-oci = 6; }; configuration = { lib, pkgs, modulesPath, config, assignments, allAssignments, ... }: diff --git a/nixos/boxes/colony/vms/whale2/minecraft/default.nix b/nixos/boxes/colony/vms/whale2/minecraft/default.nix index 9eb5560..8dc0d78 100644 --- a/nixos/boxes/colony/vms/whale2/minecraft/default.nix +++ b/nixos/boxes/colony/vms/whale2/minecraft/default.nix @@ -104,6 +104,46 @@ in # ''--network=colony:${dockerNetAssignment allAssignments "simpcraft-staging-oci"}'' # ]; # }; + + kevcraft = { + # 2025.2.1-java21-alpine + image = "itzg/minecraft-server@sha256:57e319c15e9fee63f61029a65a33acc3de85118b21a2b4bb29f351cf4a915027"; + + environment = { + TYPE = "VANILLA"; + VERSION = "1.20.1"; + SERVER_PORT = "25567"; + QUERY_PORT = "25567"; + + EULA = "true"; + ENABLE_QUERY = "true"; + ENABLE_RCON = "true"; + MOTD = "§4§k----- §9K§ae§bv§cc§dr§ea§ff§6t §4§k-----"; + ICON = "/ext/icon.png"; + + EXISTING_WHITELIST_FILE = "SYNCHRONIZE"; + WHITELIST = whitelist; + EXISTING_OPS_FILE = "SYNCHRONIZE"; + OPS = op; + DIFFICULTY = "normal"; + SPAWN_PROTECTION = "0"; + # VIEW_DISTANCE = "20"; + + MAX_MEMORY = "4G"; + + TZ = "Europe/Dublin"; + }; + environmentFiles = [ config.age.secrets."whale2/simpcraft.env".path ]; + + volumes = [ + "kevcraft_data:/data" + "${./kev.png}:/ext/icon.png:ro" + ]; + + extraOptions = [ + ''--network=colony:${dockerNetAssignment allAssignments "kevcraft-oci"}'' + ]; + }; }; services = { diff --git a/nixos/boxes/colony/vms/whale2/minecraft/kev.png b/nixos/boxes/colony/vms/whale2/minecraft/kev.png new file mode 100644 index 0000000000000000000000000000000000000000..63d28e1315a5fdc42263d0b1f5c0b35d77868bc1 GIT binary patch literal 10635 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