at master 2.3 kB view raw
1{ 2 config, 3 pkgs, 4 lib, 5 ... 6}: 7let 8 cfg = config.services.readarr; 9 servarr = import ./settings-options.nix { inherit lib pkgs; }; 10in 11{ 12 options = { 13 services.readarr = { 14 enable = lib.mkEnableOption "Readarr, a Usenet/BitTorrent ebook downloader"; 15 16 dataDir = lib.mkOption { 17 type = lib.types.str; 18 default = "/var/lib/readarr/"; 19 description = "The directory where Readarr stores its data files."; 20 }; 21 22 package = lib.mkPackageOption pkgs "readarr" { }; 23 24 openFirewall = lib.mkOption { 25 type = lib.types.bool; 26 default = false; 27 description = '' 28 Open ports in the firewall for Readarr 29 ''; 30 }; 31 32 settings = servarr.mkServarrSettingsOptions "readarr" 8787; 33 34 environmentFiles = servarr.mkServarrEnvironmentFiles "readarr"; 35 36 user = lib.mkOption { 37 type = lib.types.str; 38 default = "readarr"; 39 description = '' 40 User account under which Readarr runs. 41 ''; 42 }; 43 44 group = lib.mkOption { 45 type = lib.types.str; 46 default = "readarr"; 47 description = '' 48 Group under which Readarr runs. 49 ''; 50 }; 51 }; 52 }; 53 54 config = lib.mkIf cfg.enable { 55 systemd.tmpfiles.settings."10-readarr".${cfg.dataDir}.d = { 56 inherit (cfg) user group; 57 mode = "0700"; 58 }; 59 60 systemd.services.readarr = { 61 description = "Readarr"; 62 after = [ "network.target" ]; 63 wantedBy = [ "multi-user.target" ]; 64 environment = servarr.mkServarrSettingsEnvVars "READARR" 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/Readarr -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 == "readarr") { 81 readarr = { 82 description = "Readarr service"; 83 home = cfg.dataDir; 84 group = cfg.group; 85 isSystemUser = true; 86 }; 87 }; 88 89 users.groups = lib.mkIf (cfg.group == "readarr") { 90 readarr = { }; 91 }; 92 }; 93}