{ config, lib, pkgs, pkgsUnstable, inputs, ... }: let jvmOpts = lib.strings.concatStringsSep " " [ "-Xms6144M" "-Xmx6144M" "-XX:+UseG1GC" "-XX:+ParallelRefProcEnabled" "-XX:MaxGCPauseMillis=200" "-XX:+UnlockExperimentalVMOptions" "-XX:+DisableExplicitGC" "-XX:+AlwaysPreTouch" "-XX:G1NewSizePercent=30" "-XX:G1MaxNewSizePercent=40" "-XX:G1HeapRegionSize=8M" "-XX:G1ReservePercent=20" "-XX:G1HeapWastePercent=5" "-XX:G1MixedGCCountTarget=4" "-XX:InitiatingHeapOccupancyPercent=15" "-XX:G1MixedGCLiveThresholdPercent=90" "-XX:G1RSetUpdatingPauseTimePercent=5" "-XX:SurvivorRatio=32" "-XX:+PerfDisableSharedMem" "-XX:MaxTenuringThreshold=1" ]; serverPort = 25565; rconPort = 25575; in { boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; network-dhcp = { enable = true; hardwareAddress = "BC:24:11:FD:EB:ED"; }; qemu.enable = true; spice.enable = true; dockerserver = { enable = true; }; minecraftserver = { enable = true; }; imports = [ inputs.nix-minecraft.nixosModules.minecraft-servers ]; nixpkgs.overlays = [ inputs.nix-minecraft.overlay ]; sops.secrets = { "borgmatic_pass/local" = { }; "borgmatic_pass/remote" = { }; "crowdsec/fwBouncerLapiKey" = { }; "RCON_PASS" = { sopsFile = ../../secrets/gms-01_rcon.env; format = "binary"; owner = "minecraft"; mode = "0400"; }; }; crowdsec-firewall-bouncer = { enable = true; apiKeyFile = config.sops.secrets."crowdsec/fwBouncerLapiKey".path; }; services.minecraft-servers = { enable = true; eula = true; dataDir = "/opt/minecraft"; environmentFile = config.sops.secrets."RCON_PASS".path; servers = { gms-01-mc_its-et_me = { enable = true; package = pkgs.fabricServers.fabric-1_21_8; openFirewall = true; inherit jvmOpts; files = { "server.properties" = { value = { accepts-transfers = false; allow-cheats = false; broadcast-console-to-ops = true; broadcast-rcon-to-ops = true; difficulty = "normal"; enable-command-block = false; enable-jmx-monitoring = false; enable-query = false; enable-rcon = true; enable-status = true; enforce-secure-profile = true; force-gamemode = true; gamemode = "survival"; hardcore = false; hide-online-players = false; level-name = "ur mom"; max-players = 10; motd = "Womp womp"; online-mode = true; pause-when-empty-seconds = 300; player-idle-timeout = 0; "rcon.password" = "@RCON_PASS@"; "rcon.port" = rconPort; server-port = serverPort; spawn-monsters = 2; view-distance = 32; white-list = true; }; }; }; symlinks = { mods = pkgs.linkFarmFromDrvs "mods" ( builtins.attrValues { # C2ME (Fabric) # https://modrinth.com/mod/c2me-fabric C2ME = pkgs.fetchurl { url = "https://cdn.modrinth.com/data/VSNURh3q/versions/tlZRTK1v/c2me-fabric-mc1.21.8-0.3.4.0.0.jar"; sha512 = "30cbc520cb8349036d55a1cb1f26964cf02410cf6d6a561d9cc07164d7566a3a7564367de62510f2bab50723c2c7c401718001153fa833560634ce4b2e212767"; }; # Fabric-API # https://modrinth.com/mod/fabric-api Fabric-API = pkgs.fetchurl { url = "https://cdn.modrinth.com/data/P7dR8mSH/versions/jjBL6OsN/fabric-api-0.132.0%2B1.21.8.jar"; sha512 = "af781f8e06b1fff86c0b7055c9e696552555d5fbc71298447f816689756fe598b2ced182fbf6687c9457472352118e5052fa66de116e7a818584fd8f6e523a7d"; }; # FabricExporter # https://modrinth.com/mod/fabricexporter FabricExporter = pkgs.fetchurl { url = "https://cdn.modrinth.com/data/dbVXHSlv/versions/VaRUspV6/fabricexporter-1.0.17.jar"; sha512 = "8229ce7d5569a1967b1612c00d08fa0447224f323f4a4d37d05b73ad83b6c0c77d3bb3adf979790bf196f09328b7865fafdd6b89e4245a30735197564266b4c5"; }; # FerriteCore # https://modrinth.com/mod/ferrite-core FerriteCore = pkgs.fetchurl { url = "https://cdn.modrinth.com/data/uXXizFIs/versions/CtMpt7Jr/ferritecore-8.0.0-fabric.jar"; sha512 = "131b82d1d366f0966435bfcb38c362d604d68ecf30c106d31a6261bfc868ca3a82425bb3faebaa2e5ea17d8eed5c92843810eb2df4790f2f8b1e6c1bdc9b7745"; }; # Lithium # https://modrinth.com/mod/lithium Lithium = pkgs.fetchurl { url = "https://cdn.modrinth.com/data/gvQqBUqZ/versions/pDfTqezk/lithium-fabric-0.18.0%2Bmc1.21.8.jar"; sha512 = "6c69950760f48ef88f0c5871e61029b59af03ab5ed9b002b6a470d7adfdf26f0b875dcd360b664e897291002530981c20e0b2890fb889f29ecdaa007f885100f"; }; # ModernFix # https://modrinth.com/mod/modernfix #ModernFix = pkgs.fetchurl { # url = ""; # sha512 = ""; #}; # No Chat Reports # https://modrinth.com/mod/no-chat-reports NoChatReports = pkgs.fetchurl { url = "https://cdn.modrinth.com/data/qQyHxfxd/versions/LhwpK0O6/NoChatReports-FABRIC-1.21.7-v2.14.0.jar"; sha512 = "6e93c822e606ad12cb650801be1b3f39fcd2fef64a9bb905f357eb01a28451afddb3a6cadb39c112463519df0a07b9ff374d39223e9bf189aee7e7182077a7ae"; }; # Noisium # https://modrinth.com/mod/noisium #Noisium = pkgs.fetchurl { # url = "https://cdn.modrinth.com/data/KuNKN7d2/versions/sUh67T4Y/noisium-fabric-2.6.0%2Bmc1.21.5.jar"; # sha512 = "4471b6137de7e2109987df8fe62ac836741e68ba3c57303a0f2dc362c0ab8e7aca656d28046e250362316c1144396132a5531dfb12b5a664c68eb294991af938"; #}; # No Telemetry # https://modrinth.com/mod/no-telemetry NoTelemetry = pkgs.fetchurl { url = "https://cdn.modrinth.com/data/hg77g4Pw/versions/OwTaGd6A/no-telemetry-1.9.0.jar"; sha512 = "4527236781611cc40a77e222e4dd2a1d6a5c0c9a9394eed4063c20c91ba62568c2d4323bc84a9372d69d10703e26b7569ef75ea55c52ad36ec55107f19bcaae8"; }; # ScalableLux # https://modrinth.com/mod/scalablelux ScalableLux = pkgs.fetchurl { url = "https://cdn.modrinth.com/data/Ps1zyz6x/versions/PQLHDg2Q/ScalableLux-0.1.5%2Bfabric.e4acdcb-all.jar"; sha512 = "ec8fabc3bf991fbcbe064c1e97ded3e70f145a87e436056241cbb1e14c57ea9f59ef312f24c205160ccbda43f693e05d652b7f19aa71f730caec3bb5f7f7820a"; }; # Sodium # https://modrinth.com/mod/sodium Sodium = pkgs.fetchurl { url = "https://cdn.modrinth.com/data/AANobbMI/versions/ND4ROcMQ/sodium-fabric-0.6.13%2Bmc1.21.6.jar"; sha512 = "ee97e3df07a6f734bc8a0f77c1f1de7f47bed09cf682f048ceb12675c51b70ba727b11fcacbb7b10cc9f79b283dd71a39751312b5c70568aa3ac9471407174db"; }; # Spark # https://modrinth.com/mod/spark Spark = pkgs.fetchurl { url = "https://cdn.modrinth.com/data/l6YH9Als/versions/3KCl7Vx0/spark-1.10.142-fabric.jar"; sha512 = "95b7e4f2416e20abf9d9df41fcbce04f28ebf0aa086374742652789a88642dd6820c8884ab240334555345b49c39f7d0caf23d521cec9516991ef43ba24758af"; }; # Very Many Players (fabric) # https://modrinth.com/mod/vmp-fabric VMP = pkgs.fetchurl { url = "https://cdn.modrinth.com/data/wnEe9KBa/versions/KvcCuByh/vmp-fabric-mc1.21.8-0.2.0%2Bbeta.7.207-all.jar"; sha512 = "1ae5f0ddf1f037c1cd7cc580168f57394c86f197203ef19ee1232cf327ab82c66d10d5baf431bf2d880fb2127c264e0749dc7c7b79eb1ede8cd1cbd9cc6b5221"; }; } ); "ops.json" = { value = [ { name = "its-et__"; uuid = "16cfb352-a5dc-41e8-8bd5-7f6cd6de755c"; level = 4; bypassesPlayerLimit = true; } ]; }; }; # To get a player UUID, use this command # curl --silent https://api.mojang.com/users/profiles/minecraft/ whitelist = { player1 = "16cfb352-a5dc-41e8-8bd5-7f6cd6de755c"; player2 = "4bd02562-a302-450f-b7cd-7dc7947947e5"; player3 = "07e6fc30-6c01-4354-8ecf-443165e2b88f"; player4 = "8d5c8794-46e9-4ccf-91ac-8f0110953422"; player5 = "9de673c6-4880-4ee0-859d-f2c6ea14ecdd"; }; }; }; }; borg-config = { enable = true; backupLabel = "minecraft"; localRepoPath = "ssh://borg@borg-01.tail755c5.ts.net/./"; remoteRepoPath = "ssh://fm1833@fm1833.rsync.net/./minecraft"; sourceDirectories = [ "/opt/minecraft" ]; hcPingUrlLocal = "https://hc.its-et.me/ping/PlGPBqq-0rLI4N4ya3jYmg/backup-minecraft-server"; hcPingUrlRemote = "https://hc.its-et.me/ping/PlGPBqq-0rLI4N4ya3jYmg/backup-minecraft-server-remote"; commands = [ { before = "everything"; run = [ ''mcrcon -H localhost -P ${toString rconPort} -p "$RCON_PASS" save-off save-all'' ]; } { after = "everything"; run = [ ''mcrcon -H localhost -P ${toString rconPort} -p "$RCON_PASS" save-on'' ]; } ]; }; # We want to set the environmentFile to the decrypted SOPS file to # be able to use the same RCON_PASS env as the server systemd.services.borgmatic = { serviceConfig = { EnvironmentFile = config.sops.secrets."RCON_PASS".path; }; }; base.userSSHKeys = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICrUTAPCggSFmGKc2Yo9nXCwbHsQNkulWbicN5q1vldv etorres@xenon" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMpLYmsIyCd0EThQ8twuVjiE48SuSzVKxPFOlNMJCEE3 etorres@radon" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJzCOwNjrRdz8pbHp+MsdiTxpc+hTk3za78z90L4DK0U etorres@erics-mac" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPAa2xFrLXUmnNB0TpQUH94A77a6fa5w60PKMmg9IfrY etorres@iphone" ]; }