vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / misc / tautulli.nix
blob6afdbd212aa85c68eda6bbbb618319bbe5523e51
1 { config, pkgs, lib, ... }:
3 with lib;
5 let
6   cfg = config.services.tautulli;
7 in
9   imports = [
10     (mkRenamedOptionModule [ "services" "plexpy" ] [ "services" "tautulli" ])
11   ];
13   options = {
14     services.tautulli = {
15       enable = mkEnableOption "Tautulli Plex Monitor";
17       dataDir = mkOption {
18         type = types.str;
19         default = "/var/lib/plexpy";
20         description = "The directory where Tautulli stores its data files.";
21       };
23       configFile = mkOption {
24         type = types.str;
25         default = "/var/lib/plexpy/config.ini";
26         description = "The location of Tautulli's config file.";
27       };
29       port = mkOption {
30         type = types.port;
31         default = 8181;
32         description = "TCP port where Tautulli listens.";
33       };
35       openFirewall = mkOption {
36         type = types.bool;
37         default = false;
38         description = "Open ports in the firewall for Tautulli.";
39       };
41       user = mkOption {
42         type = types.str;
43         default = "plexpy";
44         description = "User account under which Tautulli runs.";
45       };
47       group = mkOption {
48         type = types.str;
49         default = "nogroup";
50         description = "Group under which Tautulli runs.";
51       };
53       package = mkPackageOption pkgs "tautulli" { };
54     };
55   };
57   config = mkIf cfg.enable {
58     systemd.tmpfiles.rules = [
59       "d '${cfg.dataDir}' - ${cfg.user} ${cfg.group} - -"
60     ];
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     };
76     networking.firewall.allowedTCPPorts = mkIf cfg.openFirewall [ cfg.port ];
78     users.users = mkIf (cfg.user == "plexpy") {
79       plexpy = { group = cfg.group; uid = config.ids.uids.plexpy; };
80     };
81   };