summaryrefslogtreecommitdiffstats
path: root/nixos/modules/hardware/all-firmware.nix
blob: 71caa28a35d867458496baf3609116dd4c8d64ef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
{
  config,
  lib,
  pkgs,
  ...
}:
let
  cfg = config.hardware;
in
{

  imports = [
    (lib.mkRenamedOptionModule
      [ "networking" "enableRT73Firmware" ]
      [ "hardware" "enableRedistributableFirmware" ]
    )
    (lib.mkRenamedOptionModule
      [ "networking" "enableIntel3945ABGFirmware" ]
      [ "hardware" "enableRedistributableFirmware" ]
    )
    (lib.mkRenamedOptionModule
      [ "networking" "enableIntel2100BGFirmware" ]
      [ "hardware" "enableRedistributableFirmware" ]
    )
    (lib.mkRenamedOptionModule
      [ "networking" "enableRalinkFirmware" ]
      [ "hardware" "enableRedistributableFirmware" ]
    )
    (lib.mkRenamedOptionModule
      [ "networking" "enableRTL8192cFirmware" ]
      [ "hardware" "enableRedistributableFirmware" ]
    )
  ];

  ###### interface

  options = {

    hardware.enableAllFirmware = lib.mkOption {
      default = false;
      example = true;

      description = ''
        Whether to enable all firmware, including [unfree packages that must be explictly allowed](https://nixos.org/manual/nixpkgs/unstable/#sec-allow-unfree).

        Alternatively, use the {option}`hardware.enableRedistributableFirmware` option.
      '';

      type = lib.types.bool;
    };

    hardware.enableRedistributableFirmware =
      lib.mkEnableOption "firmware with a license allowing redistribution"
      // {
        default = config.hardware.enableAllFirmware;
        defaultText = lib.literalExpression "config.hardware.enableAllFirmware";
      };

    hardware.wirelessRegulatoryDatabase =
      lib.mkEnableOption "loading the wireless regulatory database at boot"
      // {
        default = cfg.enableRedistributableFirmware || cfg.enableAllFirmware;
        defaultText = lib.literalMD "Enabled if proprietary firmware is allowed via {option}`enableRedistributableFirmware` or {option}`enableAllFirmware`.";
      };

  };

  ###### implementation

  config = lib.mkMerge [
    (lib.mkIf (cfg.enableAllFirmware || cfg.enableRedistributableFirmware) {
      hardware.firmware =
        with pkgs;
        [
          linux-firmware
          ipw2200-firmware
          rtl8192su-firmware
          rt5677-firmware
          rtl8761b-firmware
          zd1211fw
          alsa-firmware
          sof-firmware
          libreelec-dvb-firmware
        ]
        ++ lib.optional pkgs.stdenv.hostPlatform.isAarch raspberrypiWirelessFirmware;
    })
    (lib.mkIf cfg.enableAllFirmware {
      hardware.firmware =
        with pkgs;
        [
          broadcom-bt-firmware
          b43Firmware_5_1_138
          b43Firmware_6_30_163_46
          xone-dongle-firmware
        ]
        ++ lib.optionals pkgs.stdenv.hostPlatform.isx86 [
          facetimehd-calibration
          facetimehd-firmware
        ];
    })
    (lib.mkIf cfg.wirelessRegulatoryDatabase {
      hardware.firmware = [ pkgs.wireless-regdb ];
    })
  ];
}