nixos/syncplay: add saltFile and extraArgs option (#220096)

Co-authored-by: Sandro <sandro.jaeckel@gmail.com>

Katze dfb8a2a7 1c80c494

Changed files
+39 -5
nixos
modules
services
networking
+39 -5
nixos/modules/services/networking/syncplay.nix
···
cmdArgs =
[ "--port" cfg.port ]
++ optionals (cfg.salt != null) [ "--salt" cfg.salt ]
-
++ optionals (cfg.certDir != null) [ "--tls" cfg.certDir ];
in
{
···
default = null;
description = lib.mdDoc ''
Salt to allow room operator passwords generated by this server
-
instance to still work when the server is restarted.
'';
};
···
'';
};
user = mkOption {
type = types.str;
default = "nobody";
···
};
config = mkIf cfg.enable {
systemd.services.syncplay = {
description = "Syncplay Service";
-
wantedBy = [ "multi-user.target" ];
-
after = [ "network-online.target" ];
serviceConfig = {
User = cfg.user;
Group = cfg.group;
-
LoadCredential = lib.mkIf (cfg.passwordFile != null) "password:${cfg.passwordFile}";
};
script = ''
${lib.optionalString (cfg.passwordFile != null) ''
export SYNCPLAY_PASSWORD=$(cat "''${CREDENTIALS_DIRECTORY}/password")
''}
exec ${pkgs.syncplay-nogui}/bin/syncplay-server ${escapeShellArgs cmdArgs}
'';
···
cmdArgs =
[ "--port" cfg.port ]
++ optionals (cfg.salt != null) [ "--salt" cfg.salt ]
+
++ optionals (cfg.certDir != null) [ "--tls" cfg.certDir ]
+
++ cfg.extraArgs;
in
{
···
default = null;
description = lib.mdDoc ''
Salt to allow room operator passwords generated by this server
+
instance to still work when the server is restarted. The salt will be
+
readable in the nix store and the processlist. If this is not
+
intended use `saltFile` instead. Mutually exclusive with
+
<option>services.syncplay.saltFile</option>.
+
'';
+
};
+
+
saltFile = mkOption {
+
type = types.nullOr types.path;
+
default = null;
+
description = lib.mdDoc ''
+
Path to the file that contains the server salt. This allows room
+
operator passwords generated by this server instance to still work
+
when the server is restarted. `null`, the server doesn't load the
+
salt from a file. Mutually exclusive with
+
<option>services.syncplay.salt</option>.
'';
};
···
'';
};
+
extraArgs = mkOption {
+
type = types.listOf types.str;
+
default = [ ];
+
description = lib.mdDoc ''
+
Additional arguments to be passed to the service.
+
'';
+
};
+
user = mkOption {
type = types.str;
default = "nobody";
···
};
config = mkIf cfg.enable {
+
assertions = [
+
{
+
assertion = cfg.salt == null || cfg.saltFile == null;
+
message = "services.syncplay.salt and services.syncplay.saltFile are mutually exclusive.";
+
}
+
];
systemd.services.syncplay = {
description = "Syncplay Service";
+
wantedBy = [ "multi-user.target" ];
+
after = [ "network-online.target" ];
serviceConfig = {
User = cfg.user;
Group = cfg.group;
+
LoadCredential = lib.optional (cfg.passwordFile != null) "password:${cfg.passwordFile}"
+
++ lib.optional (cfg.saltFile != null) "salt:${cfg.saltFile}";
};
script = ''
${lib.optionalString (cfg.passwordFile != null) ''
export SYNCPLAY_PASSWORD=$(cat "''${CREDENTIALS_DIRECTORY}/password")
+
''}
+
${lib.optionalString (cfg.saltFile != null) ''
+
export SYNCPLAY_SALT=$(cat "''${CREDENTIALS_DIRECTORY}/salt")
''}
exec ${pkgs.syncplay-nogui}/bin/syncplay-server ${escapeShellArgs cmdArgs}
'';