at 23.11-pre 2.0 kB view raw
1{ config, pkgs, lib, ... }: 2 3with lib; 4 5let 6 cfg = config.services.jackett; 7 8in 9{ 10 options = { 11 services.jackett = { 12 enable = mkEnableOption (lib.mdDoc "Jackett"); 13 14 dataDir = mkOption { 15 type = types.str; 16 default = "/var/lib/jackett/.config/Jackett"; 17 description = lib.mdDoc "The directory where Jackett stores its data files."; 18 }; 19 20 openFirewall = mkOption { 21 type = types.bool; 22 default = false; 23 description = lib.mdDoc "Open ports in the firewall for the Jackett web interface."; 24 }; 25 26 user = mkOption { 27 type = types.str; 28 default = "jackett"; 29 description = lib.mdDoc "User account under which Jackett runs."; 30 }; 31 32 group = mkOption { 33 type = types.str; 34 default = "jackett"; 35 description = lib.mdDoc "Group under which Jackett runs."; 36 }; 37 38 package = mkOption { 39 type = types.package; 40 default = pkgs.jackett; 41 defaultText = literalExpression "pkgs.jackett"; 42 description = lib.mdDoc "Jackett package to use."; 43 }; 44 }; 45 }; 46 47 config = mkIf cfg.enable { 48 systemd.tmpfiles.rules = [ 49 "d '${cfg.dataDir}' 0700 ${cfg.user} ${cfg.group} - -" 50 ]; 51 52 systemd.services.jackett = { 53 description = "Jackett"; 54 after = [ "network.target" ]; 55 wantedBy = [ "multi-user.target" ]; 56 57 serviceConfig = { 58 Type = "simple"; 59 User = cfg.user; 60 Group = cfg.group; 61 ExecStart = "${cfg.package}/bin/Jackett --NoUpdates --DataFolder '${cfg.dataDir}'"; 62 Restart = "on-failure"; 63 }; 64 }; 65 66 networking.firewall = mkIf cfg.openFirewall { 67 allowedTCPPorts = [ 9117 ]; 68 }; 69 70 users.users = mkIf (cfg.user == "jackett") { 71 jackett = { 72 group = cfg.group; 73 home = cfg.dataDir; 74 uid = config.ids.uids.jackett; 75 }; 76 }; 77 78 users.groups = mkIf (cfg.group == "jackett") { 79 jackett.gid = config.ids.gids.jackett; 80 }; 81 }; 82}