{
  config,
  lib,
  ...
}:
with lib;
let
  inherit (config.machine) networkD;
in
mkIf (!elem "networkmanager" config.machine.conffiles) {
  networking = {
    inherit (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"
    ];
  };
}