119 lines
3.4 KiB
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"; };
|
|
};
|
|
}
|