{
  pkgs,
  lib,
  nglib,
  config,
  ...
}: let
  cfg = config.services.nzbget;
  cfgInit = config.init.services.nzbget;
  stateDir = "/home/nzbget";
  configFile = "${stateDir}/nzbget.conf";
in {
  options.services.nzbget = {
    enable = lib.mkEnableOption "nzbget";
    package = lib.mkPackageOption pkgs "nzbget" {};
  };

  config = lib.mkIf cfg.enable {
    init.services.nzbget = {
      enabled = true;
      user = lib.mkDefault "nzbget";
      group = lib.mkDefault "nzbget";

      execStartPre = pkgs.writeShellScript "nzbget-pre.sh" ''
        if [ ! -f ${configFile} ]; then
          ${pkgs.coreutils}/bin/install -m 0700 ${cfg.package}/share/nzbget/nzbget.conf ${configFile}
        fi
      '';

      script = pkgs.writeShellScript "nzbget-run.sh" ''
        umask 0002
        ${lib.getExe cfg.package} --server --configfile ${configFile}
      '';
    };

    environment.systemPackages = with pkgs; [cfg.package unrar p7zip];

    users.users.${cfgInit.user} = lib.mkIf (cfgInit.user == "nzbget") (nglib.mkDefaultRec {
      description = "nzbget";
      inherit (cfgInit) group;
      createHome = true;
      home = "/home/nzbget";
      useDefaultShell = true;
      uid = config.ids.uids.nzbget;
    });

    users.groups.${cfgInit.group} = lib.mkIf (cfgInit.group == "nzbget") (nglib.mkDefaultRec {gid = config.ids.gids.nzbget;});
  };
}