at 24.11-pre 2.2 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 "Tautulli Plex Monitor"; 16 17 dataDir = mkOption { 18 type = types.str; 19 default = "/var/lib/plexpy"; 20 description = "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 = "The location of Tautulli's config file."; 27 }; 28 29 port = mkOption { 30 type = types.port; 31 default = 8181; 32 description = "TCP port where Tautulli listens."; 33 }; 34 35 openFirewall = mkOption { 36 type = types.bool; 37 default = false; 38 description = "Open ports in the firewall for Tautulli."; 39 }; 40 41 user = mkOption { 42 type = types.str; 43 default = "plexpy"; 44 description = "User account under which Tautulli runs."; 45 }; 46 47 group = mkOption { 48 type = types.str; 49 default = "nogroup"; 50 description = "Group under which Tautulli runs."; 51 }; 52 53 package = mkPackageOption pkgs "tautulli" { }; 54 }; 55 }; 56 57 config = mkIf cfg.enable { 58 systemd.tmpfiles.rules = [ 59 "d '${cfg.dataDir}' - ${cfg.user} ${cfg.group} - -" 60 ]; 61 62 systemd.services.tautulli = { 63 description = "Tautulli Plex Monitor"; 64 after = [ "network.target" ]; 65 wantedBy = [ "multi-user.target" ]; 66 serviceConfig = { 67 Type = "simple"; 68 User = cfg.user; 69 Group = cfg.group; 70 GuessMainPID = "false"; 71 ExecStart = "${cfg.package}/bin/tautulli --datadir ${cfg.dataDir} --config ${cfg.configFile} --port ${toString cfg.port} --pidfile ${cfg.dataDir}/tautulli.pid --nolaunch"; 72 Restart = "on-failure"; 73 }; 74 }; 75 76 networking.firewall.allowedTCPPorts = mkIf cfg.openFirewall [ cfg.port ]; 77 78 users.users = mkIf (cfg.user == "plexpy") { 79 plexpy = { group = cfg.group; uid = config.ids.uids.plexpy; }; 80 }; 81 }; 82}