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