From b8d04f5831ee0b91a6ff8f4fc316f325e794c93e Mon Sep 17 00:00:00 2001 From: DavHau Date: Thu, 12 Dec 2024 10:13:20 +0700 Subject: [PATCH 1/4] all-hardare: remove obsolete import of zydas-zd1211.nix This is already included via the above`hardware.enableRedistributableFirmware = true` --- nixos/modules/profiles/all-hardware.nix | 4 ---- 1 file changed, 4 deletions(-) diff --git a/nixos/modules/profiles/all-hardware.nix b/nixos/modules/profiles/all-hardware.nix index 970b76cfbfdf..a5f76b80323d 100644 --- a/nixos/modules/profiles/all-hardware.nix +++ b/nixos/modules/profiles/all-hardware.nix @@ -110,8 +110,4 @@ in # Include lots of firmware. hardware.enableRedistributableFirmware = true; - - imports = - [ ../hardware/network/zydas-zd1211.nix ]; - } From 45628b14329f77c0f471681f9500d51d919b0b36 Mon Sep 17 00:00:00 2001 From: DavHau Date: Thu, 12 Dec 2024 10:31:33 +0700 Subject: [PATCH 2/4] all-hardware: move to hardware/all-hardware.nix --- nixos/modules/{profiles => hardware}/all-hardware.nix | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename nixos/modules/{profiles => hardware}/all-hardware.nix (100%) diff --git a/nixos/modules/profiles/all-hardware.nix b/nixos/modules/hardware/all-hardware.nix similarity index 100% rename from nixos/modules/profiles/all-hardware.nix rename to nixos/modules/hardware/all-hardware.nix From 08783a39b0fcf8d257fb2c3a708f29d5e3fad04f Mon Sep 17 00:00:00 2001 From: DavHau Date: Thu, 12 Dec 2024 11:12:41 +0700 Subject: [PATCH 3/4] nixos: add option `hardware.enableAllHardware` This allows users to simply enable support for all hardware by enabling the option `hardware.enableAllHardware`, instead of having to import `modules/profiles/all-hardware.nix`. This is better, as the enableAllHardware option will be discoverable via search.nixos.org, while the `all-hardware.nix` is hidden inside nixpkgs and hard to discover. Backward compatibility is provided by replacing the old `profiles/all-hardware.nix` with a file that sets the `enableAllHardware` option to true. --- nixos/modules/hardware/all-hardware.nix | 165 +++++++++--------- .../installer/cd-dvd/installation-cd-base.nix | 3 +- .../installer/netboot/netboot-base.nix | 3 +- nixos/modules/installer/sd-card/sd-image.nix | 3 +- nixos/modules/module-list.nix | 1 + nixos/modules/profiles/all-hardware.nix | 5 + 6 files changed, 98 insertions(+), 82 deletions(-) create mode 100644 nixos/modules/profiles/all-hardware.nix diff --git a/nixos/modules/hardware/all-hardware.nix b/nixos/modules/hardware/all-hardware.nix index a5f76b80323d..ea3d5fc1b3e2 100644 --- a/nixos/modules/hardware/all-hardware.nix +++ b/nixos/modules/hardware/all-hardware.nix @@ -3,111 +3,118 @@ # enabled in the initrd. Its primary use is in the NixOS installation # CDs. -{ pkgs, lib,... }: +{ config, lib, pkgs, ... }: let platform = pkgs.stdenv.hostPlatform; in { - # The initrd has to contain any module that might be necessary for - # supporting the most important parts of HW like drives. - boot.initrd.availableKernelModules = - [ # SATA/PATA support. - "ahci" + options = { + hardware.enableAllHardware = lib.mkEnableOption "Enable support for most hardware"; + }; - "ata_piix" + config = lib.mkIf config.hardware.enableAllHardware { - "sata_inic162x" "sata_nv" "sata_promise" "sata_qstor" - "sata_sil" "sata_sil24" "sata_sis" "sata_svw" "sata_sx4" - "sata_uli" "sata_via" "sata_vsc" + # The initrd has to contain any module that might be necessary for + # supporting the most important parts of HW like drives. + boot.initrd.availableKernelModules = + [ # SATA/PATA support. + "ahci" - "pata_ali" "pata_amd" "pata_artop" "pata_atiixp" "pata_efar" - "pata_hpt366" "pata_hpt37x" "pata_hpt3x2n" "pata_hpt3x3" - "pata_it8213" "pata_it821x" "pata_jmicron" "pata_marvell" - "pata_mpiix" "pata_netcell" "pata_ns87410" "pata_oldpiix" - "pata_pcmcia" "pata_pdc2027x" "pata_qdi" "pata_rz1000" - "pata_serverworks" "pata_sil680" "pata_sis" - "pata_sl82c105" "pata_triflex" "pata_via" - "pata_winbond" + "ata_piix" - # SCSI support (incomplete). - "3w-9xxx" "3w-xxxx" "aic79xx" "aic7xxx" "arcmsr" "hpsa" + "sata_inic162x" "sata_nv" "sata_promise" "sata_qstor" + "sata_sil" "sata_sil24" "sata_sis" "sata_svw" "sata_sx4" + "sata_uli" "sata_via" "sata_vsc" - # USB support, especially for booting from USB CD-ROM - # drives. - "uas" + "pata_ali" "pata_amd" "pata_artop" "pata_atiixp" "pata_efar" + "pata_hpt366" "pata_hpt37x" "pata_hpt3x2n" "pata_hpt3x3" + "pata_it8213" "pata_it821x" "pata_jmicron" "pata_marvell" + "pata_mpiix" "pata_netcell" "pata_ns87410" "pata_oldpiix" + "pata_pcmcia" "pata_pdc2027x" "pata_qdi" "pata_rz1000" + "pata_serverworks" "pata_sil680" "pata_sis" + "pata_sl82c105" "pata_triflex" "pata_via" + "pata_winbond" - # SD cards. - "sdhci_pci" + # SCSI support (incomplete). + "3w-9xxx" "3w-xxxx" "aic79xx" "aic7xxx" "arcmsr" "hpsa" - # NVMe drives - "nvme" + # USB support, especially for booting from USB CD-ROM + # drives. + "uas" - # Firewire support. Not tested. - "ohci1394" "sbp2" + # SD cards. + "sdhci_pci" - # Virtio (QEMU, KVM etc.) support. - "virtio_net" "virtio_pci" "virtio_mmio" "virtio_blk" "virtio_scsi" "virtio_balloon" "virtio_console" + # NVMe drives + "nvme" - # VMware support. - "mptspi" "vmxnet3" "vsock" - ] ++ lib.optional platform.isx86 "vmw_balloon" - ++ lib.optionals (pkgs.stdenv.hostPlatform.isi686 || pkgs.stdenv.hostPlatform.isx86_64) [ - "vmw_vmci" "vmwgfx" "vmw_vsock_vmci_transport" + # Firewire support. Not tested. + "ohci1394" "sbp2" - # Hyper-V support. - "hv_storvsc" - ] ++ lib.optionals pkgs.stdenv.hostPlatform.isAarch [ - # Allwinner support - # Required for early KMS - "sun4i-drm" - "sun8i-mixer" # Audio, but required for kms + # Virtio (QEMU, KVM etc.) support. + "virtio_net" "virtio_pci" "virtio_mmio" "virtio_blk" "virtio_scsi" "virtio_balloon" "virtio_console" - # PWM for the backlight - "pwm-sun4i" + # VMware support. + "mptspi" "vmxnet3" "vsock" + ] ++ lib.optional platform.isx86 "vmw_balloon" + ++ lib.optionals (pkgs.stdenv.hostPlatform.isi686 || pkgs.stdenv.hostPlatform.isx86_64) [ + "vmw_vmci" "vmwgfx" "vmw_vsock_vmci_transport" - # Broadcom - "vc4" - ] ++ lib.optionals pkgs.stdenv.hostPlatform.isAarch64 [ - # Most of the following falls into two categories: - # - early KMS / early display - # - early storage (e.g. USB) support + # Hyper-V support. + "hv_storvsc" + ] ++ lib.optionals pkgs.stdenv.hostPlatform.isAarch [ + # Allwinner support + # Required for early KMS + "sun4i-drm" + "sun8i-mixer" # Audio, but required for kms - # Broadcom + # PWM for the backlight + "pwm-sun4i" - "pcie-brcmstb" + # Broadcom + "vc4" + ] ++ lib.optionals pkgs.stdenv.hostPlatform.isAarch64 [ + # Most of the following falls into two categories: + # - early KMS / early display + # - early storage (e.g. USB) support - # Rockchip - "dw-hdmi" - "dw-mipi-dsi" - "rockchipdrm" - "rockchip-rga" - "phy-rockchip-pcie" - "pcie-rockchip-host" + # Broadcom - # Misc. uncategorized hardware + "pcie-brcmstb" - # Used for some platform's integrated displays - "panel-simple" - "pwm-bl" + # Rockchip + "dw-hdmi" + "dw-mipi-dsi" + "rockchipdrm" + "rockchip-rga" + "phy-rockchip-pcie" + "pcie-rockchip-host" - # Power supply drivers, some platforms need them for USB - "axp20x-ac-power" - "axp20x-battery" - "pinctrl-axp209" - "mp8859" + # Misc. uncategorized hardware - # USB drivers - "xhci-pci-renesas" + # Used for some platform's integrated displays + "panel-simple" + "pwm-bl" - # Reset controllers - "reset-raspberrypi" # Triggers USB chip firmware load. + # Power supply drivers, some platforms need them for USB + "axp20x-ac-power" + "axp20x-battery" + "pinctrl-axp209" + "mp8859" - # Misc "weak" dependencies - "analogix-dp" - "analogix-anx6345" # For DP or eDP (e.g. integrated display) - ]; + # USB drivers + "xhci-pci-renesas" - # Include lots of firmware. - hardware.enableRedistributableFirmware = true; + # Reset controllers + "reset-raspberrypi" # Triggers USB chip firmware load. + + # Misc "weak" dependencies + "analogix-dp" + "analogix-anx6345" # For DP or eDP (e.g. integrated display) + ]; + + # Include lots of firmware. + hardware.enableRedistributableFirmware = true; + }; } diff --git a/nixos/modules/installer/cd-dvd/installation-cd-base.nix b/nixos/modules/installer/cd-dvd/installation-cd-base.nix index 15304c995f10..90d49255b501 100644 --- a/nixos/modules/installer/cd-dvd/installation-cd-base.nix +++ b/nixos/modules/installer/cd-dvd/installation-cd-base.nix @@ -6,11 +6,12 @@ [ ./iso-image.nix # Profiles of this basic installation CD. - ../../profiles/all-hardware.nix ../../profiles/base.nix ../../profiles/installation-device.nix ]; + hardware.enableAllHardware = true; + # Adds terminus_font for people with HiDPI displays console.packages = options.console.packages.default ++ [ pkgs.terminus_font ]; diff --git a/nixos/modules/installer/netboot/netboot-base.nix b/nixos/modules/installer/netboot/netboot-base.nix index b969d2de6b67..360ef5646996 100644 --- a/nixos/modules/installer/netboot/netboot-base.nix +++ b/nixos/modules/installer/netboot/netboot-base.nix @@ -10,8 +10,9 @@ with lib; ./netboot.nix # Profiles of this basic netboot media - ../../profiles/all-hardware.nix ../../profiles/base.nix ../../profiles/installation-device.nix ]; + + hardware.enableAllHardware = true; } diff --git a/nixos/modules/installer/sd-card/sd-image.nix b/nixos/modules/installer/sd-card/sd-image.nix index 0e717a2b6a7a..3cf2b98ec9d7 100644 --- a/nixos/modules/installer/sd-card/sd-image.nix +++ b/nixos/modules/installer/sd-card/sd-image.nix @@ -29,7 +29,6 @@ in imports = [ (mkRemovedOptionModule [ "sdImage" "bootPartitionID" ] "The FAT partition for SD image now only holds the Raspberry Pi firmware files. Use firmwarePartitionID to configure that partition's ID.") (mkRemovedOptionModule [ "sdImage" "bootSize" ] "The boot files for SD image have been moved to the main ext4 partition. The FAT partition now only holds the Raspberry Pi firmware files. Changing its size may not be required.") - ../../profiles/all-hardware.nix ]; options.sdImage = { @@ -162,6 +161,8 @@ in }; config = { + hardware.enableAllHardware = true; + fileSystems = { "/boot/firmware" = { device = "/dev/disk/by-label/${config.sdImage.firmwarePartitionName}"; diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 245ffeb5cf8b..beadab042087 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -48,6 +48,7 @@ ./config/zram.nix ./hardware/acpilight.nix ./hardware/all-firmware.nix + ./hardware/all-hardware.nix ./hardware/apple-touchbar.nix ./hardware/bladeRF.nix ./hardware/brillo.nix diff --git a/nixos/modules/profiles/all-hardware.nix b/nixos/modules/profiles/all-hardware.nix new file mode 100644 index 000000000000..fac333b09ea8 --- /dev/null +++ b/nixos/modules/profiles/all-hardware.nix @@ -0,0 +1,5 @@ +# Set `hardware.enableAllHardware = true` instead of importing this file. +# This file provides backwards compatibility for older configurations. +{ + hardware.enableAllHardware = true; +} From 4e77d446f77de3ed76cb0ab1bb65581c30c132b6 Mon Sep 17 00:00:00 2001 From: DavHau Date: Thu, 12 Dec 2024 16:47:27 +0700 Subject: [PATCH 4/4] all-hardware.nix: format with nixfmt --- nixos/modules/hardware/all-hardware.nix | 94 +++++++++++++++++++------ 1 file changed, 74 insertions(+), 20 deletions(-) diff --git a/nixos/modules/hardware/all-hardware.nix b/nixos/modules/hardware/all-hardware.nix index ea3d5fc1b3e2..6ffd8b677686 100644 --- a/nixos/modules/hardware/all-hardware.nix +++ b/nixos/modules/hardware/all-hardware.nix @@ -3,7 +3,12 @@ # enabled in the initrd. Its primary use is in the NixOS installation # CDs. -{ config, lib, pkgs, ... }: +{ + config, + lib, + pkgs, + ... +}: let platform = pkgs.stdenv.hostPlatform; in @@ -18,26 +23,61 @@ in # The initrd has to contain any module that might be necessary for # supporting the most important parts of HW like drives. boot.initrd.availableKernelModules = - [ # SATA/PATA support. + [ + # SATA/PATA support. "ahci" "ata_piix" - "sata_inic162x" "sata_nv" "sata_promise" "sata_qstor" - "sata_sil" "sata_sil24" "sata_sis" "sata_svw" "sata_sx4" - "sata_uli" "sata_via" "sata_vsc" + "sata_inic162x" + "sata_nv" + "sata_promise" + "sata_qstor" + "sata_sil" + "sata_sil24" + "sata_sis" + "sata_svw" + "sata_sx4" + "sata_uli" + "sata_via" + "sata_vsc" - "pata_ali" "pata_amd" "pata_artop" "pata_atiixp" "pata_efar" - "pata_hpt366" "pata_hpt37x" "pata_hpt3x2n" "pata_hpt3x3" - "pata_it8213" "pata_it821x" "pata_jmicron" "pata_marvell" - "pata_mpiix" "pata_netcell" "pata_ns87410" "pata_oldpiix" - "pata_pcmcia" "pata_pdc2027x" "pata_qdi" "pata_rz1000" - "pata_serverworks" "pata_sil680" "pata_sis" - "pata_sl82c105" "pata_triflex" "pata_via" + "pata_ali" + "pata_amd" + "pata_artop" + "pata_atiixp" + "pata_efar" + "pata_hpt366" + "pata_hpt37x" + "pata_hpt3x2n" + "pata_hpt3x3" + "pata_it8213" + "pata_it821x" + "pata_jmicron" + "pata_marvell" + "pata_mpiix" + "pata_netcell" + "pata_ns87410" + "pata_oldpiix" + "pata_pcmcia" + "pata_pdc2027x" + "pata_qdi" + "pata_rz1000" + "pata_serverworks" + "pata_sil680" + "pata_sis" + "pata_sl82c105" + "pata_triflex" + "pata_via" "pata_winbond" # SCSI support (incomplete). - "3w-9xxx" "3w-xxxx" "aic79xx" "aic7xxx" "arcmsr" "hpsa" + "3w-9xxx" + "3w-xxxx" + "aic79xx" + "aic7xxx" + "arcmsr" + "hpsa" # USB support, especially for booting from USB CD-ROM # drives. @@ -50,20 +90,33 @@ in "nvme" # Firewire support. Not tested. - "ohci1394" "sbp2" + "ohci1394" + "sbp2" # Virtio (QEMU, KVM etc.) support. - "virtio_net" "virtio_pci" "virtio_mmio" "virtio_blk" "virtio_scsi" "virtio_balloon" "virtio_console" + "virtio_net" + "virtio_pci" + "virtio_mmio" + "virtio_blk" + "virtio_scsi" + "virtio_balloon" + "virtio_console" # VMware support. - "mptspi" "vmxnet3" "vsock" - ] ++ lib.optional platform.isx86 "vmw_balloon" + "mptspi" + "vmxnet3" + "vsock" + ] + ++ lib.optional platform.isx86 "vmw_balloon" ++ lib.optionals (pkgs.stdenv.hostPlatform.isi686 || pkgs.stdenv.hostPlatform.isx86_64) [ - "vmw_vmci" "vmwgfx" "vmw_vsock_vmci_transport" + "vmw_vmci" + "vmwgfx" + "vmw_vsock_vmci_transport" # Hyper-V support. "hv_storvsc" - ] ++ lib.optionals pkgs.stdenv.hostPlatform.isAarch [ + ] + ++ lib.optionals pkgs.stdenv.hostPlatform.isAarch [ # Allwinner support # Required for early KMS "sun4i-drm" @@ -74,7 +127,8 @@ in # Broadcom "vc4" - ] ++ lib.optionals pkgs.stdenv.hostPlatform.isAarch64 [ + ] + ++ lib.optionals pkgs.stdenv.hostPlatform.isAarch64 [ # Most of the following falls into two categories: # - early KMS / early display # - early storage (e.g. USB) support