268 lines
10 KiB
Nix
268 lines
10 KiB
Nix
{
|
|
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/<mojang username>
|
|
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"
|
|
];
|
|
}
|