nixos-config/profiles/servers/minecraft.nix
2024-01-22 16:50:20 +03:00

96 lines
2.9 KiB
Nix

{ 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 = {
enable = false;
inherit rsyncSSHKeys jvmOpts;
jvmMaxAllocation = "6144m";
jvmInitialAllocation = "6144m";
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
# ${pkgs.mcrcon}/bin/mcrcon "say Restic backup is started!" save-off "save-all"
# 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"
# ];
# };
}