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}