mastodon: 4.3.1 -> 4.3.2 (#361487)
[NixPkgs.git] / nixos / modules / services / misc / readarr.nix
blob15f1bde2cdfc72a2299d9b525b384520865603c1
1 { config, pkgs, lib, ... }:
2 let
3   cfg = config.services.readarr;
4 in
6   options = {
7     services.readarr = {
8       enable = lib.mkEnableOption "Readarr, a Usenet/BitTorrent ebook downloader";
10       dataDir = lib.mkOption {
11         type = lib.types.str;
12         default = "/var/lib/readarr/";
13         description = "The directory where Readarr stores its data files.";
14       };
16       package = lib.mkPackageOption pkgs "readarr" { };
18       openFirewall = lib.mkOption {
19         type = lib.types.bool;
20         default = false;
21         description = ''
22           Open ports in the firewall for Readarr
23         '';
24       };
26       user = lib.mkOption {
27         type = lib.types.str;
28         default = "readarr";
29         description = ''
30           User account under which Readarr runs.
31         '';
32       };
34       group = lib.mkOption {
35         type = lib.types.str;
36         default = "readarr";
37         description = ''
38           Group under which Readarr runs.
39         '';
40       };
41     };
42   };
44   config = lib.mkIf cfg.enable {
45     systemd.tmpfiles.settings."10-readarr".${cfg.dataDir}.d = {
46       inherit (cfg) user group;
47       mode = "0700";
48     };
50     systemd.services.readarr = {
51       description = "Readarr";
52       after = [ "network.target" ];
53       wantedBy = [ "multi-user.target" ];
55       serviceConfig = {
56         Type = "simple";
57         User = cfg.user;
58         Group = cfg.group;
59         ExecStart = "${cfg.package}/bin/Readarr -nobrowser -data='${cfg.dataDir}'";
60         Restart = "on-failure";
61       };
62     };
64     networking.firewall = lib.mkIf cfg.openFirewall {
65       allowedTCPPorts = [ 8787 ];
66     };
68     users.users = lib.mkIf (cfg.user == "readarr") {
69       readarr = {
70         description = "Readarr service";
71         home = cfg.dataDir;
72         group = cfg.group;
73         isSystemUser = true;
74       };
75     };
77     users.groups = lib.mkIf (cfg.group == "readarr") {
78       readarr = { };
79     };
80   };