at 23.11-pre 2.4 kB view raw
1{ config, pkgs, lib, ... }: 2 3with lib; 4 5let 6 cfg = config.services.tautulli; 7in 8{ 9 imports = [ 10 (mkRenamedOptionModule [ "services" "plexpy" ] [ "services" "tautulli" ]) 11 ]; 12 13 options = { 14 services.tautulli = { 15 enable = mkEnableOption (lib.mdDoc "Tautulli Plex Monitor"); 16 17 dataDir = mkOption { 18 type = types.str; 19 default = "/var/lib/plexpy"; 20 description = lib.mdDoc "The directory where Tautulli stores its data files."; 21 }; 22 23 configFile = mkOption { 24 type = types.str; 25 default = "/var/lib/plexpy/config.ini"; 26 description = lib.mdDoc "The location of Tautulli's config file."; 27 }; 28 29 port = mkOption { 30 type = types.port; 31 default = 8181; 32 description = lib.mdDoc "TCP port where Tautulli listens."; 33 }; 34 35 openFirewall = mkOption { 36 type = types.bool; 37 default = false; 38 description = lib.mdDoc "Open ports in the firewall for Tautulli."; 39 }; 40 41 user = mkOption { 42 type = types.str; 43 default = "plexpy"; 44 description = lib.mdDoc "User account under which Tautulli runs."; 45 }; 46 47 group = mkOption { 48 type = types.str; 49 default = "nogroup"; 50 description = lib.mdDoc "Group under which Tautulli runs."; 51 }; 52 53 package = mkOption { 54 type = types.package; 55 default = pkgs.tautulli; 56 defaultText = literalExpression "pkgs.tautulli"; 57 description = lib.mdDoc '' 58 The Tautulli package to use. 59 ''; 60 }; 61 }; 62 }; 63 64 config = mkIf cfg.enable { 65 systemd.tmpfiles.rules = [ 66 "d '${cfg.dataDir}' - ${cfg.user} ${cfg.group} - -" 67 ]; 68 69 systemd.services.tautulli = { 70 description = "Tautulli Plex Monitor"; 71 after = [ "network.target" ]; 72 wantedBy = [ "multi-user.target" ]; 73 serviceConfig = { 74 Type = "simple"; 75 User = cfg.user; 76 Group = cfg.group; 77 GuessMainPID = "false"; 78 ExecStart = "${cfg.package}/bin/tautulli --datadir ${cfg.dataDir} --config ${cfg.configFile} --port ${toString cfg.port} --pidfile ${cfg.dataDir}/tautulli.pid --nolaunch"; 79 Restart = "on-failure"; 80 }; 81 }; 82 83 networking.firewall.allowedTCPPorts = mkIf cfg.openFirewall [ cfg.port ]; 84 85 users.users = mkIf (cfg.user == "plexpy") { 86 plexpy = { group = cfg.group; uid = config.ids.uids.plexpy; }; 87 }; 88 }; 89}