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