at 24.11-pre 2.7 kB view raw
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}