main
 1{
 2  den.hosts.cyrene = {
 3    address = {
 4      ipv4.secret = {
 5        name = "host-ipv4-cyrene";
 6        file = ./ipv4.age;
 7      };
 8      ipv6.secret = {
 9        name = "host-ipv6-cyrene";
10        file = ./ipv6.age;
11      };
12      ipv4.tailscale = "100.65.34.97";
13      ipv6.tailscale = "fd7a:115c:a1e0:1bef:f9f:bba0:707b:d238";
14    };
15  };
16
17  den.aspects.cyrene = {
18    nixos = {
19      host,
20      config,
21      ...
22    }: {
23      networking = {
24        useNetworkd = true;
25        useDHCP = false;
26        usePredictableInterfaceNames = false; # Useless in VPS
27      };
28
29      systemd.network.networks = {
30        "40-eth0" = {
31          matchConfig.Name = "eth0";
32          linkConfig.RequiredForOnline = "routable";
33        };
34      };
35
36      environment.etc."systemd/network/40-eth0.network.d/99-address-n-routes.conf" = {
37        source = config.vaultix.templates.networkd-secrets.path;
38      };
39
40      vaultix.templates.networkd-secrets = {
41        content = ''
42          [Network]
43          Address=${config.vaultix.placeholder.${host.address.ipv4.secret.name}}/22
44          Address=${config.vaultix.placeholder.${host.address.ipv6.secret.name}}/64
45        '';
46        owner = "systemd-network";
47        group = "systemd-network";
48        mode = "0440";
49      };
50      vaultix.secrets.${host.address.ipv4.secret.name}.file = host.address.ipv4.secret.file;
51      vaultix.secrets.${host.address.ipv6.secret.name}.file = host.address.ipv6.secret.file;
52    };
53  };
54}