1{ config, pkgs, lib, ... }:
2
3with lib;
4
5let
6 cfg = config.services.lidarr;
7in
8{
9 options = {
10 services.lidarr = {
11 enable = mkEnableOption "Lidarr, a Usenet/BitTorrent music downloader";
12
13 dataDir = mkOption {
14 type = types.str;
15 default = "/var/lib/lidarr/.config/Lidarr";
16 description = "The directory where Lidarr stores its data files.";
17 };
18
19 package = mkPackageOption pkgs "lidarr" { };
20
21 openFirewall = mkOption {
22 type = types.bool;
23 default = false;
24 description = ''
25 Open ports in the firewall for Lidarr
26 '';
27 };
28
29 user = mkOption {
30 type = types.str;
31 default = "lidarr";
32 description = ''
33 User account under which Lidarr runs.
34 '';
35 };
36
37 group = mkOption {
38 type = types.str;
39 default = "lidarr";
40 description = ''
41 Group under which Lidarr runs.
42 '';
43 };
44 };
45 };
46
47 config = mkIf cfg.enable {
48 systemd.tmpfiles.settings."10-lidarr".${cfg.dataDir}.d = {
49 inherit (cfg) user group;
50 mode = "0700";
51 };
52
53 systemd.services.lidarr = {
54 description = "Lidarr";
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/Lidarr -nobrowser -data='${cfg.dataDir}'";
63 Restart = "on-failure";
64 };
65 };
66
67 networking.firewall = mkIf cfg.openFirewall {
68 allowedTCPPorts = [ 8686 ];
69 };
70
71 users.users = mkIf (cfg.user == "lidarr") {
72 lidarr = {
73 group = cfg.group;
74 home = "/var/lib/lidarr";
75 uid = config.ids.uids.lidarr;
76 };
77 };
78
79 users.groups = mkIf (cfg.group == "lidarr") {
80 lidarr = {
81 gid = config.ids.gids.lidarr;
82 };
83 };
84 };
85}