python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / nixos / modules / services / misc / sonarr.nix
blob65c51d9677d9e569df33af2664683c2bb737f3e5
1 { config, pkgs, lib, ... }:
3 with lib;
5 let
6   cfg = config.services.sonarr;
7 in
9   options = {
10     services.sonarr = {
11       enable = mkEnableOption (lib.mdDoc "Sonarr");
13       dataDir = mkOption {
14         type = types.str;
15         default = "/var/lib/sonarr/.config/NzbDrone";
16         description = lib.mdDoc "The directory where Sonarr stores its data files.";
17       };
19       openFirewall = mkOption {
20         type = types.bool;
21         default = false;
22         description = lib.mdDoc ''
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 = lib.mdDoc "User account under which Sonaar runs.";
31       };
33       group = mkOption {
34         type = types.str;
35         default = "sonarr";
36         description = lib.mdDoc "Group under which Sonaar runs.";
37       };
39       package = mkOption {
40         type = types.package;
41         default = pkgs.sonarr;
42         defaultText = literalExpression "pkgs.sonarr";
43         description = lib.mdDoc ''
44           Sonarr package to use.
45         '';
46       };
47     };
48   };
50   config = mkIf cfg.enable {
51     systemd.tmpfiles.rules = [
52       "d '${cfg.dataDir}' 0700 ${cfg.user} ${cfg.group} - -"
53     ];
55     systemd.services.sonarr = {
56       description = "Sonarr";
57       after = [ "network.target" ];
58       wantedBy = [ "multi-user.target" ];
60       serviceConfig = {
61         Type = "simple";
62         User = cfg.user;
63         Group = cfg.group;
64         ExecStart = "${cfg.package}/bin/NzbDrone -nobrowser -data='${cfg.dataDir}'";
65         Restart = "on-failure";
66       };
67     };
69     networking.firewall = mkIf cfg.openFirewall {
70       allowedTCPPorts = [ 8989 ];
71     };
73     users.users = mkIf (cfg.user == "sonarr") {
74       sonarr = {
75         group = cfg.group;
76         home = cfg.dataDir;
77         uid = config.ids.uids.sonarr;
78       };
79     };
81     users.groups = mkIf (cfg.group == "sonarr") {
82       sonarr.gid = config.ids.gids.sonarr;
83     };
84   };