186 lines
8.3 KiB
Nix
186 lines
8.3 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}"
|
|
# 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}"
|
|
])
|
|
];
|
|
|
|
boot.kernel.sysctl = {
|
|
# Disable autogroup for better scheduling of game server threads
|
|
"kernel.sched_autogroup_enabled" = 0;
|
|
};
|
|
|
|
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-26_1_2.override { jre_headless = pkgs.openjdk25_headless; };
|
|
|
|
jvmOpts = lib.concatStringsSep " " [
|
|
# Memory
|
|
"-Xmx${builtins.toString service_configs.minecraft.memory.heap_size_m}M"
|
|
"-Xms${builtins.toString service_configs.minecraft.memory.heap_size_m}M"
|
|
# 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=${builtins.toString service_configs.minecraft.memory.large_page_size_m}M"
|
|
];
|
|
|
|
serverProperties = {
|
|
server-port = service_configs.ports.public.minecraft.port;
|
|
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/fm7UYECV/fabric-api-0.145.4%2B26.1.2.jar";
|
|
sha512 = "ffd5ef62a745f76cd2e5481252cb7bc67006c809b4f436827d05ea22c01d19279e94a3b24df3d57e127af1cd08440b5de6a92a4ea8f39b2dcbbe1681275564c3";
|
|
};
|
|
|
|
# No 26.1.2 version available
|
|
# FerriteCore = fetchurl {
|
|
# url = "https://cdn.modrinth.com/data/uXXizFIs/versions/d5ddUdiB/ferritecore-9.0.0-fabric.jar";
|
|
# sha512 = "d81fa97e11784c19d42f89c2f433831d007603dd7193cee45fa177e4a6a9c52b384b198586e04a0f7f63cd996fed713322578bde9a8db57e1188854ae5cbe584";
|
|
# };
|
|
|
|
Lithium = fetchurl {
|
|
url = "https://cdn.modrinth.com/data/gvQqBUqZ/versions/v2xoRvRP/lithium-fabric-0.24.1%2Bmc26.1.2.jar";
|
|
sha512 = "8711bc8c6f39be4c8511becb7a68e573ced56777bd691639f2fc62299b35bb4ccd2efe4a39bd9c308084b523be86a5f5c4bf921ab85f7a22bf075d8ea2359621";
|
|
};
|
|
|
|
NoChatReports = fetchurl {
|
|
url = "https://cdn.modrinth.com/data/qQyHxfxd/versions/2yrLNE3S/NoChatReports-FABRIC-26.1-v2.19.0.jar";
|
|
sha512 = "94d58a1a4cde4e3b1750bdf724e65c5f4ff3436c2532f36a465d497d26bf59f5ac996cddbff8ecdfed770c319aa2f2dcc9c7b2d19a35651c2a7735c5b2124dad";
|
|
};
|
|
|
|
squaremap = fetchurl {
|
|
url = "https://cdn.modrinth.com/data/PFb7ZqK6/versions/UBN6MFvH/squaremap-fabric-mc26.1.2-1.3.13.jar";
|
|
sha512 = "97bc130184b5d0ddc4ff98a15acef6203459d982e0e2afbd49a2976d546c55a86ef22b841378b51dd782be9b2cfbe4cfa197717f2b7f6800fd8b4ff4df6e564f";
|
|
};
|
|
|
|
scalablelux = fetchurl {
|
|
url = "https://cdn.modrinth.com/data/Ps1zyz6x/versions/gYbHVCz8/ScalableLux-0.2.0%2Bfabric.2b63825-all.jar";
|
|
sha512 = "48565a4d8a1cbd623f0044086d971f2c0cf1c40e1d0b6636a61d41512f4c1c1ddff35879d9dba24b088a670ee254e2d5842d13a30b6d76df23706fa94ea4a58b";
|
|
};
|
|
|
|
c2me = fetchurl {
|
|
url = "https://cdn.modrinth.com/data/VSNURh3q/versions/yrNQQ1AQ/c2me-fabric-mc26.1.2-0.3.7%2Balpha.0.65.jar";
|
|
sha512 = "6666ebaa3bfa403e386776590fc845b7c306107d37ebc7b1be3b057893fbf9f933abb2314c171d7fe19c177cf8823cb47fdc32040d34a9704f5ab656dd5d93f8";
|
|
};
|
|
|
|
# No 26.1 version available
|
|
# krypton = fetchurl {
|
|
# url = "https://cdn.modrinth.com/data/fQEb0iXm/versions/O9LmWYR7/krypton-0.2.10.jar";
|
|
# sha512 = "4dcd7228d1890ddfc78c99ff284b45f9cf40aae77ef6359308e26d06fa0d938365255696af4cc12d524c46c4886cdcd19268c165a2bf0a2835202fe857da5cab";
|
|
# };
|
|
|
|
# No 26.1.2 version available
|
|
# disconnect-packet-fix = fetchurl {
|
|
# url = "https://cdn.modrinth.com/data/rd9rKuJT/versions/x9gVeaTU/disconnect-packet-fix-fabric-2.1.0.jar";
|
|
# sha512 = "bf84d02bdcd737706df123e452dd31ef535580fa4ced6af1e4ceea022fef94e4764775253e970b8caa1292e2fa00eb470557f70b290fafdb444479fa801b07a1";
|
|
# };
|
|
|
|
packet-fixer = fetchurl {
|
|
url = "https://cdn.modrinth.com/data/c7m1mi73/versions/M8PqPQr4/packetfixer-fabric-3.3.4-26.1.2.jar";
|
|
sha512 = "698020edba2a1fd80bb282bfd4832a00d6447b08eaafbc2e16a8f3bf89e187fc9a622c92dfe94ae140dd485fc0220a86890f12158ec08054e473fef8337829bc";
|
|
};
|
|
|
|
# mVUS fork: upstream ModernFix no longer ships Fabric builds
|
|
modernfix = fetchurl {
|
|
url = "https://cdn.modrinth.com/data/TjSm1wrD/versions/dqQ7mabN/modernfix-5.26.2-build.1.jar";
|
|
sha512 = "fbef93c2dabf7bcd0ccd670226dfc4958f7ebe5d8c2b1158e88a65e6954a40f595efd58401d2a3dbb224660dca5952199cf64df29100e7bd39b1b1941290b57b";
|
|
};
|
|
|
|
debugify = fetchurl {
|
|
url = "https://cdn.modrinth.com/data/QwxR6Gcd/versions/mfTTfiKn/debugify-26.1.2%2B1.0.jar";
|
|
sha512 = "63db82f2163b9f7fc27ebea999ffcd7a961054435b3ed7d8bf32d905b5f60ce81715916b7fd4e9509dd23703d5492059f3ce7e5f176402f8ed4f985a415553f4";
|
|
};
|
|
}
|
|
);
|
|
};
|
|
};
|
|
};
|
|
|
|
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
|
|
];
|
|
};
|
|
|
|
}
|