139 lines
4.1 KiB
Nix
139 lines
4.1 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 {
|
|
users = {
|
|
extraUsers.minecraft = {
|
|
uid = config.ids.uids.minecraft;
|
|
group = config.users.extraGroups.minecraft.name;
|
|
isSystemUser = true;
|
|
description = "Minecraft server user";
|
|
};
|
|
extraGroups.minecraft = { gid = config.ids.gids.minecraft; };
|
|
};
|
|
|
|
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
|
|
uid = toString config.users.extraUsers.minecraft.uid;
|
|
gid = toString config.users.extraGroups.minecraft.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}";
|
|
};
|
|
};
|
|
|
|
extraOptions = [ "--cpus=1.0" ];
|
|
autoStart = false;
|
|
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.timers.podman-minecraft-voor-kia-off = {
|
|
description = "Turns off the minecraft server every day at 4 am";
|
|
wantedBy = [ "podman-minecraft-voor-kia.service" ];
|
|
timerConfig = {
|
|
Unit = "podman-minecraft-voor-kia-starter@stop.service";
|
|
OnCalendar = "04:00:00";
|
|
};
|
|
};
|
|
|
|
systemd.timers.podman-minecraft-voor-kia-on = {
|
|
description = "Turns on the minecraft server every day at 2 pm";
|
|
wantedBy = [ "podman-minecraft-voor-kia.service" ];
|
|
timerConfig = {
|
|
Unit = "podman-minecraft-voor-kia-starter@start.service";
|
|
OnCalendar = "14:00:00";
|
|
};
|
|
};
|
|
|
|
systemd.services."podman-minecraft-voor-kia-starter@" = {
|
|
description = "Unit to stop/start the minecraft server";
|
|
serviceConfig = {
|
|
ExecStart =
|
|
"${pkgs.systemd}/bin/systemctl %i podman-minecraft-voor-kia.service";
|
|
Type = "oneshot";
|
|
};
|
|
};
|
|
}
|