grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / misc / sonarr.nix
blob60e73198d60decb3aa8d43d7d83c88d29e371cbb
1 { config, pkgs, lib, utils, ... }:
3 with lib;
5 let
6   cfg = config.services.sonarr;
7 in
9   options = {
10     services.sonarr = {
11       enable = mkEnableOption "Sonarr";
13       dataDir = mkOption {
14         type = types.str;
15         default = "/var/lib/sonarr/.config/NzbDrone";
16         description = "The directory where Sonarr stores its data files.";
17       };
19       openFirewall = mkOption {
20         type = types.bool;
21         default = false;
22         description = ''
23           Open ports in the firewall for the Sonarr web interface
24         '';
25       };
27       user = mkOption {
28         type = types.str;
29         default = "sonarr";
30         description = "User account under which Sonaar runs.";
31       };
33       group = mkOption {
34         type = types.str;
35         default = "sonarr";
36         description = "Group under which Sonaar runs.";
37       };
39       package = mkPackageOption pkgs "sonarr" { };
40     };
41   };
43   config = mkIf cfg.enable {
44     systemd.tmpfiles.rules = [
45       "d '${cfg.dataDir}' 0700 ${cfg.user} ${cfg.group} - -"
46     ];
48     systemd.services.sonarr = {
49       description = "Sonarr";
50       after = [ "network.target" ];
51       wantedBy = [ "multi-user.target" ];
53       serviceConfig = {
54         Type = "simple";
55         User = cfg.user;
56         Group = cfg.group;
57         ExecStart = utils.escapeSystemdExecArgs [
58           (lib.getExe cfg.package)
59           "-nobrowser"
60           "-data=${cfg.dataDir}"
61         ];
62         Restart = "on-failure";
63       };
64     };
66     networking.firewall = mkIf cfg.openFirewall {
67       allowedTCPPorts = [ 8989 ];
68     };
70     users.users = mkIf (cfg.user == "sonarr") {
71       sonarr = {
72         group = cfg.group;
73         home = cfg.dataDir;
74         uid = config.ids.uids.sonarr;
75       };
76     };
78     users.groups = mkIf (cfg.group == "sonarr") {
79       sonarr.gid = config.ids.gids.sonarr;
80     };
81   };