diff --git a/nixos/modules/services/networking/syncplay.nix b/nixos/modules/services/networking/syncplay.nix
index 726f65671072..0a66d93bf153 100644
--- a/nixos/modules/services/networking/syncplay.nix
+++ b/nixos/modules/services/networking/syncplay.nix
@@ -8,7 +8,8 @@ let
cmdArgs =
[ "--port" cfg.port ]
++ optionals (cfg.salt != null) [ "--salt" cfg.salt ]
- ++ optionals (cfg.certDir != null) [ "--tls" cfg.certDir ];
+ ++ optionals (cfg.certDir != null) [ "--tls" cfg.certDir ]
+ ++ cfg.extraArgs;
in
{
@@ -33,7 +34,22 @@ 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.
+ 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
+ .
+ '';
+ };
+
+ 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
+ .
'';
};
@@ -46,6 +62,14 @@ in
'';
};
+ 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";
@@ -74,21 +98,31 @@ in
};
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" ];
+ wantedBy = [ "multi-user.target" ];
+ after = [ "network-online.target" ];
serviceConfig = {
User = cfg.user;
Group = cfg.group;
- LoadCredential = lib.mkIf (cfg.passwordFile != null) "password:${cfg.passwordFile}";
+ 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}
'';
};