1# This module enables all hardware supported by NixOS: i.e., all
2# firmware is included, and all devices from which one may boot are
3# enabled in the initrd. Its primary use is in the NixOS installation
4# CDs.
5
6{
7 config,
8 lib,
9 pkgs,
10 ...
11}:
12let
13 platform = pkgs.stdenv.hostPlatform;
14in
15{
16
17 options = {
18 hardware.enableAllHardware = lib.mkEnableOption "Enable support for most hardware";
19 };
20
21 config = lib.mkIf config.hardware.enableAllHardware {
22
23 # The initrd has to contain any module that might be necessary for
24 # supporting the most important parts of HW like drives.
25 boot.initrd.availableKernelModules =
26 [
27 # SATA/PATA support.
28 "ahci"
29
30 "ata_piix"
31
32 "sata_inic162x"
33 "sata_nv"
34 "sata_promise"
35 "sata_qstor"
36 "sata_sil"
37 "sata_sil24"
38 "sata_sis"
39 "sata_svw"
40 "sata_sx4"
41 "sata_uli"
42 "sata_via"
43 "sata_vsc"
44
45 "pata_ali"
46 "pata_amd"
47 "pata_artop"
48 "pata_atiixp"
49 "pata_efar"
50 "pata_hpt366"
51 "pata_hpt37x"
52 "pata_hpt3x2n"
53 "pata_hpt3x3"
54 "pata_it8213"
55 "pata_it821x"
56 "pata_jmicron"
57 "pata_marvell"
58 "pata_mpiix"
59 "pata_netcell"
60 "pata_ns87410"
61 "pata_oldpiix"
62 "pata_pcmcia"
63 "pata_pdc2027x"
64 "pata_qdi"
65 "pata_rz1000"
66 "pata_serverworks"
67 "pata_sil680"
68 "pata_sis"
69 "pata_sl82c105"
70 "pata_triflex"
71 "pata_via"
72 "pata_winbond"
73
74 # SCSI support (incomplete).
75 "3w-9xxx"
76 "3w-xxxx"
77 "aic79xx"
78 "aic7xxx"
79 "arcmsr"
80 "hpsa"
81
82 # USB support, especially for booting from USB CD-ROM
83 # drives.
84 "uas"
85
86 # SD cards.
87 "sdhci_pci"
88
89 # NVMe drives
90 "nvme"
91
92 # Firewire support. Not tested.
93 "ohci1394"
94 "sbp2"
95
96 # Virtio (QEMU, KVM etc.) support.
97 "virtio_net"
98 "virtio_pci"
99 "virtio_mmio"
100 "virtio_blk"
101 "virtio_scsi"
102 "virtio_balloon"
103 "virtio_console"
104
105 # VMware support.
106 "mptspi"
107 "vmxnet3"
108 "vsock"
109 ]
110 ++ lib.optional platform.isx86 "vmw_balloon"
111 ++ lib.optionals (pkgs.stdenv.hostPlatform.isi686 || pkgs.stdenv.hostPlatform.isx86_64) [
112 "vmw_vmci"
113 "vmwgfx"
114 "vmw_vsock_vmci_transport"
115
116 # Hyper-V support.
117 "hv_storvsc"
118 ]
119 ++ lib.optionals pkgs.stdenv.hostPlatform.isAarch [
120 # Allwinner support
121 # Required for early KMS
122 "sun4i-drm"
123 "sun8i-mixer" # Audio, but required for kms
124
125 # PWM for the backlight
126 "pwm-sun4i"
127
128 # Broadcom
129 "vc4"
130 ]
131 ++ lib.optionals pkgs.stdenv.hostPlatform.isAarch64 [
132 # Most of the following falls into two categories:
133 # - early KMS / early display
134 # - early storage (e.g. USB) support
135
136 # Broadcom
137
138 "pcie-brcmstb"
139
140 # Rockchip
141 "dw-hdmi"
142 "dw-mipi-dsi"
143 "rockchipdrm"
144 "rockchip-rga"
145 "phy-rockchip-pcie"
146 "pcie-rockchip-host"
147
148 # Misc. uncategorized hardware
149
150 # Used for some platform's integrated displays
151 "panel-simple"
152 "pwm-bl"
153
154 # Power supply drivers, some platforms need them for USB
155 "axp20x-ac-power"
156 "axp20x-battery"
157 "pinctrl-axp209"
158 "mp8859"
159
160 # USB drivers
161 "xhci-pci-renesas"
162
163 # Reset controllers
164 "reset-raspberrypi" # Triggers USB chip firmware load.
165
166 # Misc "weak" dependencies
167 "analogix-dp"
168 "analogix-anx6345" # For DP or eDP (e.g. integrated display)
169 ];
170
171 # Include lots of firmware.
172 hardware.enableRedistributableFirmware = true;
173 };
174}