From 48a38e8e49e3bb73fce8c88981c7a3c989f2d15e Mon Sep 17 00:00:00 2001 From: Chris Kruining Date: Sun, 9 Mar 2025 18:49:51 +0100 Subject: [PATCH] got most of minecraft working, just need to figure out the mods now --- modules/services/games/minecraft.nix | 127 +++++++++++++++++++++------ 1 file changed, 99 insertions(+), 28 deletions(-) diff --git a/modules/services/games/minecraft.nix b/modules/services/games/minecraft.nix index 6093ed6..deb6598 100644 --- a/modules/services/games/minecraft.nix +++ b/modules/services/games/minecraft.nix @@ -19,12 +19,43 @@ in user = "chris"; dataDir = "/var/lib/minecraft"; - managementSystem.systemd-socket.enable = true; + managementSystem = { + tmux.enable = false; + systemd-socket.enable = true; + }; - servers = { + servers = let + whitelist = { + ChrisPBacon = "e6128495-075b-44a9-87f6-8d844d5ea0e4"; + satanjr616 = "1718f9d5-df1d-4aac-b10c-3229a0f1e8b2"; + Ono95 = "010e7652-6d5d-4f9e-af89-438c8fe694ca"; + JackLeLumber = "41910a94-8c8e-4528-a8ca-a2d7043f069d"; + DarkyLink = "6faddb7f-12a9-4aac-bc08-dd6db892a380"; + Archonite86 = "b5ab594d-de1c-4453-ba32-9107452be51b"; + NotACultist86 = "44ac3f7c-0e18-4234-bb04-11a0652cdaeb"; + }; + ops = [ + { + uuid = "e6128495-075b-44a9-87f6-8d844d5ea0e4"; + name = "ChrisPBacon"; + level = 4; + bypassesPlayerLimit = false; + } + { + uuid = "6faddb7f-12a9-4aac-bc08-dd6db892a380"; + name = "DarkyLink"; + level = 4; + bypassesPlayerLimit = false; + } + ]; + jvmOpts = "-Xms4092M -Xmx4092M -XX:+UseG1GC -Djava.net.preferIPv4Stack=true"; + in { vanilla = { enable = true; autoStart = true; + restart = "always"; + inherit whitelist; + inherit jvmOpts; package = pkgs.fabricServers.fabric-1_21_4.override { loaderVersion = "0.16.10"; }; @@ -43,20 +74,12 @@ in spawn-protection = 0; }; - whitelist = { - ChrisPBacon = "e6128495-075b-44a9-87f6-8d844d5ea0e4"; - satanjr616 = "1718f9d5-df1d-4aac-b10c-3229a0f1e8b2"; - Ono95 = "010e7652-6d5d-4f9e-af89-438c8fe694ca"; - JackLeLumber = "41910a94-8c8e-4528-a8ca-a2d7043f069d"; - DarkyLink = "6faddb7f-12a9-4aac-bc08-dd6db892a380"; - Archonite86 = "b5ab594d-de1c-4453-ba32-9107452be51b"; - NotACultist86 = "44ac3f7c-0e18-4234-bb04-11a0652cdaeb"; + files."ops.json" = { + value = ops; }; - jvmOpts = "-Xms4092M -Xmx4092M -XX:+UseG1GC -Djava.net.preferIPv4Stack=true"; - symlinks = let - inherit (lib.attrsets) attrValues; + inherit (builtins) attrValues; inherit (pkgs) linkFarmFromDrvs fetchurl; in { mods = linkFarmFromDrvs "mods" (attrValues { @@ -65,22 +88,70 @@ in # DistantHorizons = fetchurl { url = "https://cdn.modrinth.com/data/uCdwusMi/versions/jptcCdp2/DistantHorizons-2.2.1-a-1.20.4-forge-fabric.jar"; sha512 = "47368d91099d0b5f364339a69f4e425f8fb1e3a7c3250a8b649da76135e68a22f1a76b191c87e15a5cdc0a1d36bc57f2fa825490d96711d09d96807be97d575d"; }; }); }; + }; - files."ops.json" = { - value = [ - { - uuid = "e6128495-075b-44a9-87f6-8d844d5ea0e4"; - name = "ChrisPBacon"; - level = 4; - bypassesPlayerLimit = false; - } - { - uuid = "6faddb7f-12a9-4aac-bc08-dd6db892a380"; - name = "DarkyLink"; - level = 4; - bypassesPlayerLimit = false; - } - ]; + tekxit = let + inherit (pkgs) fetchzip; + + src = fetchzip { + url = "https://tekxit.b-cdn.net/downloads/tekxit4/12.0.0Tekxit4Server.zip"; + hash = "sha256-4NqeMGOpji/gMH8XX8RemkBAOB9ID/i1S3/xXgD23to="; + stripRoot = true; + }; + in { + enable = true; + autoStart = true; + restart = "no"; + inherit whitelist; + inherit jvmOpts; + + package = pkgs.fabricServers.fabric-1_19_2.override { loaderVersion = "0.16.9"; }; + + serverProperties = { + gamemode = "survival"; + difficulty = 3; + motd = "Chris' vanilla server"; + white-list = true; + simulation-distance = 10; + server-port = 25502; + level-name = "world"; + + allow-flight = true; + enable-command-block = true; + enforce-whitelist = true; + spawn-protection = 0; + }; + + files = let + inherit (builtins) readFile listToAttrs attrNames readDir mapAttrs; + inherit (lib.attrsets) nameValuePair; + inherit (lib) concatMapAttrs; + inherit (lib.my) mapFilterAttrs; + + readDirRec = src: dir: fn: + concatMapAttrs (name: type: if type == "directory" + then (readDirRec src "${dir}/${name}" fn) + else { "${dir}/${name}" = (fn "${dir}/${name}"); } + ) (readDir "${src}/${dir}"); + + copyDir = dir: readDirRec src dir (x: "${src}/${x}"); + in { + "ops.json" = { + value = ops; + }; + } + // (copyDir "config"); + + symlinks = let + inherit (builtins) attrNames readDir map; + inherit (pkgs) linkFarm fetchzip; + + linkFarmFromDir = name: dir: linkFarm name (map (x: { name = x; path = "${src}/${dir}/${x}"; }) (attrNames (readDir "${src}/${dir}"))); + in { + Deftu = linkFarmFromDir "tekxit-deftu" "Deftu"; + TKXAddons = linkFarmFromDir "tekxit-TKXAddons" "TKXAddons"; + mods = linkFarmFromDir "tekxit-mods" "mods"; + scripts = linkFarmFromDir "tekxit-scripts" "scripts"; }; }; };