diff options
Diffstat (limited to 'nixpkgs/nixos/modules/services/misc/nzbget.nix')
-rw-r--r-- | nixpkgs/nixos/modules/services/misc/nzbget.nix | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/nixpkgs/nixos/modules/services/misc/nzbget.nix b/nixpkgs/nixos/modules/services/misc/nzbget.nix new file mode 100644 index 000000000000..eb7b4c05d82d --- /dev/null +++ b/nixpkgs/nixos/modules/services/misc/nzbget.nix @@ -0,0 +1,93 @@ +{ config, pkgs, lib, ... }: + +with lib; + +let + cfg = config.services.nzbget; + 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"; + }; + +in +{ + # interface + + options = { + services.nzbget = { + enable = mkEnableOption "NZBGet"; + + user = mkOption { + type = types.str; + default = "nzbget"; + description = "User account under which NZBGet runs"; + }; + + group = mkOption { + type = types.str; + default = "nzbget"; + description = "Group under which NZBGet runs"; + }; + }; + }; + + # implementation + + config = mkIf cfg.enable { + systemd.services.nzbget = { + description = "NZBGet Daemon"; + after = [ "network.target" ]; + wantedBy = [ "multi-user.target" ]; + path = with pkgs; [ + unrar + p7zip + ]; + preStart = '' + if [ ! -f ${configFile} ]; then + ${pkgs.coreutils}/bin/install -m 0700 ${pkg}/share/nzbget/nzbget.conf ${configFile} + fi + ''; + + serviceConfig = { + StateDirectory = "nzbget"; + StateDirectoryMode = "0750"; + User = cfg.user; + Group = cfg.group; + UMask = "0002"; + Restart = "on-failure"; + ExecStart = "${pkg}/bin/nzbget --server --configfile ${stateDir}/nzbget.conf ${configOpts}"; + ExecStop = "${pkg}/bin/nzbget --quit"; + }; + }; + + users.users = mkIf (cfg.user == "nzbget") { + nzbget = { + home = stateDir; + group = cfg.group; + uid = config.ids.uids.nzbget; + }; + }; + + users.groups = mkIf (cfg.group == "nzbget") { + nzbget = { + gid = config.ids.gids.nzbget; + }; + }; + }; +} |