grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / misc / jackett.nix
blobcbac537a58b5635bdce0bcaf53c62b25000dc3e1
1 { config, pkgs, lib, ... }:
2 let
3   cfg = config.services.jackett;
5 in
7   options = {
8     services.jackett = {
9       enable = lib.mkEnableOption "Jackett, API support for your favorite torrent trackers";
11       port = lib.mkOption {
12         default = 9117;
13         type = lib.types.port;
14         description = ''
15           Port serving the web interface
16         '';
17       };
19       dataDir = lib.mkOption {
20         type = lib.types.str;
21         default = "/var/lib/jackett/.config/Jackett";
22         description = "The directory where Jackett stores its data files.";
23       };
25       openFirewall = lib.mkOption {
26         type = lib.types.bool;
27         default = false;
28         description = "Open ports in the firewall for the Jackett web interface.";
29       };
31       user = lib.mkOption {
32         type = lib.types.str;
33         default = "jackett";
34         description = "User account under which Jackett runs.";
35       };
37       group = lib.mkOption {
38         type = lib.types.str;
39         default = "jackett";
40         description = "Group under which Jackett runs.";
41       };
43       package = lib.mkPackageOption pkgs "jackett" { };
44     };
45   };
47   config = lib.mkIf cfg.enable {
48     systemd.tmpfiles.rules = [
49       "d '${cfg.dataDir}' 0700 ${cfg.user} ${cfg.group} - -"
50     ];
52     systemd.services.jackett = {
53       description = "Jackett";
54       after = [ "network.target" ];
55       wantedBy = [ "multi-user.target" ];
57       serviceConfig = {
58         Type = "simple";
59         User = cfg.user;
60         Group = cfg.group;
61         ExecStart = "${cfg.package}/bin/Jackett --NoUpdates --Port ${toString cfg.port} --DataFolder '${cfg.dataDir}'";
62         Restart = "on-failure";
63       };
64     };
66     networking.firewall = lib.mkIf cfg.openFirewall {
67       allowedTCPPorts = [ cfg.port ];
68     };
70     users.users = lib.mkIf (cfg.user == "jackett") {
71       jackett = {
72         group = cfg.group;
73         home = cfg.dataDir;
74         uid = config.ids.uids.jackett;
75       };
76     };
78     users.groups = lib.mkIf (cfg.group == "jackett") {
79       jackett.gid = config.ids.gids.jackett;
80     };
81   };