diff --git a/lib/nixfiles/default.nix b/lib/nixfiles/default.nix index 3551628..f0e74a5 100644 --- a/lib/nixfiles/default.nix +++ b/lib/nixfiles/default.nix @@ -4,4 +4,5 @@ let in { types = (import ./types.nix) pkgs; + minecraft = (import ./minecraft.nix) pkgs; } diff --git a/lib/nixfiles/minecraft.nix b/lib/nixfiles/minecraft.nix new file mode 100644 index 0000000..e5f1dcb --- /dev/null +++ b/lib/nixfiles/minecraft.nix @@ -0,0 +1,63 @@ +pkgs: +let + inherit (pkgs) lib; +in +{ + mkServer = { modpack ? null, modpackSymlinks ? [], modpackFiles ? [], jvmOpts ? null, ...}@opts: let + # log4j exploit is bad and scary and i have no idea if this is still needed + # but it's best to be on the safe side + jvmOptsPatched = let + requiredJvmOpts = "-Dlog4j2.formatMsgNoLookups=true"; + in if (!(builtins.isNull jvmOpts)) + then requiredJvmOpts + " " + jvmOpts + else requiredJvmOpts; + + symlinks = lib.genAttrs modpackSymlinks (path: "${modpack}/${path}"); + files = lib.genAttrs modpackFiles (path: "${modpack}/${path}"); + + serverPackage = let + mcVersion = modpack.manifest.versions.minecraft; + fixedVersion = lib.replaceStrings [ "." ] [ "_" ] mcVersion; + quiltVersion = modpack.manifest.versions.quilt or null; + fabricVersion = modpack.manifest.versions.fabric or null; + loader = if (!(builtins.isNull quiltVersion)) then "quilt" else "fabric"; + loaderVersion = if loader == "quilt" then quiltVersion else fabricVersion; + in pkgs.minecraftServers."${loader}-${fixedVersion}".override { inherit loaderVersion; }; + + in lib.mkMerge [ + (lib.mkIf (!(builtins.isNull modpack)) { + inherit symlinks files; + package = lib.mkDefault serverPackage; + }) + { + autoStart = lib.mkDefault true; + jvmOpts = jvmOptsPatched; + whitelist = lib.mkDefault { + NullBite = "e24e8e0e-7540-4126-b737-90043155bcd4"; + Silveere = "468554f1-27cd-4ea1-9308-3dd14a9b1a12"; + YzumThreeEye = "3dad78e8-6979-404f-820e-952ce20964a0"; + }; + serverProperties = { + # allows no chat reports to run + enforce-secure-profile = lib.mkDefault false; + + # whitelist + white-list = lib.mkDefault true; + enforce-whitelist = lib.mkDefault true; + + motd = lib.mkDefault "owo what's this (nix preset edition)"; + enable-rcon = lib.mkDefault false; + + # btrfs performance fix + sync-chunk-writes = lib.mkDefault false; + + # this helps with some mod support. disable it on public servers. + allow-flight = lib.mkDefault true; + + # no telemetry + snooper-enabled = lib.mkDefault false; + }; + } + (builtins.removeAttrs opts [ "modpack" "modpackSymlinks" "modpackFiles" "jvmOpts" ]) + ]; +}