{ config, pkgs, lib, ... }: let palworldSettings = builtins.readFile ./PalWorldSettings.ini; in { # NOTE: Partly inspired by: https://github.com/pocketpairjp/palworld-dedicated-server-docker networking.firewall.allowedUDPPorts = [ 8211 ]; users.users.palworld = { isSystemUser = true; createHome = true; home = "/home/palworld"; homeMode = "750"; group = "palworld"; extraGroups = [ "steamcmd" ]; }; users.groups.palworld = {}; systemd.services.palworld = { enable = true; description = "PalWorld Dedicated Server"; #after = [ "network.target" ]; wantedBy = [ "multi-user.target" ]; serviceConfig = { ExecStartPre = '' ${pkgs.steamcmd}/bin/steamcmd +login anonymous \ +app_update 2394010 validate +quit ''; ExecStart = '' ${pkgs.steam-run}/bin/steam-run \ .steam/steam/Steamapps/common/PalServer/PalServer.sh -publiclobby \ -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS ''; WorkingDirectory = "/home/palworld"; Restart = "always"; RuntimeMaxSec = "1d"; # NOTE: This thing has memory leaks, restart to save our selves. User = "palworld"; }; }; # NOTE: Config is stashed at the following directory. # /home/palworld/.steam/steam/Steamapps/common/PalServer/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini # TODO: There are benefits to including the meat of the configuration inside the 'nix' file. # Namely that it will result in actually updating the config when I rebuild. environment.etc."palworld/PalWorldSettings.ini" = { target = "/home/palworld/.steam/steam/Steamapps/common/PalServer/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini"; text = palworldSettings; mode = "0644"; user = "palworld"; group = "palworld"; }; }