at 22.05-pre 2.1 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.int; 31 default = 8181; 32 description = "TCP port where Tautulli listens."; 33 }; 34 35 user = mkOption { 36 type = types.str; 37 default = "plexpy"; 38 description = "User account under which Tautulli runs."; 39 }; 40 41 group = mkOption { 42 type = types.str; 43 default = "nogroup"; 44 description = "Group under which Tautulli runs."; 45 }; 46 47 package = mkOption { 48 type = types.package; 49 default = pkgs.tautulli; 50 defaultText = literalExpression "pkgs.tautulli"; 51 description = '' 52 The Tautulli package to use. 53 ''; 54 }; 55 }; 56 }; 57 58 config = mkIf cfg.enable { 59 systemd.tmpfiles.rules = [ 60 "d '${cfg.dataDir}' - ${cfg.user} ${cfg.group} - -" 61 ]; 62 63 systemd.services.tautulli = { 64 description = "Tautulli Plex Monitor"; 65 after = [ "network.target" ]; 66 wantedBy = [ "multi-user.target" ]; 67 serviceConfig = { 68 Type = "simple"; 69 User = cfg.user; 70 Group = cfg.group; 71 GuessMainPID = "false"; 72 ExecStart = "${cfg.package}/bin/tautulli --datadir ${cfg.dataDir} --config ${cfg.configFile} --port ${toString cfg.port} --pidfile ${cfg.dataDir}/tautulli.pid --nolaunch"; 73 Restart = "on-failure"; 74 }; 75 }; 76 77 users.users = mkIf (cfg.user == "plexpy") { 78 plexpy = { group = cfg.group; uid = config.ids.uids.plexpy; }; 79 }; 80 }; 81}