diff --git a/config/networking.nix b/config/networking.nix index bcdb93a..bb009b7 100644 --- a/config/networking.nix +++ b/config/networking.nix @@ -1,7 +1,42 @@ -{ config, ... }: +{ config, lib, ... }: + +with lib; { networking = { hostName = config.machine.hostName; + useNetworkd = config.machine.useNetworkd; + useDHCP = !config.machine.useNetworkd; + dhcpcd.enable = !config.machine.useNetworkd; }; + # Based on + # https://github.com/NixOS/nixpkgs/issues/10001#issuecomment-905532069 + systemd.network = mkIf config.machine.useNetworkd { + 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; + }; + }; + }; + # Wait for any interface to become available, not for all + systemd.services."systemd-networkd-wait-online".serviceConfig.ExecStart = [ + "" "${config.systemd.package}/lib/systemd/systemd-networkd-wait-online --any" + ]; } diff --git a/options/machine.nix b/options/machine.nix index 5f8087f..4cce148 100644 --- a/options/machine.nix +++ b/options/machine.nix @@ -59,6 +59,13 @@ in { The Machines HostName ''; }; + useNetworkd = mkOption { + type = types.bool; + default = false; + description = '' + Disables dhcpcd and enables networkd. + ''; + }; binaryCaches = mkOption { type = types.listOf types.str; default = [];