python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / nixos / modules / services / misc / nzbget.nix
blobd02fda62fa4fabd5eb5a3283a6b20b701c910072
1 { config, pkgs, lib, ... }:
3 with lib;
5 let
6   cfg = config.services.nzbget;
7   pkg = pkgs.nzbget;
8   stateDir = "/var/lib/nzbget";
9   configFile = "${stateDir}/nzbget.conf";
10   configOpts = concatStringsSep " " (mapAttrsToList (name: value: "-o ${name}=${escapeShellArg (toStr value)}") cfg.settings);
11   toStr = v:
12     if v == true then "yes"
13     else if v == false then "no"
14     else if isInt v then toString v
15     else v;
18   imports = [
19     (mkRemovedOptionModule [ "services" "misc" "nzbget" "configFile" ] "The configuration of nzbget is now managed by users through the web interface.")
20     (mkRemovedOptionModule [ "services" "misc" "nzbget" "dataDir" ] "The data directory for nzbget is now /var/lib/nzbget.")
21     (mkRemovedOptionModule [ "services" "misc" "nzbget" "openFirewall" ] "The port used by nzbget is managed through the web interface so you should adjust your firewall rules accordingly.")
22   ];
24   # interface
26   options = {
27     services.nzbget = {
28       enable = mkEnableOption (lib.mdDoc "NZBGet");
30       user = mkOption {
31         type = types.str;
32         default = "nzbget";
33         description = lib.mdDoc "User account under which NZBGet runs";
34       };
36       group = mkOption {
37         type = types.str;
38         default = "nzbget";
39         description = lib.mdDoc "Group under which NZBGet runs";
40       };
42       settings = mkOption {
43         type = with types; attrsOf (oneOf [ bool int str ]);
44         default = {};
45         description = lib.mdDoc ''
46           NZBGet configuration, passed via command line using switch -o. Refer to
47           <https://github.com/nzbget/nzbget/blob/master/nzbget.conf>
48           for details on supported values.
49         '';
50         example = {
51           MainDir = "/data";
52         };
53       };
54     };
55   };
57   # implementation
59   config = mkIf cfg.enable {
60     services.nzbget.settings = {
61       # allows nzbget to run as a "simple" service
62       OutputMode = "loggable";
63       # use journald for logging
64       WriteLog = "none";
65       ErrorTarget = "screen";
66       WarningTarget = "screen";
67       InfoTarget = "screen";
68       DetailTarget = "screen";
69       # required paths
70       ConfigTemplate = "${pkg}/share/nzbget/nzbget.conf";
71       WebDir = "${pkg}/share/nzbget/webui";
72       # nixos handles package updates
73       UpdateCheck = "none";
74     };
76     systemd.services.nzbget = {
77       description = "NZBGet Daemon";
78       after = [ "network.target" ];
79       wantedBy = [ "multi-user.target" ];
80       path = with pkgs; [
81         unrar
82         p7zip
83       ];
85       preStart = ''
86         if [ ! -f ${configFile} ]; then
87           ${pkgs.coreutils}/bin/install -m 0700 ${pkg}/share/nzbget/nzbget.conf ${configFile}
88         fi
89       '';
91       serviceConfig = {
92         StateDirectory = "nzbget";
93         StateDirectoryMode = "0750";
94         User = cfg.user;
95         Group = cfg.group;
96         UMask = "0002";
97         Restart = "on-failure";
98         ExecStart = "${pkg}/bin/nzbget --server --configfile ${stateDir}/nzbget.conf ${configOpts}";
99         ExecStop = "${pkg}/bin/nzbget --quit";
100       };
101     };
103     users.users = mkIf (cfg.user == "nzbget") {
104       nzbget = {
105         home = stateDir;
106         group = cfg.group;
107         uid = config.ids.uids.nzbget;
108       };
109     };
111     users.groups = mkIf (cfg.group == "nzbget") {
112       nzbget = {
113         gid = config.ids.gids.nzbget;
114       };
115     };
116   };