silx: 2.1.1 -> 2.1.2 (#361612)
[NixPkgs.git] / nixos / modules / services / misc / tautulli.nix
blob467a632c72801aa22d55b5d82d892f44ce2b94af
1 { config, pkgs, lib, ... }:
2 let
3   cfg = config.services.tautulli;
4 in
6   imports = [
7     (lib.mkRenamedOptionModule [ "services" "plexpy" ] [ "services" "tautulli" ])
8   ];
10   options = {
11     services.tautulli = {
12       enable = lib.mkEnableOption "Tautulli Plex Monitor";
14       dataDir = lib.mkOption {
15         type = lib.types.str;
16         default = "/var/lib/plexpy";
17         description = "The directory where Tautulli stores its data files.";
18       };
20       configFile = lib.mkOption {
21         type = lib.types.str;
22         default = "/var/lib/plexpy/config.ini";
23         description = "The location of Tautulli's config file.";
24       };
26       port = lib.mkOption {
27         type = lib.types.port;
28         default = 8181;
29         description = "TCP port where Tautulli listens.";
30       };
32       openFirewall = lib.mkOption {
33         type = lib.types.bool;
34         default = false;
35         description = "Open ports in the firewall for Tautulli.";
36       };
38       user = lib.mkOption {
39         type = lib.types.str;
40         default = "plexpy";
41         description = "User account under which Tautulli runs.";
42       };
44       group = lib.mkOption {
45         type = lib.types.str;
46         default = "nogroup";
47         description = "Group under which Tautulli runs.";
48       };
50       package = lib.mkPackageOption pkgs "tautulli" { };
51     };
52   };
54   config = lib.mkIf cfg.enable {
55     systemd.tmpfiles.rules = [
56       "d '${cfg.dataDir}' - ${cfg.user} ${cfg.group} - -"
57     ];
59     systemd.services.tautulli = {
60       description = "Tautulli Plex Monitor";
61       after = [ "network.target" ];
62       wantedBy = [ "multi-user.target" ];
63       serviceConfig = {
64         Type = "simple";
65         User = cfg.user;
66         Group = cfg.group;
67         GuessMainPID = "false";
68         ExecStart = "${cfg.package}/bin/tautulli --datadir ${cfg.dataDir} --config ${cfg.configFile} --port ${toString cfg.port} --pidfile ${cfg.dataDir}/tautulli.pid --nolaunch";
69         Restart = "on-failure";
70       };
71     };
73     networking.firewall.allowedTCPPorts = lib.mkIf cfg.openFirewall [ cfg.port ];
75     users.users = lib.mkIf (cfg.user == "plexpy") {
76       plexpy = { group = cfg.group; uid = config.ids.uids.plexpy; };
77     };
78   };