tlaternet-server/configuration/services/minecraft.nix

119 lines
3.4 KiB
Nix

{ config, pkgs, lib, ... }:
let
minecraft-server-args = [
"-Xms2G"
"-Xmx2G"
"-Dsun.rmi.dgc.server.gcInterval=2157583646"
"-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"
];
ops = pkgs.writeText "ops.json" (builtins.toJSON [{
uuid = "140d177a-966f-41b8-a4c0-e305babd291b";
name = "TLATER";
level = 4;
bypassesPlayerLimit = true;
}]);
whitelist = pkgs.writeText "whitelist.json" (builtins.toJSON [
{
uuid = "59cd1648-14a4-4bcf-8f5a-2e1bde678f2c";
name = "romino25";
}
{
uuid = "0ab6e3d1-544a-47e7-8538-2e6c248e49a4";
name = "lasi25";
}
{
uuid = "01c9e737-fc9d-4d55-b8c2-610ca80eb4be";
name = "Nampeyo25";
}
{
uuid = "140d177a-966f-41b8-a4c0-e305babd291b";
name = "tlater";
}
]);
eula = pkgs.writeText "eula.txt" "eula=true";
in {
nixpkgs.config.allowUnfreePredicate = pkg:
builtins.elem (lib.getName pkg) [ "forge-server" ];
virtualisation.oci-containers.containers.minecraft-voor-kia = let
properties = ./configs/minecraft/voor-kia/server.properties;
icon = ./configs/minecraft/voor-kia/server-icon.png;
in {
image = "tlaternet/minecraft-voor-kia";
imageFile = pkgs.dockerTools.buildImage {
name = "tlaternet/minecraft-voor-kia";
tag = "latest";
contents = [
(pkgs.local.forge-server.override {
jre_headless = pkgs.jdk11_headless;
mods = pkgs.local.voor-kia;
modConfig = ./configs/minecraft/voor-kia/config;
defaultconfigs = ./configs/minecraft/voor-kia/defaultconfigs;
})
];
config = let
# Use the upstream minecraft uid
uid = toString config.ids.uids.minecraft;
gid = toString config.users.groups.nogroup.gid;
in {
Cmd = [ "forge-server" ] ++ minecraft-server-args;
WorkingDir = "/var/lib/minecraft";
Volumes = {
"/var/lib/minecraft" = { };
# Required because some things will try to write to /tmp,
# which doesn't exist if it's not defined as a volume.
"/tmp" = { };
};
ExposedPorts = { "25565" = { }; };
User = "${uid}:${gid}";
};
};
autoStart = false;
extraOptions = [ "-i" ];
ports = [ "25565:25565" ];
volumes = [
"minecraft:/var/lib/minecraft"
"${eula}:/var/lib/minecraft/eula.txt:ro"
"${icon}:/var/lib/minecraft/server-icon.png:ro"
"${ops}:/var/lib/minecraft/ops.json:ro"
"${properties}:/var/lib/minecraft/server.properties:ro"
"${whitelist}:/var/lib/minecraft/whitelist.json:ro"
];
};
systemd.services.restart-minecraft-voor-kia = {
script = ''
#!${pkgs.runtimeShell}
set -eu
${pkgs.systemd}/bin/systemctl try-restart podman-minecraft-voor-kia.service
'';
};
systemd.timers.restart-minecraft-voor-kia = {
requiredBy = [ "podman-minecraft-voor-kia.service" ];
timerConfig = { OnCalendar = "daily"; };
};
}