Files
nixos/hosts/gms-01/default.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"
];
}