{ 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"; User = "palworld"; }; }; # NOTE: Config is stashed at the following directory. # /home/palworld/.steam/steam/Steamapps/common/PalServer/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini 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"; }; }