flake-update-20260201
 1{ dns, globals, ... }:
 2with dns.lib.combinators;
 3let
 4  # Machines with home network IPs that should have wildcards
 5  machinesWithWildcard = [
 6    "okinawa"
 7    "sakhalin"
 8    "aomi"
 9    "rhea"
10    "aion"
11    "shikoku"
12    "athena"
13    "demeter"
14    "nagoya"
15  ];
16
17  mkHomeMachineRecords = builtins.listToAttrs (
18    map (machineName: {
19      name = machineName;
20      value =
21        let
22          homeIP = globals.machines.${machineName}.net.ips;
23          ip = if builtins.isList homeIP then builtins.head homeIP else homeIP;
24        in
25        {
26          A = [ ip ];
27          subdomains."*".A = [ ip ];
28        };
29    }) machinesWithWildcard
30  );
31in
32{
33  SOA = {
34    nameServer = "ns1.home.";
35    adminEmail = "admin.home";
36    serial = 3;
37    refresh = 604800;
38    retry = 86400;
39    expire = 2419200;
40    minimum = 604800;
41  };
42
43  NS = [
44    "ns1.home."
45    "ns2.home."
46  ];
47
48  subdomains = {
49    # Name servers
50    ns1.A = [ (builtins.head globals.machines.demeter.net.ips) ];
51    ns2.A = [ (builtins.head globals.machines.athena.net.ips) ];
52
53    # Cache wildcard
54    cache.subdomains."*".A = [ (builtins.head globals.machines.sakhalin.net.ips) ];
55
56    # Machines without wildcards
57    hokkaido.A = [ (builtins.head globals.machines.hokkaido.net.ips) ];
58    synodine.A = [ (builtins.head globals.machines.synodine.net.ips) ];
59
60    # Hardcoded entries not in globals or incomplete in globals
61    wakasu = {
62      A = [ "192.168.1.77" ];
63      subdomains."*".A = [ "192.168.1.77" ];
64    };
65    honshu.A = [ "192.168.1.17" ];
66    remakrable.A = [ "192.168.1.57" ];
67    hass.A = [ "192.168.1.181" ];
68
69    # OpenShift SNO lab
70    lab = {
71      subdomains = {
72        # OCP4 SNO cluster
73        ocp4 = {
74          subdomains = {
75            # Point to aomi (host) which will forward to the VM
76            api.A = [ "192.168.1.23" ];
77            api-int.A = [ "192.168.1.23" ];
78            apps.subdomains."*".A = [ "192.168.1.23" ];
79            # Direct VM access for internal use
80            master-sno.A = [ "192.168.100.7" ];
81          };
82        };
83      };
84    };
85  }
86  // mkHomeMachineRecords;
87}