{ pkgs, service_configs, lib, username, config, serviceMountDeps, ... }: { imports = [ (serviceMountDeps "minecraft-server-${service_configs.minecraft.server_name}" [ "${service_configs.minecraft.parent_dir}/${service_configs.minecraft.server_name}" ]) ]; environment.systemPackages = [ (pkgs.writeScriptBin "mc-console" '' #!/bin/sh ${pkgs.tmux}/bin/tmux -S /run/minecraft/${service_configs.minecraft.server_name}.sock attach '') ]; nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "minecraft-server" ]; services.minecraft-servers = { enable = true; eula = true; dataDir = service_configs.minecraft.parent_dir; openFirewall = true; servers.${service_configs.minecraft.server_name} = { enable = true; package = pkgs.fabricServers.fabric-1_21_5; jvmOpts = let heap_size = "10000M"; in "-Xmx${heap_size} -Xms${heap_size} -XX:+UseZGC -XX:+ZGenerational"; serverProperties = { server-port = 25565; enforce-whitelist = true; gamemode = "survival"; white-list = true; difficulty = "easy"; motd = "A Minecraft Server"; view-distance = 10; simulation-distance = 6; sync-chunk-writes = false; spawn-protection = 0; }; whitelist = import ../secrets/minecraft-whitelist.nix; symlinks = { "mods" = pkgs.linkFarmFromDrvs "mods" ( with pkgs; builtins.attrValues { FabricApi = fetchurl { url = "https://cdn.modrinth.com/data/P7dR8mSH/versions/vcgUMTb2/fabric-api-0.124.0%2B1.21.5.jar"; sha512 = "674c876eb68e00fd19c3644286ea76380b639df068d51de77439d20c8abeb9460bfafe7d6e1dd6bedbcbcd500356a17f89488b73cd832a4599ee091700c7fad4"; }; FerriteCore = fetchurl { url = "https://cdn.modrinth.com/data/uXXizFIs/versions/CtMpt7Jr/ferritecore-8.0.0-fabric.jar"; sha512 = "131b82d1d366f0966435bfcb38c362d604d68ecf30c106d31a6261bfc868ca3a82425bb3faebaa2e5ea17d8eed5c92843810eb2df4790f2f8b1e6c1bdc9b7745"; }; Lithium = fetchurl { url = "https://cdn.modrinth.com/data/gvQqBUqZ/versions/VWYoZjBF/lithium-fabric-0.16.2%2Bmc1.21.5.jar"; sha512 = "09a68051504bb16069dd6af8901f2bbeadfd08ad5353d8bcc0c4784e814fb293d9197b4fb0a8393be1f2db003cd987a9e4b98391bbe18c50ae181dace20c2fa4"; }; NoChatReports = fetchurl { url = "https://cdn.modrinth.com/data/qQyHxfxd/versions/CHlHxkvf/NoChatReports-FABRIC-1.21.5-v2.12.0.jar"; sha512 = "c0825db25672cf8b50face51ec8a6bedb4be50b374a2537640a433c98817bc07c177485e93ab8cee9e3f7bfb1d2eb1460309e818b411764c92426b552487a9f7"; }; squaremap = fetchurl { url = "https://github.com/jpenilla/squaremap/releases/download/v1.3.6/squaremap-fabric-mc1.21.5-1.3.6.jar"; sha256 = "Y3CiPf8qzZ0q2vfi4z3QoQgXdPZlT/gBm1ghlmGJCZQ="; }; scalablelux = fetchurl { url = "https://cdn.modrinth.com/data/Ps1zyz6x/versions/UueJNiJn/ScalableLux-0.1.3%2Bbeta.1%2Bfabric.4039a8d-all.jar"; sha512 = "144dd32f5f7b9c015ae2ff2efc8ba58c561d0fae7a22aba071f0d45f8b3154ae8d23783e9a0308c80eee51857a0ef68191c444830e5da3b44021f03b55a26da2"; }; c2me = fetchurl { url = "https://cdn.modrinth.com/data/VSNURh3q/versions/jrmtD6AF/c2me-fabric-mc1.21.5-0.3.3.0.0.jar"; sha512 = "4d6a3efcef9aaec8b494f1ac5917c5230175d6485592243a45eb2ee263baf481ce07681b0fb5b65a4969cd08d4708e001a83b17949dad32a646a8ea26052a9f9"; }; alternatecurrent = fetchurl { url = "https://cdn.modrinth.com/data/r0v8vy1s/versions/eTNKfjl1/alternate-current-mc1.21.5-1.9.0.jar"; sha512 = "3e4088170917846b30275825420b553e3fc3befb52bb259848853b93343bae3b39cd592902c0c79f05b17381d80170784990d9c4e110ff3b6c552e5508b40d67"; }; # fix `Error sending packet clientbound/minecraft:disconnect` error disconnectpacketfix = fetchurl { url = "https://cdn.modrinth.com/data/rd9rKuJT/versions/Gv74xveQ/disconnect-packet-fix-fabric-2.0.0.jar"; sha512 = "1fd6f09a41ce36284e1a8e9def53f3f6834d7201e69e54e24933be56445ba569fbc26278f28300d36926ba92db6f4f9c0ae245d23576aaa790530345587316db"; }; packetfixer = fetchurl { url = "https://cdn.modrinth.com/data/c7m1mi73/versions/nBmGzZcV/packetfixer-fabric-1.21.5-2.1.2.jar"; sha512 = "b66042f85072e037bb43c6cfa59e889204ffc06768ba6c393f3cfdb735b11192b5390ac79b022713739ac836b9662f5e476690b3d6b9dd350cbe2de5449eddbe"; }; krypton = fetchurl { url = "https://cdn.modrinth.com/data/fQEb0iXm/versions/neW85eWt/krypton-0.2.9.jar"; sha512 = "2e2304b1b17ecf95783aee92e26e54c9bfad325c7dfcd14deebf9891266eb2933db00ff77885caa083faa96f09c551eb56f93cf73b357789cb31edad4939ffeb"; }; spark = fetchurl { url = "https://cdn.modrinth.com/data/l6YH9Als/versions/65SnrRgF/spark-1.10.138-fabric.jar"; sha512 = "c2bdb171c7ec1783f9efb0ff9a995433fd5838bd8571896be4f498c857ae9f2242d3f24c0541cd96049ea29d742a0e3f8077a3bd1af5d79654f19d34a3adc79c"; }; } ); }; }; }; services.caddy.virtualHosts."map.${service_configs.https.domain}".extraConfig = '' root * ${service_configs.minecraft.parent_dir}/${service_configs.minecraft.server_name}/squaremap/web file_server browse ''; users.users.${config.services.caddy.user}.extraGroups = [ # for `map.gardling.com` "minecraft" ]; systemd.tmpfiles.rules = [ "d ${service_configs.minecraft.parent_dir}/${service_configs.minecraft.server_name} 0750 minecraft minecraft" ]; users.users.${username}.extraGroups = [ "minecraft" ]; }