190 lines
8.2 KiB
Nix
190 lines
8.2 KiB
Nix
{
|
|
pkgs,
|
|
service_configs,
|
|
lib,
|
|
config,
|
|
inputs,
|
|
...
|
|
}:
|
|
{
|
|
imports = [
|
|
(lib.serviceMountWithZpool "minecraft-server-${service_configs.minecraft.server_name}"
|
|
service_configs.zpool_ssds
|
|
[
|
|
"${service_configs.minecraft.parent_dir}/${service_configs.minecraft.server_name}"
|
|
]
|
|
)
|
|
inputs.nix-minecraft.nixosModules.minecraft-servers
|
|
(lib.serviceFilePerms "minecraft-server-${service_configs.minecraft.server_name}" [
|
|
"Z ${service_configs.minecraft.parent_dir}/${service_configs.minecraft.server_name} 700 ${config.services.minecraft-servers.user} ${config.services.minecraft-servers.group}"
|
|
"Z ${service_configs.minecraft.parent_dir}/${service_configs.minecraft.server_name}/squaremap/web 750 ${config.services.minecraft-servers.user} ${config.services.minecraft-servers.group}"
|
|
])
|
|
];
|
|
|
|
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_11;
|
|
|
|
jvmOpts =
|
|
let
|
|
heap_size = "4000M";
|
|
in
|
|
lib.concatStringsSep " " [
|
|
# Memory
|
|
"-Xmx${heap_size}"
|
|
"-Xms${heap_size}"
|
|
# GC
|
|
"-XX:+UseZGC"
|
|
"-XX:+ZGenerational"
|
|
# Base JVM optimizations (brucethemoose/Minecraft-Performance-Flags-Benchmarks)
|
|
"-XX:+UnlockExperimentalVMOptions"
|
|
"-XX:+UnlockDiagnosticVMOptions"
|
|
"-XX:+AlwaysActAsServerClassMachine"
|
|
"-XX:+AlwaysPreTouch"
|
|
"-XX:+DisableExplicitGC"
|
|
"-XX:+UseNUMA"
|
|
"-XX:+PerfDisableSharedMem"
|
|
"-XX:+UseFastUnorderedTimeStamps"
|
|
"-XX:+UseCriticalJavaThreadPriority"
|
|
"-XX:ThreadPriorityPolicy=1"
|
|
"-XX:AllocatePrefetchStyle=3"
|
|
"-XX:-DontCompileHugeMethods"
|
|
"-XX:MaxNodeLimit=240000"
|
|
"-XX:NodeLimitFudgeFactor=8000"
|
|
"-XX:ReservedCodeCacheSize=400M"
|
|
"-XX:NonNMethodCodeHeapSize=12M"
|
|
"-XX:ProfiledCodeHeapSize=194M"
|
|
"-XX:NonProfiledCodeHeapSize=194M"
|
|
"-XX:NmethodSweepActivity=1"
|
|
"-XX:+UseVectorCmov"
|
|
# Large pages (requires vm.nr_hugepages sysctl)
|
|
"-XX:+UseLargePages"
|
|
"-XX:LargePageSizeInBytes=2m"
|
|
];
|
|
|
|
serverProperties = {
|
|
server-port = service_configs.ports.minecraft;
|
|
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/i5tSkVBH/fabric-api-0.141.3%2B1.21.11.jar";
|
|
sha512 = "c20c017e23d6d2774690d0dd774cec84c16bfac5461da2d9345a1cd95eee495b1954333c421e3d1c66186284d24a433f6b0cced8021f62e0bfa617d2384d0471";
|
|
};
|
|
|
|
FerriteCore = fetchurl {
|
|
url = "https://cdn.modrinth.com/data/uXXizFIs/versions/Ii0gP3D8/ferritecore-8.2.0-fabric.jar";
|
|
sha512 = "3210926a82eb32efd9bcebabe2f6c053daf5c4337eebc6d5bacba96d283510afbde646e7e195751de795ec70a2ea44fef77cb54bf22c8e57bb832d6217418869";
|
|
};
|
|
|
|
Lithium = fetchurl {
|
|
url = "https://cdn.modrinth.com/data/gvQqBUqZ/versions/qvNsoO3l/lithium-fabric-0.21.3%2Bmc1.21.11.jar";
|
|
sha512 = "2883739303f0bb602d3797cc601ed86ce6833e5ec313ddce675f3d6af3ee6a40b9b0a06dafe39d308d919669325e95c0aafd08d78c97acd976efde899c7810fd";
|
|
};
|
|
|
|
NoChatReports = fetchurl {
|
|
url = "https://cdn.modrinth.com/data/qQyHxfxd/versions/rhykGstm/NoChatReports-FABRIC-1.21.11-v2.18.0.jar";
|
|
sha512 = "d2c35cc8d624616f441665aff67c0e366e4101dba243bad25ed3518170942c1a3c1a477b28805cd1a36c44513693b1c55e76bea627d3fced13927a3d67022ccc";
|
|
};
|
|
|
|
squaremap = fetchurl {
|
|
url = "https://cdn.modrinth.com/data/PFb7ZqK6/versions/BW8lMXBi/squaremap-fabric-mc1.21.11-1.3.12.jar";
|
|
sha512 = "f62eb791a3f5812eb174565d318f2e6925353f846ef8ac56b4e595f481494e0c281f26b9e9fcfdefa855093c96b735b12f67ee17c07c2477aa7a3439238670d9";
|
|
};
|
|
|
|
scalablelux = fetchurl {
|
|
url = "https://cdn.modrinth.com/data/Ps1zyz6x/versions/PV9KcrYQ/ScalableLux-0.1.6%2Bfabric.c25518a-all.jar";
|
|
sha512 = "729515c1e75cf8d9cd704f12b3487ddb9664cf9928e7b85b12289c8fbbc7ed82d0211e1851375cbd5b385820b4fedbc3f617038fff5e30b302047b0937042ae7";
|
|
};
|
|
|
|
c2me = fetchurl {
|
|
url = "https://cdn.modrinth.com/data/VSNURh3q/versions/QdLiMUjx/c2me-fabric-mc1.21.11-0.3.7%2Balpha.0.7.jar";
|
|
sha512 = "f9543febe2d649a82acd6d5b66189b6a3d820cf24aa503ba493fdb3bbd4e52e30912c4c763fe50006f9a46947ae8cd737d420838c61b93429542573ed67f958e";
|
|
};
|
|
|
|
krypton = fetchurl {
|
|
url = "https://cdn.modrinth.com/data/fQEb0iXm/versions/O9LmWYR7/krypton-0.2.10.jar";
|
|
sha512 = "4dcd7228d1890ddfc78c99ff284b45f9cf40aae77ef6359308e26d06fa0d938365255696af4cc12d524c46c4886cdcd19268c165a2bf0a2835202fe857da5cab";
|
|
};
|
|
|
|
better-fabric-console = fetchurl {
|
|
url = "https://cdn.modrinth.com/data/Y8o1j1Sf/versions/6aIKl5wy/better-fabric-console-mc1.21.11-1.2.9.jar";
|
|
sha512 = "427247dafd99df202ee10b4bf60ffcbbecbabfadb01c167097ffb5b85670edb811f4d061c2551be816295cbbc6b8ec5ec464c14a6ff41912ef1f6c57b038d320";
|
|
};
|
|
|
|
disconnect-packet-fix = fetchurl {
|
|
url = "https://cdn.modrinth.com/data/rd9rKuJT/versions/Gv74xveQ/disconnect-packet-fix-fabric-2.0.0.jar";
|
|
sha512 = "1fd6f09a41ce36284e1a8e9def53f3f6834d7201e69e54e24933be56445ba569fbc26278f28300d36926ba92db6f4f9c0ae245d23576aaa790530345587316db";
|
|
};
|
|
|
|
packet-fixer = fetchurl {
|
|
url = "https://cdn.modrinth.com/data/c7m1mi73/versions/CUh1DWeO/packetfixer-fabric-3.3.4-1.21.11.jar";
|
|
sha512 = "33331b16cb40c5e6fbaade3cacc26f3a0e8fa5805a7186f94d7366a0e14dbeee9de2d2e8c76fa71f5e9dd24eb1c261667c35447e32570ea965ca0f154fdfba0a";
|
|
};
|
|
|
|
# fork of Modernfix for 1.21.11 (upstream will support 26.1)
|
|
modernfix = fetchurl {
|
|
url = "https://cdn.modrinth.com/data/TjSm1wrD/versions/JwSO8JCN/modernfix-5.25.2-build.4.jar";
|
|
sha512 = "0d65c05ac0475408c58ef54215714e6301113101bf98bfe4bb2ba949fbfddd98225ac4e2093a5f9206a9e01ba80a931424b237bdfa3b6e178c741ca6f7f8c6a3";
|
|
};
|
|
|
|
debugify = fetchurl {
|
|
url = "https://cdn.modrinth.com/data/QwxR6Gcd/versions/8Q49lnaU/debugify-1.21.11%2B1.0.jar";
|
|
sha512 = "04d82dd33f44ced37045f1f9a54ad4eacd70861ff74a8800f2d2df358579e6cb0ea86a34b0086b3e87026b1a0691dd6594b4fdc49f89106466eea840518beb03";
|
|
};
|
|
|
|
}
|
|
);
|
|
};
|
|
};
|
|
};
|
|
|
|
systemd.services.minecraft-server-main = {
|
|
serviceConfig = {
|
|
Nice = -5;
|
|
IOSchedulingPriority = 0;
|
|
LimitMEMLOCK = "infinity"; # Required for large pages
|
|
};
|
|
};
|
|
|
|
services.caddy.virtualHosts = lib.mkIf (config.services.caddy.enable) {
|
|
"map.${service_configs.https.domain}".extraConfig = ''
|
|
root * ${service_configs.minecraft.parent_dir}/${service_configs.minecraft.server_name}/squaremap/web
|
|
file_server browse
|
|
'';
|
|
};
|
|
|
|
users.users = lib.mkIf (config.services.caddy.enable) {
|
|
${config.services.caddy.user}.extraGroups = [
|
|
# for `map.gardling.com`
|
|
config.services.minecraft-servers.group
|
|
];
|
|
};
|
|
|
|
systemd.tmpfiles.rules = [
|
|
# Allow caddy (in minecraft group) to traverse to squaremap/web for map.gardling.com
|
|
"z ${service_configs.minecraft.parent_dir}/${service_configs.minecraft.server_name} 710 ${config.services.minecraft-servers.user} ${config.services.minecraft-servers.group}"
|
|
"z ${service_configs.minecraft.parent_dir}/${service_configs.minecraft.server_name}/squaremap 710 ${config.services.minecraft-servers.user} ${config.services.minecraft-servers.group}"
|
|
];
|
|
}
|