zfs_unstable: 2.3.0-rc3 -> 2.3.0-rc4 (#365045)
[NixPkgs.git] / nixos / modules / services / mail / mailhog.nix
blob93400167a2093bd7a7942aacc7dc1937a9abc375
1 { config, lib, pkgs, ... }:
2 let
3   cfg = config.services.mailhog;
5   args = lib.concatStringsSep " " (
6     [
7       "-api-bind-addr :${toString cfg.apiPort}"
8       "-smtp-bind-addr :${toString cfg.smtpPort}"
9       "-ui-bind-addr :${toString cfg.uiPort}"
10       "-storage ${cfg.storage}"
11     ] ++ lib.optional (cfg.storage == "maildir")
12       "-maildir-path $STATE_DIRECTORY"
13     ++ cfg.extraArgs
14   );
18   ###### interface
20   imports = [
21     (lib.mkRemovedOptionModule [ "services" "mailhog" "user" ] "")
22   ];
24   options = {
26     services.mailhog = {
27       enable = lib.mkEnableOption "MailHog, web and API based SMTP testing";
29       storage = lib.mkOption {
30         type = lib.types.enum [ "maildir" "memory" ];
31         default = "memory";
32         description = "Store mails on disk or in memory.";
33       };
35       apiPort = lib.mkOption {
36         type = lib.types.port;
37         default = 8025;
38         description = "Port on which the API endpoint will listen.";
39       };
41       smtpPort = lib.mkOption {
42         type = lib.types.port;
43         default = 1025;
44         description = "Port on which the SMTP endpoint will listen.";
45       };
47       uiPort = lib.mkOption {
48         type = lib.types.port;
49         default = 8025;
50         description = "Port on which the HTTP UI will listen.";
51       };
53       extraArgs = lib.mkOption {
54         type = lib.types.listOf lib.types.str;
55         default = [];
56         description = "List of additional arguments to pass to the MailHog process.";
57       };
58     };
59   };
62   ###### implementation
64   config = lib.mkIf cfg.enable {
66     systemd.services.mailhog = {
67       description = "MailHog - Web and API based SMTP testing";
68       after = [ "network.target" ];
69       wantedBy = [ "multi-user.target" ];
70       serviceConfig = {
71         Type = "exec";
72         ExecStart = "${pkgs.mailhog}/bin/MailHog ${args}";
73         DynamicUser = true;
74         Restart = "on-failure";
75         StateDirectory = "mailhog";
76       };
77     };
78   };