at 24.11-pre 1.8 kB view raw
1{ config, pkgs, lib, ... }: 2 3with lib; 4 5let 6 cfg = config.services.sonarr; 7in 8{ 9 options = { 10 services.sonarr = { 11 enable = mkEnableOption "Sonarr"; 12 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 }; 18 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 }; 26 27 user = mkOption { 28 type = types.str; 29 default = "sonarr"; 30 description = "User account under which Sonaar runs."; 31 }; 32 33 group = mkOption { 34 type = types.str; 35 default = "sonarr"; 36 description = "Group under which Sonaar runs."; 37 }; 38 39 package = mkPackageOption pkgs "sonarr" { }; 40 }; 41 }; 42 43 config = mkIf cfg.enable { 44 systemd.tmpfiles.rules = [ 45 "d '${cfg.dataDir}' 0700 ${cfg.user} ${cfg.group} - -" 46 ]; 47 48 systemd.services.sonarr = { 49 description = "Sonarr"; 50 after = [ "network.target" ]; 51 wantedBy = [ "multi-user.target" ]; 52 53 serviceConfig = { 54 Type = "simple"; 55 User = cfg.user; 56 Group = cfg.group; 57 ExecStart = "${cfg.package}/bin/NzbDrone -nobrowser -data='${cfg.dataDir}'"; 58 Restart = "on-failure"; 59 }; 60 }; 61 62 networking.firewall = mkIf cfg.openFirewall { 63 allowedTCPPorts = [ 8989 ]; 64 }; 65 66 users.users = mkIf (cfg.user == "sonarr") { 67 sonarr = { 68 group = cfg.group; 69 home = cfg.dataDir; 70 uid = config.ids.uids.sonarr; 71 }; 72 }; 73 74 users.groups = mkIf (cfg.group == "sonarr") { 75 sonarr.gid = config.ids.gids.sonarr; 76 }; 77 }; 78}