at master 2.2 kB view raw
1{ 2 config, 3 pkgs, 4 lib, 5 ... 6}: 7let 8 cfg = config.services.prowlarr; 9 servarr = import ./settings-options.nix { inherit lib pkgs; }; 10 isCustomDataDir = cfg.dataDir != "/var/lib/prowlarr"; 11in 12{ 13 options = { 14 services.prowlarr = { 15 enable = lib.mkEnableOption "Prowlarr, an indexer manager/proxy for Torrent trackers and Usenet indexers"; 16 17 dataDir = lib.mkOption { 18 type = lib.types.str; 19 default = "/var/lib/prowlarr"; 20 description = '' 21 The directory where Prowlarr stores its data files. 22 23 Note: A bind mount will be used to mount the directory at the expected location 24 if a different value than `/var/lib/prowlarr` is used. 25 ''; 26 }; 27 28 package = lib.mkPackageOption pkgs "prowlarr" { }; 29 30 openFirewall = lib.mkOption { 31 type = lib.types.bool; 32 default = false; 33 description = "Open ports in the firewall for the Prowlarr web interface."; 34 }; 35 36 settings = servarr.mkServarrSettingsOptions "prowlarr" 9696; 37 38 environmentFiles = servarr.mkServarrEnvironmentFiles "prowlarr"; 39 }; 40 }; 41 42 config = lib.mkIf cfg.enable { 43 systemd = { 44 services.prowlarr = { 45 description = "Prowlarr"; 46 after = [ "network.target" ]; 47 wantedBy = [ "multi-user.target" ]; 48 environment = servarr.mkServarrSettingsEnvVars "PROWLARR" cfg.settings // { 49 HOME = "/var/empty"; 50 }; 51 52 serviceConfig = { 53 Type = "simple"; 54 DynamicUser = true; 55 StateDirectory = "prowlarr"; 56 EnvironmentFile = cfg.environmentFiles; 57 ExecStart = "${lib.getExe cfg.package} -nobrowser -data=/var/lib/prowlarr"; 58 Restart = "on-failure"; 59 }; 60 }; 61 62 tmpfiles.settings."10-prowlarr".${cfg.dataDir}.d = lib.mkIf isCustomDataDir { 63 user = "root"; 64 group = "root"; 65 mode = "0700"; 66 }; 67 68 mounts = lib.optional isCustomDataDir { 69 what = cfg.dataDir; 70 where = "/var/lib/private/prowlarr"; 71 options = "bind"; 72 wantedBy = [ "local-fs.target" ]; 73 }; 74 }; 75 76 networking.firewall = lib.mkIf cfg.openFirewall { 77 allowedTCPPorts = [ cfg.settings.server.port ]; 78 }; 79 }; 80}