1{ config, pkgs, lib, ... }:
2
3with lib;
4
5let
6 cfg = config.services.nzbget;
7 nzbget = pkgs.nzbget;
8in
9{
10 options = {
11 services.nzbget = {
12 enable = mkEnableOption "NZBGet";
13
14 package = mkOption {
15 type = types.package;
16 default = pkgs.nzbget;
17 defaultText = "pkgs.nzbget";
18 description = "The NZBGet package to use";
19 };
20
21 user = mkOption {
22 type = types.str;
23 default = "nzbget";
24 description = "User account under which NZBGet runs";
25 };
26
27 group = mkOption {
28 type = types.str;
29 default = "nzbget";
30 description = "Group under which NZBGet runs";
31 };
32 };
33 };
34
35 config = mkIf cfg.enable {
36 systemd.services.nzbget = {
37 description = "NZBGet Daemon";
38 after = [ "network.target" ];
39 wantedBy = [ "multi-user.target" ];
40 path = with pkgs; [
41 unrar
42 p7zip
43 ];
44 preStart = ''
45 test -d /var/lib/nzbget || {
46 echo "Creating nzbget state directoy in /var/lib/"
47 mkdir -p /var/lib/nzbget
48 }
49 test -f /var/lib/nzbget/nzbget.conf || {
50 echo "nzbget.conf not found. Copying default config to /var/lib/nzbget/nzbget.conf"
51 cp ${cfg.package}/share/nzbget/nzbget.conf /var/lib/nzbget/nzbget.conf
52 echo "Setting file mode of nzbget.conf to 0700 (needs to be written and contains plaintext credentials)"
53 chmod 0700 /var/lib/nzbget/nzbget.conf
54 echo "Setting temporary \$MAINDIR variable in default config required in order to allow nzbget to complete initial start"
55 echo "Remember to change this to a proper value once NZBGet startup has been completed"
56 sed -i -e 's/MainDir=.*/MainDir=\/tmp/g' /var/lib/nzbget/nzbget.conf
57 }
58 echo "Ensuring proper ownership of /var/lib/nzbget (${cfg.user}:${cfg.group})."
59 chown -R ${cfg.user}:${cfg.group} /var/lib/nzbget
60 '';
61
62 serviceConfig = {
63 Type = "forking";
64 User = cfg.user;
65 Group = cfg.group;
66 PermissionsStartOnly = "true";
67 ExecStart = "${cfg.package}/bin/nzbget --daemon --configfile /var/lib/nzbget/nzbget.conf";
68 Restart = "on-failure";
69 };
70 };
71
72 users.extraUsers = mkIf (cfg.user == "nzbget") {
73 nzbget = {
74 group = cfg.group;
75 uid = config.ids.uids.nzbget;
76 };
77 };
78
79 users.extraGroups = mkIf (cfg.group == "nzbget") {
80 nzbget = {
81 gid = config.ids.gids.nzbget;
82 };
83 };
84 };
85}