1{
2 config,
3 pkgs,
4 lib,
5 ...
6}:
7let
8 cfg = config.services.radarr;
9 servarr = import ./settings-options.nix { inherit lib pkgs; };
10in
11{
12 options = {
13 services.radarr = {
14 enable = lib.mkEnableOption "Radarr, a UsetNet/BitTorrent movie downloader";
15
16 package = lib.mkPackageOption pkgs "radarr" { };
17
18 dataDir = lib.mkOption {
19 type = lib.types.str;
20 default = "/var/lib/radarr/.config/Radarr";
21 description = "The directory where Radarr stores its data files.";
22 };
23
24 openFirewall = lib.mkOption {
25 type = lib.types.bool;
26 default = false;
27 description = "Open ports in the firewall for the Radarr web interface.";
28 };
29
30 settings = servarr.mkServarrSettingsOptions "radarr" 7878;
31
32 environmentFiles = servarr.mkServarrEnvironmentFiles "radarr";
33
34 user = lib.mkOption {
35 type = lib.types.str;
36 default = "radarr";
37 description = "User account under which Radarr runs.";
38 };
39
40 group = lib.mkOption {
41 type = lib.types.str;
42 default = "radarr";
43 description = "Group under which Radarr runs.";
44 };
45 };
46 };
47
48 config = lib.mkIf cfg.enable {
49 systemd.tmpfiles.settings."10-radarr".${cfg.dataDir}.d = {
50 inherit (cfg) user group;
51 mode = "0700";
52 };
53
54 systemd.services.radarr = {
55 description = "Radarr";
56 after = [ "network.target" ];
57 wantedBy = [ "multi-user.target" ];
58 environment = servarr.mkServarrSettingsEnvVars "RADARR" cfg.settings;
59
60 serviceConfig = {
61 Type = "simple";
62 User = cfg.user;
63 Group = cfg.group;
64 EnvironmentFile = cfg.environmentFiles;
65 ExecStart = "${cfg.package}/bin/Radarr -nobrowser -data='${cfg.dataDir}'";
66 Restart = "on-failure";
67 };
68 };
69
70 networking.firewall = lib.mkIf cfg.openFirewall {
71 allowedTCPPorts = [ cfg.settings.server.port ];
72 };
73
74 users.users = lib.mkIf (cfg.user == "radarr") {
75 radarr = {
76 group = cfg.group;
77 home = cfg.dataDir;
78 uid = config.ids.uids.radarr;
79 };
80 };
81
82 users.groups = lib.mkIf (cfg.group == "radarr") {
83 radarr.gid = config.ids.gids.radarr;
84 };
85 };
86}