Skip to content

Commit

Permalink
nixos: add option hardware.enableAllHardware (#364479)
Browse files Browse the repository at this point in the history
  • Loading branch information
jopejoe1 authored Dec 14, 2024
2 parents 3849e83 + 4e77d44 commit dfd7b67
Show file tree
Hide file tree
Showing 6 changed files with 184 additions and 118 deletions.
174 changes: 174 additions & 0 deletions nixos/modules/hardware/all-hardware.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
# This module enables all hardware supported by NixOS: i.e., all
# firmware is included, and all devices from which one may boot are
# enabled in the initrd. Its primary use is in the NixOS installation
# CDs.

{
config,
lib,
pkgs,
...
}:
let
platform = pkgs.stdenv.hostPlatform;
in
{

options = {
hardware.enableAllHardware = lib.mkEnableOption "Enable support for most hardware";
};

config = lib.mkIf config.hardware.enableAllHardware {

# 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"

"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"

"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"

# USB support, especially for booting from USB CD-ROM
# drives.
"uas"

# SD cards.
"sdhci_pci"

# NVMe drives
"nvme"

# Firewire support. Not tested.
"ohci1394"
"sbp2"

# Virtio (QEMU, KVM etc.) support.
"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"
++ lib.optionals (pkgs.stdenv.hostPlatform.isi686 || pkgs.stdenv.hostPlatform.isx86_64) [
"vmw_vmci"
"vmwgfx"
"vmw_vsock_vmci_transport"

# 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

# PWM for the backlight
"pwm-sun4i"

# 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

# Broadcom

"pcie-brcmstb"

# Rockchip
"dw-hdmi"
"dw-mipi-dsi"
"rockchipdrm"
"rockchip-rga"
"phy-rockchip-pcie"
"pcie-rockchip-host"

# Misc. uncategorized hardware

# Used for some platform's integrated displays
"panel-simple"
"pwm-bl"

# Power supply drivers, some platforms need them for USB
"axp20x-ac-power"
"axp20x-battery"
"pinctrl-axp209"
"mp8859"

# USB drivers
"xhci-pci-renesas"

# 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;
};
}
3 changes: 2 additions & 1 deletion nixos/modules/installer/cd-dvd/installation-cd-base.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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 ];

Expand Down
3 changes: 2 additions & 1 deletion nixos/modules/installer/netboot/netboot-base.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
3 changes: 2 additions & 1 deletion nixos/modules/installer/sd-card/sd-image.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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 = {
Expand Down Expand Up @@ -162,6 +161,8 @@ in
};

config = {
hardware.enableAllHardware = true;

fileSystems = {
"/boot/firmware" = {
device = "/dev/disk/by-label/${config.sdImage.firmwarePartitionName}";
Expand Down
1 change: 1 addition & 0 deletions nixos/modules/module-list.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
118 changes: 3 additions & 115 deletions nixos/modules/profiles/all-hardware.nix
Original file line number Diff line number Diff line change
@@ -1,117 +1,5 @@
# This module enables all hardware supported by NixOS: i.e., all
# firmware is included, and all devices from which one may boot are
# enabled in the initrd. Its primary use is in the NixOS installation
# CDs.

{ pkgs, lib,... }:
let
platform = pkgs.stdenv.hostPlatform;
in
# Set `hardware.enableAllHardware = true` instead of importing this file.
# This file provides backwards compatibility for older configurations.
{

# 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"

"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"

"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"

# USB support, especially for booting from USB CD-ROM
# drives.
"uas"

# SD cards.
"sdhci_pci"

# NVMe drives
"nvme"

# Firewire support. Not tested.
"ohci1394" "sbp2"

# Virtio (QEMU, KVM etc.) support.
"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"
++ lib.optionals (pkgs.stdenv.hostPlatform.isi686 || pkgs.stdenv.hostPlatform.isx86_64) [
"vmw_vmci" "vmwgfx" "vmw_vsock_vmci_transport"

# 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

# PWM for the backlight
"pwm-sun4i"

# 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

# Broadcom

"pcie-brcmstb"

# Rockchip
"dw-hdmi"
"dw-mipi-dsi"
"rockchipdrm"
"rockchip-rga"
"phy-rockchip-pcie"
"pcie-rockchip-host"

# Misc. uncategorized hardware

# Used for some platform's integrated displays
"panel-simple"
"pwm-bl"

# Power supply drivers, some platforms need them for USB
"axp20x-ac-power"
"axp20x-battery"
"pinctrl-axp209"
"mp8859"

# USB drivers
"xhci-pci-renesas"

# 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;

imports =
[ ../hardware/network/zydas-zd1211.nix ];

hardware.enableAllHardware = true;
}

0 comments on commit dfd7b67

Please sign in to comment.