{ config, lib, ... }: with lib; let networkD = config.machine.networkD; in { networking = { hostName = config.machine.hostName; useNetworkd = networkD.enable; useDHCP = !networkD.enable; dhcpcd.enable = !networkD.enable; }; # Based on # https://github.com/NixOS/nixpkgs/issues/10001#issuecomment-905532069 systemd.network = mkIf networkD.enable { enable = true; networks = let networkConfig = { DHCP = "yes"; DNSSEC = "yes"; DNSOverTLS = "yes"; DNS = ["1.1.1.1" "1.0.0.1"]; }; in { "40-wired" = { enable = true; name = "en*"; dhcpV4Config.RouteMetric = 2048; inherit networkConfig; }; "40-wireless" = { enable = true; name = "wl*"; dhcpV4Config.RouteMetric = 1024; inherit networkConfig; }; "50-vlan" = { enable = true; matchConfig = { Name = "br0"; }; networkConfig = { DNS = "10.0.0.1"; Address = "10.0.0.100/16"; # DHCPServer = true; # IPMasquerade = true; }; # dhcpServerConfig = { # ServerAddress = "172.16.9.1/12"; # PoolOffset = 100; # EmitDNS = false; # }; }; }; }; # Wait for any interface to become available, not for all systemd.services."systemd-networkd-wait-online" = { enable = mkForce networkD.waitOnline; serviceConfig.ExecStart = [ "" "${config.systemd.package}/lib/systemd/systemd-networkd-wait-online --any" ]; }; }