mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-11-10 17:54:53 +01:00
This adds automatic network configuration based on detected hardware: - networking/default.nix: Auto-configure DHCP on physical interfaces Detects Ethernet, WLAN, USB-Link, and generic network interfaces, automatically enabling DHCP on each. Excludes loopback and mainframe interfaces. Sets networking.useDHCP and per-interface useDHCP. - networking/intel.nix: Intel WiFi firmware detection Auto-enables firmware for Intel 2200BG and 3945ABG wireless cards based on PCI vendor/device IDs. - networking/initrd.nix: Network drivers in initrd Loads network controller drivers when boot.initrd.network.enable is set, enabling network boot scenarios. Builds on PR #454847 (boot & storage). Part of incremental upstreaming from nixos-facter-modules.
70 lines
2.2 KiB
Nix
70 lines
2.2 KiB
Nix
{ config, lib, ... }:
|
|
let
|
|
# Filter network interfaces from facter report to only those suitable for DHCP
|
|
physicalInterfaces = lib.filter (
|
|
iface:
|
|
# Only include network interfaces suitable for DHCP:
|
|
# - Ethernet (most common)
|
|
# - WLAN (WiFi)
|
|
# - USB-Link (USB network adapters, tethering)
|
|
# - Network Interface (generic/unknown type)
|
|
# This implicitly excludes: Loopback, mainframe-specific interfaces (CTC, IUCV, HSI, ESCON)
|
|
# See: https://github.com/numtide/hwinfo/blob/ea251a74b88dcd53aebdd381194ab43d10fbbd79/src/ids/src/class#L817-L874
|
|
let
|
|
validTypes = [
|
|
"Ethernet"
|
|
"WLAN"
|
|
"USB-Link"
|
|
"Network Interface"
|
|
];
|
|
in
|
|
lib.elem (iface.sub_class.name or "") validTypes
|
|
) (config.hardware.facter.report.hardware.network_interface or [ ]);
|
|
|
|
# Extract interface names from unix_device_names
|
|
detectedInterfaceNames = lib.concatMap (iface: iface.unix_device_names or [ ]) physicalInterfaces;
|
|
|
|
# Get the interface names from the configuration (which defaults to detectedInterfaceNames)
|
|
interfaceNames = config.hardware.facter.detected.dhcp.interfaces;
|
|
|
|
# Generate per-interface DHCP config
|
|
perInterfaceConfig = lib.listToAttrs (
|
|
lib.map (name: {
|
|
inherit name;
|
|
value = {
|
|
useDHCP = lib.mkDefault true;
|
|
};
|
|
}) interfaceNames
|
|
);
|
|
in
|
|
{
|
|
imports = [
|
|
./initrd.nix
|
|
./intel.nix
|
|
];
|
|
|
|
options.hardware.facter.detected.dhcp = {
|
|
enable = lib.mkEnableOption "Facter dhcp module" // {
|
|
default = builtins.length config.hardware.facter.report.hardware.network_interface or [ ] > 0;
|
|
defaultText = "hardware dependent";
|
|
};
|
|
|
|
interfaces = lib.mkOption {
|
|
type = lib.types.listOf lib.types.str;
|
|
default = detectedInterfaceNames;
|
|
defaultText = lib.literalExpression "automatically detected from facter report";
|
|
description = "List of network interface names to configure with DHCP. Defaults to auto-detected physical interfaces.";
|
|
example = [
|
|
"eth0"
|
|
"wlan0"
|
|
];
|
|
};
|
|
};
|
|
config = lib.mkIf config.hardware.facter.detected.dhcp.enable {
|
|
networking.useDHCP = lib.mkDefault true;
|
|
|
|
# Per-interface DHCP configuration
|
|
networking.interfaces = perInterfaceConfig;
|
|
};
|
|
}
|