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