{ lib, config, pkgs, ... }: let cfg = config.services.arma; in { options.services.arma = { enable = lib.mkEnableOption "enable arma"; dataDir = lib.mkOption { type = lib.types.str; default = "/var/lib/steam"; }; }; config = lib.mkIf cfg.enable { environment.systemPackages = with pkgs; [ steamcmd curl steam-run ]; nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "steamcmd" "steam-run" "steam-unwrapped" ]; # Create steam user users = { users.steam = { isSystemUser = true; home = cfg.dataDir; createHome = true; shell = pkgs.bash; group = "steam"; }; groups.steam = { }; }; systemd.tmpfiles.rules = [ "d ${cfg.dataDir}/reforger 0755 steam steam -" "d ${cfg.dataDir}/reforger/configs 0755 steam steam -" "d ${cfg.dataDir}/reforger/profile 0755 steam steam -" "d ${cfg.dataDir}/reforger/workshop 0755 steam steam -" ]; systemd.services = { arma = { description = "arma game server"; wantedBy = [ "multi-user.target" ]; environment = { ARMA_DIR = "${cfg.dataDir}"; }; # path = with pkgs; [ # curl # steamcmd # steam-run # ]; # preStart = "${pkgs.arma-scripts}/scripts/update.sh"; serviceConfig = { User = "steam"; TimeoutStartSec = "infinity"; WorkingDirectory = "${cfg.dataDir}/reforger"; ExecStart = "${lib.getExe pkgs.steam-run} ${cfg.dataDir}/reforger/ArmaReforgerServer -config ${cfg.dataDir}/reforger/Configs/default.json -maxFPS 60"; }; }; }; }; }