at 25.11-pre 3.0 kB view raw
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}