at 23.11-pre 3.4 kB view raw
1{ config, pkgs, lib, ... }: 2 3with lib; 4 5let 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; 16in 17{ 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 ]; 23 24 # interface 25 26 options = { 27 services.nzbget = { 28 enable = mkEnableOption (lib.mdDoc "NZBGet"); 29 30 user = mkOption { 31 type = types.str; 32 default = "nzbget"; 33 description = lib.mdDoc "User account under which NZBGet runs"; 34 }; 35 36 group = mkOption { 37 type = types.str; 38 default = "nzbget"; 39 description = lib.mdDoc "Group under which NZBGet runs"; 40 }; 41 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 }; 56 57 # implementation 58 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 }; 75 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 ]; 84 85 preStart = '' 86 if [ ! -f ${configFile} ]; then 87 ${pkgs.coreutils}/bin/install -m 0700 ${pkg}/share/nzbget/nzbget.conf ${configFile} 88 fi 89 ''; 90 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 }; 102 103 users.users = mkIf (cfg.user == "nzbget") { 104 nzbget = { 105 home = stateDir; 106 group = cfg.group; 107 uid = config.ids.uids.nzbget; 108 }; 109 }; 110 111 users.groups = mkIf (cfg.group == "nzbget") { 112 nzbget = { 113 gid = config.ids.gids.nzbget; 114 }; 115 }; 116 }; 117}