# Hetzner static networking — generated by nixos-infect at provision time.
#
# This file is server-specific: the IP, gateway, and MAC address are tied to a
# particular Hetzner instance. When provisioning a new server:
#   1. After `terraform apply` + nixos-infect completes, run:
#        ssh root@<new-ip> 'cat /etc/nixos/networking.nix'
#   2. Replace this file's contents with the output and commit.
#   3. Then: `nixos-rebuild switch --flake .#cc-ci-hetzner --target-host root@<new-ip>`
#
# Current instance: 91.98.47.73 (fsn1, Hetzner server 134485294, provisioned 2026-05-31).
{ lib, ... }: {
  networking = {
    nameservers = [
      "185.12.64.1"
      "185.12.64.2"
    ];
    # The interface MUST be explicit here. Since NixOS 25.05 the scripted-networking
    # module installs the default route from the gateway interface's
    # network-addresses-<iface>.service, and it finds that interface either by
    # `defaultGateway.interface` or by the gateway address being inside one of the
    # interface's subnets. With Hetzner's off-subnet point-to-point gateway
    # (91.98.47.73/32 on eth0, gateway 172.31.1.1) neither matched when this was a
    # bare string, so NO default route was installed and the 26.05 rebuild on
    # 2026-08-03 took the host off the network (recovered via rescue mode).
    defaultGateway = {
      address = "172.31.1.1";
      interface = "eth0";
    };
    # No IPv6 on this Hetzner instance (link-local only) — nixos-infect emitted an empty
    # defaultGateway6/ipv6.route which made network-addresses-eth0.service fail
    # ("ip route add /128" with no prefix). v4-only box, so no IPv6 gateway/route declared.
    dhcpcd.enable = false;
    usePredictableInterfaceNames = lib.mkForce false;
    interfaces = {
      eth0 = {
        ipv4.addresses = [
          { address = "91.98.47.73"; prefixLength = 32; }
        ];
        ipv4.routes = [{ address = "172.31.1.1"; prefixLength = 32; }];
      };
    };
  };
  services.udev.extraRules = ''
    ATTR{address}=="92:00:08:04:15:2e", NAME="eth0"
  '';
}
