python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / nixos / modules / services / misc / tautulli.nix
blobb29e9dc0c8d5f99af34ef2a2d4256d71cbd28297
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 (lib.mdDoc "Tautulli Plex Monitor");
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       };
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       };
29       port = mkOption {
30         type = types.port;
31         default = 8181;
32         description = lib.mdDoc "TCP port where Tautulli listens.";
33       };
35       openFirewall = mkOption {
36         type = types.bool;
37         default = false;
38         description = lib.mdDoc "Open ports in the firewall for Tautulli.";
39       };
41       user = mkOption {
42         type = types.str;
43         default = "plexpy";
44         description = lib.mdDoc "User account under which Tautulli runs.";
45       };
47       group = mkOption {
48         type = types.str;
49         default = "nogroup";
50         description = lib.mdDoc "Group under which Tautulli runs.";
51       };
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   };
64   config = mkIf cfg.enable {
65     systemd.tmpfiles.rules = [
66       "d '${cfg.dataDir}' - ${cfg.user} ${cfg.group} - -"
67     ];
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     };
83     networking.firewall.allowedTCPPorts = mkIf cfg.openFirewall [ cfg.port ];
85     users.users = mkIf (cfg.user == "plexpy") {
86       plexpy = { group = cfg.group; uid = config.ids.uids.plexpy; };
87     };
88   };