codeblocks: fix darwin build (#369774)
[NixPkgs.git] / nixos / modules / services / monitoring / prometheus / exporters / imap-mailstat.nix
blobc5d97dc122388ea67f1f454b99fe02fb1d39f9e8
2   config,
3   lib,
4   pkgs,
5   options,
6   ...
7 }:
9 let
10   cfg = config.services.prometheus.exporters.imap-mailstat;
11   valueToString =
12     value:
13     if (builtins.typeOf value == "string") then
14       "\"${value}\""
15     else
16       (
17         if (builtins.typeOf value == "int") then
18           "${toString value}"
19         else
20           (
21             if (builtins.typeOf value == "bool") then
22               (if value then "true" else "false")
23             else
24               "XXX ${toString value}"
25           )
26       );
27   inherit (lib)
28     mkOption
29     types
30     concatStrings
31     concatStringsSep
32     attrValues
33     mapAttrs
34     optionalString
35     ;
36   createConfigFile =
37     accounts:
38     # unfortunately on toTOML yet
39     # https://github.com/NixOS/nix/issues/3929
40     pkgs.writeText "imap-mailstat-exporter.conf" ''
41       ${concatStrings (
42         attrValues (
43           mapAttrs (
44             name: config:
45             "[[Accounts]]\nname = \"${name}\"\n${
46               concatStrings (attrValues (mapAttrs (k: v: "${k} = ${valueToString v}\n") config))
47             }"
48           ) accounts
49         )
50       )}
51     '';
52   mkOpt =
53     type: description:
54     mkOption {
55       type = types.nullOr type;
56       default = null;
57       description = description;
58     };
59   accountOptions.options = {
60     mailaddress = mkOpt types.str "Your email address (at the moment used as login name)";
61     username = mkOpt types.str "If empty string mailaddress value is used";
62     password = mkOpt types.str "";
63     serveraddress = mkOpt types.str "mailserver name or address";
64     serverport = mkOpt types.int "imap port number (at the moment only tls connection is supported)";
65     starttls = mkOpt types.bool "set to true for using STARTTLS to start a TLS connection";
66   };
69   port = 8081;
70   extraOpts = {
71     oldestUnseenDate = mkOption {
72       type = types.bool;
73       default = false;
74       description = ''
75         Enable metric with timestamp of oldest unseen mail
76       '';
77     };
78     accounts = mkOption {
79       type = types.attrsOf (types.submodule accountOptions);
80       default = { };
81       description = ''
82         Accounts to monitor
83       '';
84     };
85     configurationFile = mkOption {
86       type = types.path;
87       example = "/path/to/config-file";
88       description = ''
89         File containing the configuration
90       '';
91     };
92   };
93   serviceOpts = {
94     serviceConfig = {
95       ExecStart = ''
96         ${pkgs.prometheus-imap-mailstat-exporter}/bin/imap-mailstat-exporter \
97           -config ${createConfigFile cfg.accounts} \
98           ${optionalString cfg.oldestUnseenDate "-oldestunseendate"} \
99           ${concatStringsSep " \\\n  " cfg.extraFlags}
100       '';
101     };
102   };