easytier: 2.1.1 -> 2.1.2 (#376259)
[NixPkgs.git] / nixos / modules / services / mail / mailcatcher.nix
blob9232e0f1d7e2868e7941efd88527ec2a98b7796d
2   config,
3   pkgs,
4   lib,
5   ...
6 }:
8 let
9   cfg = config.services.mailcatcher;
11   inherit (lib)
12     mkEnableOption
13     mkIf
14     mkOption
15     types
16     optionalString
17     ;
20   # interface
22   options = {
24     services.mailcatcher = {
25       enable = mkEnableOption "MailCatcher, an SMTP server and web interface to locally test outbound emails";
27       http.ip = mkOption {
28         type = types.str;
29         default = "127.0.0.1";
30         description = "The ip address of the http server.";
31       };
33       http.port = mkOption {
34         type = types.port;
35         default = 1080;
36         description = "The port address of the http server.";
37       };
39       http.path = mkOption {
40         type = with types; nullOr str;
41         default = null;
42         description = "Prefix to all HTTP paths.";
43         example = "/mailcatcher";
44       };
46       smtp.ip = mkOption {
47         type = types.str;
48         default = "127.0.0.1";
49         description = "The ip address of the smtp server.";
50       };
52       smtp.port = mkOption {
53         type = types.port;
54         default = 1025;
55         description = "The port address of the smtp server.";
56       };
57     };
59   };
61   # implementation
63   config = mkIf cfg.enable {
64     environment.systemPackages = [ pkgs.mailcatcher ];
66     systemd.services.mailcatcher = {
67       description = "MailCatcher Service";
68       after = [ "network.target" ];
69       wantedBy = [ "multi-user.target" ];
71       serviceConfig = {
72         DynamicUser = true;
73         Restart = "always";
74         ExecStart =
75           "${pkgs.mailcatcher}/bin/mailcatcher --foreground --no-quit --http-ip ${cfg.http.ip} --http-port ${toString cfg.http.port} --smtp-ip ${cfg.smtp.ip} --smtp-port ${toString cfg.smtp.port}"
76           + optionalString (cfg.http.path != null) " --http-path ${cfg.http.path}";
77         AmbientCapabilities = optionalString (
78           cfg.http.port < 1024 || cfg.smtp.port < 1024
79         ) "cap_net_bind_service";
80       };
81     };
82   };