nixos/nzbget: add settings option

Changed files
+53 -19
nixos
modules
services
misc
tests
+36 -18
nixos/modules/services/misc/nzbget.nix
···
pkg = pkgs.nzbget;
stateDir = "/var/lib/nzbget";
configFile = "${stateDir}/nzbget.conf";
-
configOpts = concatStringsSep " " (mapAttrsToList (name: value: "-o ${name}=${value}") nixosOpts);
-
-
nixosOpts = {
-
# allows nzbget to run as a "simple" service
-
OutputMode = "loggable";
-
# use journald for logging
-
WriteLog = "none";
-
ErrorTarget = "screen";
-
WarningTarget = "screen";
-
InfoTarget = "screen";
-
DetailTarget = "screen";
-
# required paths
-
ConfigTemplate = "${pkg}/share/nzbget/nzbget.conf";
-
WebDir = "${pkg}/share/nzbget/webui";
-
# nixos handles package updates
-
UpdateCheck = "none";
-
};
-
+
configOpts = concatStringsSep " " (mapAttrsToList (name: value: "-o ${name}=${escapeShellArg (toStr value)}") cfg.settings);
+
toStr = v:
+
if v == true then "yes"
+
else if v == false then "no"
+
else if isInt v then toString v
+
else v;
in
{
imports = [
···
default = "nzbget";
description = "Group under which NZBGet runs";
};
+
+
settings = mkOption {
+
type = with types; attrsOf (oneOf [ bool int str ]);
+
default = {};
+
description = ''
+
NZBGet configuration, passed via command line using switch -o. Refer to
+
<link xlink:href="https://github.com/nzbget/nzbget/blob/master/nzbget.conf"/>
+
for details on supported values.
+
'';
+
example = {
+
MainDir = "/data";
+
};
+
};
};
};
# implementation
config = mkIf cfg.enable {
+
services.nzbget.settings = {
+
# allows nzbget to run as a "simple" service
+
OutputMode = "loggable";
+
# use journald for logging
+
WriteLog = "none";
+
ErrorTarget = "screen";
+
WarningTarget = "screen";
+
InfoTarget = "screen";
+
DetailTarget = "screen";
+
# required paths
+
ConfigTemplate = "${pkg}/share/nzbget/nzbget.conf";
+
WebDir = "${pkg}/share/nzbget/webui";
+
# nixos handles package updates
+
UpdateCheck = "none";
+
};
+
systemd.services.nzbget = {
description = "NZBGet Daemon";
after = [ "network.target" ];
···
unrar
p7zip
];
+
preStart = ''
if [ ! -f ${configFile} ]; then
${pkgs.coreutils}/bin/install -m 0700 ${pkg}/share/nzbget/nzbget.conf ${configFile}
+17 -1
nixos/tests/nzbget.nix
···
server = { ... }: {
services.nzbget.enable = true;
+
# provide some test settings
+
services.nzbget.settings = {
+
"MainDir" = "/var/lib/nzbget";
+
"DirectRename" = true;
+
"DiskSpace" = 0;
+
"Server1.Name" = "this is a test";
+
};
+
# hack, don't add (unfree) unrar to nzbget's path,
# so we can run this test in CI
systemd.services.nzbget.path = pkgs.lib.mkForce [ pkgs.p7zip ];
};
};
-
testScript = ''
+
testScript = { nodes, ... }: ''
start_all()
server.wait_for_unit("nzbget.service")
···
server.succeed(
"${pkgs.nzbget}/bin/nzbget -n -o Control_iP=127.0.0.1 -o Control_port=6789 -o Control_password=tegbzn6789 -V"
)
+
+
config = server.succeed("${nodes.server.config.systemd.services.nzbget.serviceConfig.ExecStart} --printconfig")
+
+
# confirm the test settings are applied
+
assert 'MainDir = "/var/lib/nzbget"' in config
+
assert 'DirectRename = "yes"' in config
+
assert 'DiskSpace = "0"' in config
+
assert 'Server1.Name = "this is a test"' in config
'';
})