From 818fd0a58189b9077915e99c266c59ded34641d3 Mon Sep 17 00:00:00 2001 From: NullBite Date: Wed, 26 Jun 2024 11:38:45 -0400 Subject: [PATCH] system/minecraft: use submodule extension --- hosts/nullbox/mcserver.nix | 7 +-- system/default.nix | 2 +- system/minecraft.nix | 92 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 97 insertions(+), 4 deletions(-) create mode 100644 system/minecraft.nix diff --git a/hosts/nullbox/mcserver.nix b/hosts/nullbox/mcserver.nix index d093f0c..50d851a 100644 --- a/hosts/nullbox/mcserver.nix +++ b/hosts/nullbox/mcserver.nix @@ -1,7 +1,6 @@ { pkgs, lib, config, ... }: let cfg = config.services.minecraft-servers; - inherit (config.nixfiles.lib.minecraft) mkServer; in { config = { @@ -50,7 +49,8 @@ in exec ${pkgs.jre_headless}/bin/java $@ -jar ./quilt-server-launch.jar nogui ''; in { - notlite = mkServer { + notlite = { + useRecommendedDefaults = true; enable = true; autoStart = true; modpack = notlite-modpack; @@ -70,7 +70,8 @@ in minecraft-nixtest = let self = cfg.servers.minecraft-nixtest; package = pkgs.quiltServers.quilt-1_20_1.override { loaderVersion = "0.21.0"; }; - in config.nixfiles.lib.minecraft.mkServer { + in { + useRecommendedDefaults = true; enable = false; modpack = notlite-modpack; # package = shimPackage; diff --git a/system/default.nix b/system/default.nix index 28c94d9..ad1399c 100644 --- a/system/default.nix +++ b/system/default.nix @@ -16,7 +16,7 @@ in ./mitigations.nix # modules - inputs.nix-minecraft.nixosModules.minecraft-servers + ./minecraft.nix # imports inputs.nix-minecraft inputs.impermanence.nixosModules.impermanence inputs.agenix.nixosModules.default ./stylix.nix # imports inputs.stylix diff --git a/system/minecraft.nix b/system/minecraft.nix new file mode 100644 index 0000000..3cb3acc --- /dev/null +++ b/system/minecraft.nix @@ -0,0 +1,92 @@ +{ config, lib, pkgs, inputs, ... }: +{ + imports = [ + inputs.nix-minecraft.nixosModules.minecraft-servers + ]; + options.services.minecraft-servers.servers = let + serverModule = { name, config, ... }: { + options = { + useRecommendedDefaults = lib.mkOption { + type = lib.types.bool; + description = "Whether to use recommended server settings."; + default = false; + }; + + modpack = lib.mkOption { + description = "Modpack to use"; + type = with lib.types; nullOr package; + default = null; + }; + + modpackFiles = lib.mkOption { + description = "List of files from modpack to copy into server directory"; + type = with lib.types; listOf string; + default = [ ]; + }; + + modpackSymlinks = lib.mkOption { + description = "List of files from modpack to symlink into server directory"; + type = with lib.types; listOf string; + default = [ ]; + }; + }; + + config = lib.mkMerge [ + (lib.mkIf config.useRecommendedDefaults { + autoStart = lib.mkDefault true; + jvmOpts = "-Dlog4j2.formatMsgNoLookups=true"; + + 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; + + # other preferred settings + pvp = lib.mkDefault true; + difficulty = lib.mkDefault "hard"; + }; + }) + (lib.mkIf (!(builtins.isNull config.modpack)) { + symlinks = lib.genAttrs config.modpackSymlinks (path: "${config.modpack}/${path}"); + files = lib.genAttrs config.modpackFiles (path: "${config.modpack}/${path}"); + + package = let + inherit (config) modpack; + + 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; + + serverPackage = pkgs.minecraftServers."${loader}-${fixedVersion}".override { inherit loaderVersion; }; + in lib.mkDefault serverPackage; + }) + ]; + }; + in lib.mkOption { + type = with lib.types; attrsOf (submodule serverModule); + }; +}