# valheim.nix
{ config, pkgs, lib, ... }:
let
  join = builtins.concatStringsSep " ";
in
{

  services.cron = {
    enable = true;
    systemCronJobs = [
      "0 6 * * *	root	systemctl restart palworld"
    ];
  };

  networking.firewall.allowedUDPPorts = [ 8211 ]; #5349 ];
  users.users.palworld = {
    isSystemUser = true;
    # Valheim puts save data in the home directory.
    home = "/var/lib/palworld";
    createHome = true;
    homeMode = "750";
    group = "palworld";
  };

  users.groups.palworld = { };

  systemd.services.palworld = {
    wantedBy = [ "multi-user.target" ];

    wants = [ "network-online.target" ];
    after = [ "network-online.target" ];

    serviceConfig = {
      ExecStartPre = join [
        "${pkgs.steamcmd}/bin/steamcmd"
        "+force_install_dir /var/lib/palworld"
        "+login anonymous"
        "+app_update 2394010"
        "+quit"
        "&& mkdir -p /var/lib/palworld/.steam/sdk64"
        "&& cp /var/lib/palworld/linux64/steamclient.so /var/lib/palworld/.steam/sdk64/."
      ];
      ExecStart = join [
        "${pkgs.steam-run}/bin/steam-run /var/lib/palworld/Pal/Binaries/Linux/PalServer-Linux-Test Pal"
        "-useperfthreads"
        "-NoAsyncLoadingThread"
        "-UseMultithreadForDS"
      ];
      Nice = "-5";
      PrivateTmp = true;
      Restart = "on-failure";
      User = "palworld";
      WorkingDirectory = "~";
    };
    environment = {
      # linux64 directory is required by Valheim.
      LD_LIBRARY_PATH = "/var/lib/palworld/linux64:${pkgs.glibc}/lib";
      SteamAppId = "2394010";
    };
  };
}
