nixos-config/profiles/servers/minecraft.nix

96 lines
2.8 KiB
Nix
Raw Normal View History

2023-07-26 21:19:30 +03:00
{ config, pkgs, lib, inputs, ... }:
let
jre17 = pkgs.temurin-bin-17;
jvmOpts = lib.concatStringsSep " " [
"-XX:+UseG1GC"
"-XX:+ParallelRefProcEnabled"
"-XX:MaxGCPauseMillis=200"
"-XX:+UnlockExperimentalVMOptions"
"-XX:+DisableExplicitGC"
"-XX:+AlwaysPreTouch"
"-XX:G1NewSizePercent=40"
"-XX:G1MaxNewSizePercent=50"
"-XX:G1HeapRegionSize=16M"
"-XX:G1ReservePercent=15"
"-XX:G1HeapWastePercent=5"
"-XX:G1MixedGCCountTarget=4"
"-XX:InitiatingHeapOccupancyPercent=20"
"-XX:G1MixedGCLiveThresholdPercent=90"
"-XX:G1RSetUpdatingPauseTimePercent=5"
"-XX:SurvivorRatio=32"
"-XX:+PerfDisableSharedMem"
"-XX:MaxTenuringThreshold=1"
];
rsyncSSHKeys = config.users.users.${config.mainuser}.openssh.authorizedKeys.keys;
defaults = {
allow-flight = true;
difficulty = 2;
# 5 minutes tick timeout, for heavy packs
max-tick-time = 5 * 60 * 1000;
online-mode = false;
spawn-protection = 0;
};
in {
imports = [ inputs.mms.module ];
services.modded-minecraft-servers = {
eula = true;
instances = {
statech = {
2023-11-11 03:17:51 +03:00
enable = false;
2023-07-26 21:19:30 +03:00
inherit rsyncSSHKeys jvmOpts;
jvmMaxAllocation = "6144m";
2023-09-16 00:54:08 +03:00
jvmInitialAllocation = "6144m";
2023-07-26 21:19:30 +03:00
jvmPackage = jre17;
serverConfig = defaults // {
server-port = 25565;
rcon-port = 25566;
motd = "StaTech";
max-world-size = 50000;
level-seed = "-4411466874705470064";
};
};
};
};
persist.state.directories = [ "/var/lib/mc-statech" ];
secrets.restic-mc-pass.services = [ "restic-backups-mc-servers.service" ];
secrets.restic-mc-repo.services = [ "restic-backups-mc-servers.service" ];
services.restic.backups.mc-servers = {
initialize = true;
passwordFile = config.secrets.restic-mc-pass.decrypted;
repositoryFile = config.secrets.restic-mc-repo.decrypted;
paths = [ "/var/lib/mc-statech" ];
exclude = [ "/var/lib/mc-statech/backups" ];
environmentFile = "${pkgs.writeText "restic.env" ''
GOMAXPROCS=1
MCRCON_PORT=25566
MCRCON_PASS=whatisloveohbabydonthurtmedonthurtmenomore
''}";
extraBackupArgs = [ "--no-scan" ];
backupPrepareCommand = ''
if ! systemctl is-active --quiet mc-statech.service; then
echo "Minecraft server is not active. Skipping restic backup."
exit 1
fi
2023-07-30 03:31:12 +03:00
${pkgs.mcrcon}/bin/mcrcon "say Restic backup is started!" save-off "save-all"
2023-07-26 21:19:30 +03:00
sleep 3
'';
backupCleanupCommand = ''
systemctl is-active --quiet mc-statech.service && ${pkgs.mcrcon}/bin/mcrcon "say Restic backup is done!" save-on
'';
timerConfig = {
OnCalendar = "*:0/15";
};
pruneOpts = [
"--keep-last 12"
"--keep-hourly 12"
"--keep-daily 5"
"--keep-weekly 2"
"--keep-monthly 0"
"--keep-yearly 0"
];
};
}