commit cefdf0989d9fe3e5697a3c45287e0c5fb8008fa8
parent 0ea992ab4f084e5a6729c2033a55b067ae22923e
Author: Kirill Elagin <kirelagin@gmail.com>
Date: Sun, 10 Mar 2019 02:43:38 +0100
parent 0ea992ab4f084e5a6729c2033a55b067ae22923e
Author: Kirill Elagin <kirelagin@gmail.com>
Date: Sun, 10 Mar 2019 02:43:38 +0100
records: Add MX
5 files changed, 47 insertions(+), 0 deletions(-)
diff --git a/README.md b/README.md @@ -39,6 +39,8 @@ with dns.combinators; { CAA = letsEncrypt "admin@example.com"; # Common template combinators included + MX = mx.google; # G Suite mail servers; + TXT = [ (with spf; strict [google]) # SPF: only allow gmail ];
diff --git a/dns/combinators.nix b/dns/combinators.nix @@ -40,6 +40,18 @@ delegateTo = nameservers: { NS = map ns nameservers; }; +mx = rec { + mx = preference: exchange: { inherit preference exchange; }; + + google = map (ttl 3600) [ + (mx 1 "aspmx.l.google.com.") + (mx 5 "alt1.aspmx.l.google.com.") + (mx 5 "alt2.aspmx.l.google.com.") + (mx 10 "alt3.aspmx.l.google.com.") + (mx 10 "alt4.aspmx.l.google.com.") + ]; +}; + letsEncrypt = email: [ { issuerCritical = false; tag = "issue";
diff --git a/dns/types/records/MX.nix b/dns/types/records/MX.nix @@ -0,0 +1,30 @@ +# +# © 2019 Kirill Elagin <kirelagin@gmail.com> +# +# SPDX-License-Identifier: MIT +# + +{ pkgs }: + +let + inherit (pkgs.lib) mkOption types; + +in + +{ + rtype = "MX"; + options = { + preference = mkOption { + type = types.ints.u16; + example = 10; + description = "The preference given to this RR among others at the same owner. Lower values are preferred"; + }; + exchange = mkOption { + type = types.str; + example = "smtp.example.com."; + description = "A <domain-name> which specifies a host willing to act as a mail exchange for the owner name"; + }; + }; + dataToString = {preference, exchange, ...}: + "${toString preference} ${exchange}"; +}
diff --git a/dns/types/records/default.nix b/dns/types/records/default.nix @@ -14,6 +14,7 @@ let "AAAA" "CAA" "CNAME" + "MX" "NS" "SOA" "TXT"
diff --git a/example.nix b/example.nix @@ -29,6 +29,8 @@ let (aaaa "4321:0:1:2:3:4:567:89ab") ]; + MX = mx.google; + TXT = [ (with spf; strict ["a:mail.example.com" google]) ];