1{
2 config,
3 pkgs,
4 lib,
5 ...
6}:
7let
8 cfg = config.services.prowlarr;
9 servarr = import ./settings-options.nix { inherit lib pkgs; };
10in
11{
12 options = {
13 services.prowlarr = {
14 enable = lib.mkEnableOption "Prowlarr, an indexer manager/proxy for Torrent trackers and Usenet indexers";
15
16 package = lib.mkPackageOption pkgs "prowlarr" { };
17
18 openFirewall = lib.mkOption {
19 type = lib.types.bool;
20 default = false;
21 description = "Open ports in the firewall for the Prowlarr web interface.";
22 };
23
24 settings = servarr.mkServarrSettingsOptions "prowlarr" 9696;
25
26 environmentFiles = servarr.mkServarrEnvironmentFiles "prowlarr";
27 };
28 };
29
30 config = lib.mkIf cfg.enable {
31 systemd.services.prowlarr = {
32 description = "Prowlarr";
33 after = [ "network.target" ];
34 wantedBy = [ "multi-user.target" ];
35 environment = servarr.mkServarrSettingsEnvVars "PROWLARR" cfg.settings // {
36 HOME = "/var/empty";
37 };
38
39 serviceConfig = {
40 Type = "simple";
41 DynamicUser = true;
42 StateDirectory = "prowlarr";
43 EnvironmentFile = cfg.environmentFiles;
44 ExecStart = "${lib.getExe cfg.package} -nobrowser -data=/var/lib/prowlarr";
45 Restart = "on-failure";
46 };
47 };
48
49 networking.firewall = lib.mkIf cfg.openFirewall {
50 allowedTCPPorts = [ cfg.settings.server.port ];
51 };
52 };
53}