From 16f34f3a8d642b2a5f854c19e5154a626e145c4a Mon Sep 17 00:00:00 2001 From: alexion Date: Wed, 9 Sep 2026 22:11:46 -0400 Subject: [PATCH] refactor(nixos): inline SteamCMD module config --- configs/nixos/modules/services/steamcmd.nix | 107 ++++++++++---------- 1 file changed, 52 insertions(+), 55 deletions(-) diff --git a/configs/nixos/modules/services/steamcmd.nix b/configs/nixos/modules/services/steamcmd.nix index e292d66..3f918bc 100644 --- a/configs/nixos/modules/services/steamcmd.nix +++ b/configs/nixos/modules/services/steamcmd.nix @@ -4,9 +4,6 @@ pkgs, ... }: -let - cfg = config.modules.services.steamcmd; -in { options.modules.services.steamcmd = { enable = lib.mkEnableOption "SteamCMD-managed game server"; @@ -142,107 +139,107 @@ in registry."stable-uid".${config.networking.hostName}.steamcmd = 20003; } - (lib.mkIf cfg.enable ( + (lib.mkIf config.modules.services.steamcmd.enable ( let - prepareScript = pkgs.writeShellScript "steamcmd-${cfg.serviceName}-prepare" '' + prepareScript = pkgs.writeShellScript "steamcmd-${config.modules.services.steamcmd.serviceName}-prepare" '' set -eu ${pkgs.coreutils}/bin/install -d \ - -o ${lib.escapeShellArg cfg.user} \ - -g ${lib.escapeShellArg cfg.group} \ + -o ${lib.escapeShellArg config.modules.services.steamcmd.user} \ + -g ${lib.escapeShellArg config.modules.services.steamcmd.group} \ -m 0770 \ - ${lib.escapeShellArg cfg.steamDir} \ - ${lib.escapeShellArg cfg.installDir} \ - ${lib.escapeShellArg cfg.stateDir} + ${lib.escapeShellArg config.modules.services.steamcmd.steamDir} \ + ${lib.escapeShellArg config.modules.services.steamcmd.installDir} \ + ${lib.escapeShellArg config.modules.services.steamcmd.stateDir} ''; - updateScript = pkgs.writeShellScript "steamcmd-${cfg.serviceName}-update" '' + updateScript = pkgs.writeShellScript "steamcmd-${config.modules.services.steamcmd.serviceName}-update" '' set -eu - export HOME=${lib.escapeShellArg cfg.steamDir} - exec ${lib.getExe cfg.package} \ - +force_install_dir ${lib.escapeShellArg cfg.installDir} \ + export HOME=${lib.escapeShellArg config.modules.services.steamcmd.steamDir} + exec ${lib.getExe config.modules.services.steamcmd.package} \ + +force_install_dir ${lib.escapeShellArg config.modules.services.steamcmd.installDir} \ +login anonymous \ - +app_update ${toString cfg.appId} ${lib.optionalString cfg.validateUpdate "validate"} \ + +app_update ${toString config.modules.services.steamcmd.appId} ${lib.optionalString config.modules.services.steamcmd.validateUpdate "validate"} \ +quit ''; - libraryPath = lib.concatStringsSep ":" cfg.libraryDirs; - startScript = pkgs.writeShellScript "steamcmd-${cfg.serviceName}-start" '' + libraryPath = lib.concatStringsSep ":" config.modules.services.steamcmd.libraryDirs; + startScript = pkgs.writeShellScript "steamcmd-${config.modules.services.steamcmd.serviceName}-start" '' set -eu - cd ${lib.escapeShellArg cfg.installDir} - ${lib.optionalString (cfg.libraryDirs != [ ]) ''export LD_LIBRARY_PATH=${lib.escapeShellArg libraryPath}:''${LD_LIBRARY_PATH-}''} - exec ${lib.getExe pkgs.steam-run} ${lib.escapeShellArg cfg.executable} ${lib.escapeShellArgs cfg.arguments} + cd ${lib.escapeShellArg config.modules.services.steamcmd.installDir} + ${lib.optionalString (config.modules.services.steamcmd.libraryDirs != [ ]) ''export LD_LIBRARY_PATH=${lib.escapeShellArg libraryPath}:''${LD_LIBRARY_PATH-}''} + exec ${lib.getExe pkgs.steam-run} ${lib.escapeShellArg config.modules.services.steamcmd.executable} ${lib.escapeShellArgs config.modules.services.steamcmd.arguments} ''; restartCommand = - if cfg.restart.command != null then - cfg.restart.command + if config.modules.services.steamcmd.restart.command != null then + config.modules.services.steamcmd.restart.command else - "systemctl restart ${lib.escapeShellArg cfg.serviceName}.service"; + "systemctl restart ${lib.escapeShellArg config.modules.services.steamcmd.serviceName}.service"; in { - users.groups.${cfg.group} = { }; - users.users.${cfg.user} = { + users.groups.${config.modules.services.steamcmd.group} = { }; + users.users.${config.modules.services.steamcmd.user} = { isSystemUser = true; uid = config.registry."stable-uid".${config.networking.hostName}.steamcmd; - group = cfg.group; - home = cfg.steamDir; + group = config.modules.services.steamcmd.group; + home = config.modules.services.steamcmd.steamDir; }; systemd.tmpfiles.rules = [ - "d ${cfg.steamDir} 0770 ${cfg.user} ${cfg.group} - -" - "z ${cfg.steamDir} 0770 ${cfg.user} ${cfg.group} - -" - "d ${cfg.installDir} 0770 ${cfg.user} ${cfg.group} - -" - "z ${cfg.installDir} 0770 ${cfg.user} ${cfg.group} - -" - "d ${cfg.stateDir} 0770 ${cfg.user} ${cfg.group} - -" - "z ${cfg.stateDir} 0770 ${cfg.user} ${cfg.group} - -" + "d ${config.modules.services.steamcmd.steamDir} 0770 ${config.modules.services.steamcmd.user} ${config.modules.services.steamcmd.group} - -" + "z ${config.modules.services.steamcmd.steamDir} 0770 ${config.modules.services.steamcmd.user} ${config.modules.services.steamcmd.group} - -" + "d ${config.modules.services.steamcmd.installDir} 0770 ${config.modules.services.steamcmd.user} ${config.modules.services.steamcmd.group} - -" + "z ${config.modules.services.steamcmd.installDir} 0770 ${config.modules.services.steamcmd.user} ${config.modules.services.steamcmd.group} - -" + "d ${config.modules.services.steamcmd.stateDir} 0770 ${config.modules.services.steamcmd.user} ${config.modules.services.steamcmd.group} - -" + "z ${config.modules.services.steamcmd.stateDir} 0770 ${config.modules.services.steamcmd.user} ${config.modules.services.steamcmd.group} - -" ]; systemd.services = { - "steamcmd-${cfg.serviceName}-update" = { - description = "Update ${cfg.serviceName} with SteamCMD"; + "steamcmd-${config.modules.services.steamcmd.serviceName}-update" = { + description = "Update ${config.modules.services.steamcmd.serviceName} with SteamCMD"; after = [ "network-online.target" ]; wants = [ "network-online.target" ]; serviceConfig = { Type = "oneshot"; - User = cfg.user; - Group = cfg.group; - WorkingDirectory = "-${cfg.steamDir}"; + User = config.modules.services.steamcmd.user; + Group = config.modules.services.steamcmd.group; + WorkingDirectory = "-${config.modules.services.steamcmd.steamDir}"; ExecStartPre = "+${prepareScript}"; ExecStart = updateScript; }; }; - ${cfg.serviceName} = { - description = "${cfg.serviceName} game server"; + ${config.modules.services.steamcmd.serviceName} = { + description = "${config.modules.services.steamcmd.serviceName} game server"; after = [ "network-online.target" - "steamcmd-${cfg.serviceName}-update.service" + "steamcmd-${config.modules.services.steamcmd.serviceName}-update.service" ]; wants = [ "network-online.target" ]; wantedBy = [ "multi-user.target" ]; path = [ pkgs.steam-run ]; serviceConfig = { Type = "simple"; - User = cfg.user; - Group = cfg.group; - WorkingDirectory = "-${cfg.installDir}"; - EnvironmentFile = cfg.environmentFiles; + User = config.modules.services.steamcmd.user; + Group = config.modules.services.steamcmd.group; + WorkingDirectory = "-${config.modules.services.steamcmd.installDir}"; + EnvironmentFile = config.modules.services.steamcmd.environmentFiles; ExecStartPre = [ "+${prepareScript}" - ] ++ lib.optional cfg.updateOnStart updateScript; + ] ++ lib.optional config.modules.services.steamcmd.updateOnStart updateScript; ExecStart = startScript; Restart = "on-failure"; }; }; - "steamcmd-${cfg.serviceName}-restart" = lib.mkIf cfg.restart.enable { - description = "Restart ${cfg.serviceName}"; + "steamcmd-${config.modules.services.steamcmd.serviceName}-restart" = lib.mkIf config.modules.services.steamcmd.restart.enable { + description = "Restart ${config.modules.services.steamcmd.serviceName}"; serviceConfig = { Type = "oneshot"; - ExecStart = pkgs.writeShellScript "steamcmd-${cfg.serviceName}-restart" '' + ExecStart = pkgs.writeShellScript "steamcmd-${config.modules.services.steamcmd.serviceName}-restart" '' set -eu exec ${restartCommand} @@ -251,18 +248,18 @@ in }; }; - systemd.timers."steamcmd-${cfg.serviceName}-restart" = lib.mkIf cfg.restart.enable { - description = "Restart ${cfg.serviceName} on a schedule"; + systemd.timers."steamcmd-${config.modules.services.steamcmd.serviceName}-restart" = lib.mkIf config.modules.services.steamcmd.restart.enable { + description = "Restart ${config.modules.services.steamcmd.serviceName} on a schedule"; wantedBy = [ "timers.target" ]; timerConfig = { - OnCalendar = cfg.restart.onCalendar; - RandomizedDelaySec = cfg.restart.randomizedDelaySec; + OnCalendar = config.modules.services.steamcmd.restart.onCalendar; + RandomizedDelaySec = config.modules.services.steamcmd.restart.randomizedDelaySec; Persistent = true; }; }; - networking.firewall.allowedTCPPorts = cfg.tcpPorts; - networking.firewall.allowedUDPPorts = cfg.udpPorts; + networking.firewall.allowedTCPPorts = config.modules.services.steamcmd.tcpPorts; + networking.firewall.allowedUDPPorts = config.modules.services.steamcmd.udpPorts; } )) ];