clean configurations
[myNix.git] / lbhost / conf.mailserver.nix
blob7f4cf6d480d12d74dcfb21a327920942eaa3ef35
1 { config
2 , pkgs
3 , lib
4 , ...
5 }:
7 let
9   inherit (builtins)
10     trace
11     elemAt
12     fetchTarball
13     ;
14   inherit (lib)
15     optionalAttrs
16     splitVersion
17     version
18     mapAttrs'
19     nameValuePair
20     filterAttrs
21     ;
22   inherit (config.lib.mylib)
23     binding
24     ;
26   hostname = config.networking.hostName;
27   maybe = optionalAttrs (
28     hostname == "dot-vc2"
29   );
31   mx-webroot = pkgs.writeTextDir "index.html" ''
32     <!DOCTYPE html>
33     <html>
34     <head><title>Hello</title></head>
35     <body>Hello World!</body>
36     </html>
37   '';
39   email-accounts = binding
40     (mapAttrs'
41       (key: conf:
42         let
43           email = "${conf.name or key}@func.xyz";
44           hashedPassword = conf.hashedPassword or "!";
45           quota = "512M";
46         in
47         nameValuePair
48           (trace "serving email ${email}" email)
49           { inherit hashedPassword quota; }
50       ))
51     (filterAttrs
52       (name: conf:
53         name != "root" &&
54         (conf.name or "") != "root" &&
55         (conf.isNormalUser or (! (conf.isSystemUser or false)))
56       ))
57     (
58       (config.users.users or { }) //
59       (config.users.extraUsers or { })
60     );
64   imports = [
65     (fetchTarball
66       "https://gitlab.com/simple-nixos-mailserver/nixos-mailserver/-/archive/24128c30.tar.gz" # for nixos-23.05
67     )
68   ];
70   security.acme = maybe {
71     acceptTerms = true;
72     defaults.email = "gerald.mouse@func.xyz";
73   };
75   services.nginx = maybe {
76     virtualHosts."${config.mailserver.fqdn}" = {
77       root = "${mx-webroot}";
78     };
79   };
81   mailserver = maybe {
83     enable = trace "Enable mailserver of SNM" true;
84     fqdn = "mx.func.xyz";
85     sendingFqdn = "mx.func.xyz";
86     domains = [ "func.xyz" ];
87     dkimSigning = true;
88     dkimSelector = "mx";
90     loginAccounts = email-accounts;
92     # Use Let's Encrypt certificates. Note that this needs to set up a stripped
93     # down nginx and opens port 80.
94     certificateScheme = "acme-nginx";
95     # Enable flags of IMAP, POP3 and SMTP
96     enableImap = false;
97     enableImapSsl = false;
98     enablePop3 = true;
99     enablePop3Ssl = true;
100     enableSubmission = true;
101     enableSubmissionSsl = true;
103     # Enable the ManageSieve protocol
104     enableManageSieve = false;
105     # whether to scan inbound emails for viruses (note that this requires at least
106     # 1 Gb RAM for the server. Without virus scanning 256 MB RAM should be plenty)
107     virusScanning = false;
108   };
110   // TODO
111   services.stalwart-mail = {
112     enable = false;
113     settings = {};
114   };