{ 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_6; 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/N3z6cNQv/fabric-api-0.127.1%2B1.21.6.jar"; sha512 = "c7b4ea754a486193476b33ac4d1eaeb30b644e05b76a6abe8cf51ca4eb6832063d32293f1c9052c32c806712d26f85b531085a3ff52575021ee831a804167c4d"; }; 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/XWGBHYcB/lithium-fabric-0.17.0%2Bmc1.21.6.jar"; sha512 = "a8d6a8b69ae2b10dd0cf8f8149260d5bdbd2583147462bad03380014edd857852972b967d97df69728333d8836b1e9db8997712ea26365ddb8a05b8c845c6534"; }; NoChatReports = fetchurl { url = "https://cdn.modrinth.com/data/qQyHxfxd/versions/G2i6IY0q/NoChatReports-FABRIC-1.21.6-v2.13.0.jar"; sha512 = "8586a61185d4c381ccfef2f8e4cce04cd43e4d1d13bf89ece643495b41e1942c0a2c82f438f7e2afcd8ad0babed16265182da82316c55929eb293c763c317678"; }; squaremap = fetchurl { url = "https://jenkins.jpenilla.xyz/job/squaremap/lastSuccessfulBuild/artifact/build/libs/squaremap-fabric-mc1.21.6-1.3.7-SNAPSHOT+2604148.jar"; sha256 = "6TUPi6/1fbOFyWDu2pzP9YKPYohSgTryaAghV4I+fqs="; }; 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/y6wodInu/c2me-fabric-mc1.21.6-0.3.4%2Balpha.0.42.jar"; sha512 = "3d53b1dd84a036b5fb91f15a0bc538e6f2a4ac207c4749ab1ab874972178bc2cc20f1fe1c2f8c08e9eef0a66b4f6b2de22314d94d0498abcf025219dfc69d756"; }; 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/qW2mPW6y/spark-1.10.139-fabric.jar"; sha512 = "cd991acee93c074912f2934b5a9c3967be2f1e9157ca5a7254fd3fce8d280c5aa9a3ab06d3ee19f06c5111181853cf12048d000bf8b9f722c902c080fe258a97"; }; # not updated to 1.21.6 /* better-fabric-console = fetchurl { url = "https://cdn.modrinth.com/data/Y8o1j1Sf/versions/OexcFHtG/better-fabric-console-mc1.21.5-1.2.3.jar"; sha512 = "0a5b0da9d6d3c78ed9af66d2bca3976889649942025aecf7f469bea500ce7914070569259332fefb3629b2eb478ee0cfbf85252aaec5d7969727c1668732e8f4"; }; */ } ); }; }; }; 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" ]; }