system-manager-wakasu
 1{ dns, globals, ... }:
 2with dns.lib.combinators;
 3let
 4  dnsHelpers = import ../../../../lib/dns-helpers.nix { inherit globals; };
 5  inherit (dnsHelpers) getMachineIP mkServiceRecords;
 6
 7  # Only include machines that should be in sbr.pm zone
 8  machineList = [
 9    "shikoku"
10    "sakhalin"
11    "aix"
12    "rhea"
13    "aion"
14    "demeter"
15    "athena"
16    "nagoya"
17    "kerkouane"
18    "aomi"
19    "kyushu"
20    "wakasu"
21  ];
22
23  mkMachineRecords = builtins.listToAttrs (
24    map (machineName: {
25      name = machineName;
26      value = {
27        A = [ (getMachineIP globals.machines.${machineName}) ];
28        subdomains."*".A = [ (getMachineIP globals.machines.${machineName}) ];
29      };
30    }) machineList
31  );
32in
33{
34  SOA = {
35    nameServer = "ns1.sbr.pm.";
36    adminEmail = "admin.sbr.pm";
37    serial = 3;
38    refresh = 604800;
39    retry = 86400;
40    expire = 2419200;
41    minimum = 604800;
42  };
43
44  NS = [
45    "ns1.sbr.pm."
46    "ns2.sbr.pm."
47  ];
48
49  # Root domain points to public endpoint
50  A = [ "167.99.17.238" ];
51
52  # Email (Gandi)
53  MX = [
54    {
55      preference = 10;
56      exchange = "spool.mail.gandi.net.";
57    }
58    {
59      preference = 50;
60      exchange = "fb.mail.gandi.net.";
61    }
62  ];
63
64  subdomains = {
65    # Name servers (demeter and athena)
66    ns1.A = [ (getMachineIP globals.machines.demeter) ];
67    ns2.A = [ (getMachineIP globals.machines.athena) ];
68
69    # Wildcard for public endpoint
70    "*".A = [
71      {
72        address = "167.99.17.238";
73        ttl = 10800;
74      }
75    ];
76
77    # Email CNAMEs (Gandi mail service)
78    imap.CNAME = [ "access.mail.gandi.net." ];
79    pop.CNAME = [ "access.mail.gandi.net." ];
80    smtp.CNAME = [ "relay.mail.gandi.net." ];
81    webmail.CNAME = [ "webmail.gandi.net." ];
82
83    # Shortcuts
84    p.A = [ "167.99.17.238" ]; # public endpoint shortcut
85    www = {
86      A = [ "167.99.17.238" ];
87      subdomains."*".A = [ "167.99.17.238" ];
88    };
89  }
90  // mkMachineRecords
91  // mkServiceRecords globals.services;
92}