1{
2 config,
3 lib,
4 pkgs,
5 ...
6}:
7let
8 cfg = config.hardware;
9in
10{
11
12 imports = [
13 (lib.mkRenamedOptionModule
14 [ "networking" "enableRT73Firmware" ]
15 [ "hardware" "enableRedistributableFirmware" ]
16 )
17 (lib.mkRenamedOptionModule
18 [ "networking" "enableIntel3945ABGFirmware" ]
19 [ "hardware" "enableRedistributableFirmware" ]
20 )
21 (lib.mkRenamedOptionModule
22 [ "networking" "enableIntel2100BGFirmware" ]
23 [ "hardware" "enableRedistributableFirmware" ]
24 )
25 (lib.mkRenamedOptionModule
26 [ "networking" "enableRalinkFirmware" ]
27 [ "hardware" "enableRedistributableFirmware" ]
28 )
29 (lib.mkRenamedOptionModule
30 [ "networking" "enableRTL8192cFirmware" ]
31 [ "hardware" "enableRedistributableFirmware" ]
32 )
33 ];
34
35 ###### interface
36
37 options = {
38
39 hardware.enableAllFirmware = lib.mkEnableOption "all firmware regardless of license";
40
41 hardware.enableRedistributableFirmware =
42 lib.mkEnableOption "firmware with a license allowing redistribution"
43 // {
44 default = config.hardware.enableAllFirmware;
45 defaultText = lib.literalExpression "config.hardware.enableAllFirmware";
46 };
47
48 hardware.wirelessRegulatoryDatabase =
49 lib.mkEnableOption "loading the wireless regulatory database at boot"
50 // {
51 default = cfg.enableRedistributableFirmware || cfg.enableAllFirmware;
52 defaultText = lib.literalMD "Enabled if proprietary firmware is allowed via {option}`enableRedistributableFirmware` or {option}`enableAllFirmware`.";
53 };
54
55 };
56
57 ###### implementation
58
59 config = lib.mkMerge [
60 (lib.mkIf (cfg.enableAllFirmware || cfg.enableRedistributableFirmware) {
61 hardware.firmware =
62 with pkgs;
63 [
64 linux-firmware
65 intel2200BGFirmware
66 rtl8192su-firmware
67 rt5677-firmware
68 rtl8761b-firmware
69 zd1211fw
70 alsa-firmware
71 sof-firmware
72 libreelec-dvb-firmware
73 ]
74 ++ lib.optional pkgs.stdenv.hostPlatform.isAarch raspberrypiWirelessFirmware;
75 })
76 (lib.mkIf cfg.enableAllFirmware {
77 assertions = [
78 {
79 assertion = !cfg.enableAllFirmware || pkgs.config.allowUnfree;
80 message = ''
81 the list of hardware.enableAllFirmware contains non-redistributable licensed firmware files.
82 This requires nixpkgs.config.allowUnfree to be true.
83 An alternative is to use the hardware.enableRedistributableFirmware option.
84 '';
85 }
86 ];
87 hardware.firmware =
88 with pkgs;
89 [
90 broadcom-bt-firmware
91 b43Firmware_5_1_138
92 b43Firmware_6_30_163_46
93 xow_dongle-firmware
94 ]
95 ++ lib.optionals pkgs.stdenv.hostPlatform.isx86 [
96 facetimehd-calibration
97 facetimehd-firmware
98 ];
99 })
100 (lib.mkIf cfg.wirelessRegulatoryDatabase {
101 hardware.firmware = [ pkgs.wireless-regdb ];
102 })
103 ];
104}