at 24.11-pre 1.8 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 "Jackett, API support for your favorite torrent trackers"; 13 14 dataDir = mkOption { 15 type = types.str; 16 default = "/var/lib/jackett/.config/Jackett"; 17 description = "The directory where Jackett stores its data files."; 18 }; 19 20 openFirewall = mkOption { 21 type = types.bool; 22 default = false; 23 description = "Open ports in the firewall for the Jackett web interface."; 24 }; 25 26 user = mkOption { 27 type = types.str; 28 default = "jackett"; 29 description = "User account under which Jackett runs."; 30 }; 31 32 group = mkOption { 33 type = types.str; 34 default = "jackett"; 35 description = "Group under which Jackett runs."; 36 }; 37 38 package = mkPackageOption pkgs "jackett" { }; 39 }; 40 }; 41 42 config = mkIf cfg.enable { 43 systemd.tmpfiles.rules = [ 44 "d '${cfg.dataDir}' 0700 ${cfg.user} ${cfg.group} - -" 45 ]; 46 47 systemd.services.jackett = { 48 description = "Jackett"; 49 after = [ "network.target" ]; 50 wantedBy = [ "multi-user.target" ]; 51 52 serviceConfig = { 53 Type = "simple"; 54 User = cfg.user; 55 Group = cfg.group; 56 ExecStart = "${cfg.package}/bin/Jackett --NoUpdates --DataFolder '${cfg.dataDir}'"; 57 Restart = "on-failure"; 58 }; 59 }; 60 61 networking.firewall = mkIf cfg.openFirewall { 62 allowedTCPPorts = [ 9117 ]; 63 }; 64 65 users.users = mkIf (cfg.user == "jackett") { 66 jackett = { 67 group = cfg.group; 68 home = cfg.dataDir; 69 uid = config.ids.uids.jackett; 70 }; 71 }; 72 73 users.groups = mkIf (cfg.group == "jackett") { 74 jackett.gid = config.ids.gids.jackett; 75 }; 76 }; 77}