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