add minecraft server

This commit is contained in:
Dmitriy Kholkin 2023-07-26 21:19:30 +03:00
parent 750a106e0b
commit 41da95615d
4 changed files with 281 additions and 46 deletions

225
flake.lock generated
View File

@ -251,11 +251,11 @@
"flake-compat_4": {
"flake": false,
"locked": {
"lastModified": 1673956053,
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
"lastModified": 1668681692,
"narHash": "sha256-Ht91NGdewz8IQLtWZ9LCeNXMSXHUss+9COoqu6JLmXU=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
"rev": "009399224d5e398d03b22badca40a37ac85412a1",
"type": "github"
},
"original": {
@ -313,6 +313,22 @@
}
},
"flake-compat_8": {
"flake": false,
"locked": {
"lastModified": 1673956053,
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_9": {
"flake": false,
"locked": {
"lastModified": 1668681692,
@ -444,6 +460,21 @@
}
},
"flake-utils_4": {
"locked": {
"lastModified": 1667395993,
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_5": {
"inputs": {
"systems": "systems"
},
@ -461,7 +492,7 @@
"type": "github"
}
},
"flake-utils_5": {
"flake-utils_6": {
"inputs": {
"systems": "systems_2"
},
@ -479,7 +510,7 @@
"type": "github"
}
},
"flake-utils_6": {
"flake-utils_7": {
"inputs": {
"systems": "systems_3"
},
@ -497,7 +528,7 @@
"type": "github"
}
},
"flake-utils_7": {
"flake-utils_8": {
"locked": {
"lastModified": 1667395993,
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
@ -512,7 +543,7 @@
"type": "github"
}
},
"flake-utils_8": {
"flake-utils_9": {
"inputs": {
"systems": "systems_4"
},
@ -701,6 +732,43 @@
"type": "github"
}
},
"lowdown-src_2": {
"flake": false,
"locked": {
"lastModified": 1633514407,
"narHash": "sha256-Dw32tiMjdK9t3ETl5fzGrutQTzh2rufgZV4A/BbxuD4=",
"owner": "kristapsdz",
"repo": "lowdown",
"rev": "d2c2b44ff6c27b936ec27358a2653caaef8f73b8",
"type": "github"
},
"original": {
"owner": "kristapsdz",
"repo": "lowdown",
"type": "github"
}
},
"mms": {
"inputs": {
"flake-compat": "flake-compat_4",
"flake-utils": "flake-utils_4",
"nix": "nix",
"nixpkgs": "nixpkgs_6"
},
"locked": {
"lastModified": 1669478601,
"narHash": "sha256-IQcS8IPeXvSoIrQRPgtnLxAs0Pkh8wmglDAtqE4ivNo=",
"owner": "mkaito",
"repo": "nixos-modded-minecraft-servers",
"rev": "68f2066499c035fd81c9dacfea2f512d6b0b62e5",
"type": "github"
},
"original": {
"owner": "mkaito",
"repo": "nixos-modded-minecraft-servers",
"type": "github"
}
},
"naersk": {
"inputs": {
"nixpkgs": [
@ -724,29 +792,28 @@
},
"nix": {
"inputs": {
"flake-compat": "flake-compat_4",
"lowdown-src": "lowdown-src",
"nixpkgs": "nixpkgs_5",
"nixpkgs-regression": "nixpkgs-regression"
},
"locked": {
"lastModified": 1686829784,
"narHash": "sha256-szRWXTvKIeWquR4MM35MMGLbn17/csXrKdVY5YQWZfo=",
"owner": "nixos",
"lastModified": 1669449054,
"narHash": "sha256-aCpXrNpyFH6b1NFYGj2i/HecUvz2vZ88aEyDs1Xj8yM=",
"owner": "NixOS",
"repo": "nix",
"rev": "e672d52f7caae591e4d07747a312f2bef538bbea",
"rev": "534332c8a03b64161ec795d1deb2ba3d48f27be1",
"type": "github"
},
"original": {
"owner": "nixos",
"owner": "NixOS",
"repo": "nix",
"type": "github"
}
},
"nix-alien": {
"inputs": {
"flake-compat": "flake-compat_5",
"flake-utils": "flake-utils_4",
"flake-compat": "flake-compat_6",
"flake-utils": "flake-utils_5",
"nix-index-database": "nix-index-database",
"nixpkgs": [
"nixpkgs"
@ -768,8 +835,8 @@
},
"nix-direnv": {
"inputs": {
"flake-utils": "flake-utils_5",
"nixpkgs": "nixpkgs_6"
"flake-utils": "flake-utils_6",
"nixpkgs": "nixpkgs_8"
},
"locked": {
"lastModified": 1686544557,
@ -808,8 +875,8 @@
},
"nix-vscode-marketplace": {
"inputs": {
"flake-compat": "flake-compat_6",
"flake-utils": "flake-utils_6",
"flake-compat": "flake-compat_7",
"flake-utils": "flake-utils_7",
"nixpkgs": [
"nixpkgs"
]
@ -828,6 +895,27 @@
"type": "github"
}
},
"nix_2": {
"inputs": {
"flake-compat": "flake-compat_5",
"lowdown-src": "lowdown-src_2",
"nixpkgs": "nixpkgs_7",
"nixpkgs-regression": "nixpkgs-regression_2"
},
"locked": {
"lastModified": 1686829784,
"narHash": "sha256-szRWXTvKIeWquR4MM35MMGLbn17/csXrKdVY5YQWZfo=",
"owner": "nixos",
"repo": "nix",
"rev": "e672d52f7caae591e4d07747a312f2bef538bbea",
"type": "github"
},
"original": {
"owner": "nixos",
"repo": "nix",
"type": "github"
}
},
"nixlib": {
"locked": {
"lastModified": 1685840432,
@ -945,6 +1033,22 @@
"type": "github"
}
},
"nixpkgs-regression_2": {
"locked": {
"lastModified": 1643052045,
"narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2",
"type": "github"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1685004253,
@ -977,6 +1081,22 @@
"type": "github"
}
},
"nixpkgs_10": {
"locked": {
"lastModified": 1685012353,
"narHash": "sha256-U3oOge4cHnav8OLGdRVhL45xoRj4Ppd+It6nPC9nNIU=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "aeb75dba965e790de427b73315d5addf91a54955",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1665466769,
@ -1026,6 +1146,38 @@
}
},
"nixpkgs_5": {
"locked": {
"lastModified": 1657693803,
"narHash": "sha256-G++2CJ9u0E7NNTAi9n5G8TdDmGJXcIjkJ3NF8cetQB8=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "365e1b3a859281cf11b94f87231adeabbdd878a2",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-22.05-small",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_6": {
"locked": {
"lastModified": 1669378442,
"narHash": "sha256-nm+4PN0A4SnV0SzEchxrMyKPvI3Ld/aoom4PnHeHucs=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "0faaf0a9bb6dedb69bfd43ac06fb27fadc476c51",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-22.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_7": {
"locked": {
"lastModified": 1670461440,
"narHash": "sha256-jy1LB8HOMKGJEGXgzFRLDU1CBGL0/LlkolgnqIsF0D8=",
@ -1041,7 +1193,7 @@
"type": "github"
}
},
"nixpkgs_6": {
"nixpkgs_8": {
"locked": {
"lastModified": 1686488075,
"narHash": "sha256-2otSBt2hbeD+5yY25NF3RhWx7l5SDt1aeU3cJ/9My4M=",
@ -1057,7 +1209,7 @@
"type": "github"
}
},
"nixpkgs_7": {
"nixpkgs_9": {
"locked": {
"lastModified": 1686592866,
"narHash": "sha256-riGg89eWhXJcPNrQGcSwTEEm7CGxWC06oSX44hajeMw=",
@ -1073,22 +1225,6 @@
"type": "github"
}
},
"nixpkgs_8": {
"locked": {
"lastModified": 1685012353,
"narHash": "sha256-U3oOge4cHnav8OLGdRVhL45xoRj4Ppd+It6nPC9nNIU=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "aeb75dba965e790de427b73315d5addf91a54955",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nur": {
"locked": {
"lastModified": 1688546999,
@ -1110,7 +1246,7 @@
"prismlauncher",
"flake-compat"
],
"flake-utils": "flake-utils_7",
"flake-utils": "flake-utils_8",
"gitignore": "gitignore",
"nixpkgs": [
"prismlauncher",
@ -1137,10 +1273,10 @@
},
"prismlauncher": {
"inputs": {
"flake-compat": "flake-compat_7",
"flake-compat": "flake-compat_8",
"flake-parts": "flake-parts",
"libnbtplusplus": "libnbtplusplus",
"nixpkgs": "nixpkgs_8",
"nixpkgs": "nixpkgs_10",
"pre-commit-hooks": "pre-commit-hooks"
},
"locked": {
@ -1197,12 +1333,13 @@
"hyprland": "hyprland",
"hyprpaper": "hyprpaper",
"impermanence": "impermanence",
"nix": "nix",
"mms": "mms",
"nix": "nix_2",
"nix-alien": "nix-alien",
"nix-direnv": "nix-direnv",
"nix-vscode-marketplace": "nix-vscode-marketplace",
"nixos-generators": "nixos-generators",
"nixpkgs": "nixpkgs_7",
"nixpkgs": "nixpkgs_9",
"nixpkgs-master": "nixpkgs-master",
"nixpkgs-stable": "nixpkgs-stable_2",
"nur": "nur",
@ -1259,7 +1396,7 @@
"simple-nixos-mailserver": {
"inputs": {
"blobs": "blobs",
"flake-compat": "flake-compat_8",
"flake-compat": "flake-compat_9",
"nixpkgs": [
"nixpkgs"
],
@ -1387,7 +1524,7 @@
},
"vscode-server": {
"inputs": {
"flake-utils": "flake-utils_8",
"flake-utils": "flake-utils_9",
"nixpkgs": [
"nixpkgs"
]

View File

@ -48,6 +48,7 @@
url = "github:hyprwm/hyprpaper";
inputs.nixpkgs.follows = "nixpkgs";
};
mms.url = "github:mkaito/nixos-modded-minecraft-servers";
nix-alien = {
url = "github:thiagokokada/nix-alien";
inputs.nixpkgs.follows = "nixpkgs";

View File

@ -12,6 +12,7 @@
nixosProfiles.sunshine
nixosProfiles.attic
nixosProfiles.emulators
nixosProfiles.minecraft
];
virtualisation.libvirt.guests = {
@ -106,10 +107,11 @@
home-manager.users.${config.mainuser} = {
home.packages = lib.mkIf config.deviceSpecific.enableVirtualisation [
inputs.nixos-generators.packages.${pkgs.hostPlatform.system}.nixos-generate
# pkgs.prismlauncher
pkgs.prismlauncher
pkgs.piper
pkgs.osu-lazer-bin
pkgs.nix-alien
# pkgs.nix-init
pkgs.nixpkgs-review
pkgs.anydesk
pkgs.winbox
@ -117,7 +119,7 @@
home.stateVersion = "23.05";
};
persist.state.homeDirectories = [ ".local/share/winbox" ];
persist.state.homeDirectories = [ ".local/share/winbox" ".local/share/PrismLauncher" ];
system.stateVersion = "23.05";
}

View File

@ -0,0 +1,95 @@
{ 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 = true;
inherit rsyncSSHKeys jvmOpts;
jvmMaxAllocation = "6144m";
jvmInitialAllocation = "2048m";
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 flush"
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"
];
};
}