nixos/syncplay: add saltFile and extraArgs option (#220096)
Co-authored-by: Sandro <sandro.jaeckel@gmail.com>
This commit is contained in:
parent
1c80c494ca
commit
dfb8a2a7c4
1 changed files with 39 additions and 5 deletions
|
@ -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
|
||||
<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>.
|
||||
'';
|
||||
};
|
||||
|
||||
|
@ -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}
|
||||
'';
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue