nixos: add option to load wireless regulatory database as firmware

use it when networkmanager or wpa_supplicant is enabled.

fixes #57053
fixes "Direct firmware load for regulatory.db failed with error -2"
in dmesg

Note that all kernels on unstable are newer that 4.15, which is required
for this to work.
This commit is contained in:
Guillaume Girol 2021-05-02 12:00:00 +00:00
parent 900115a4f7
commit 8fe0143d88
3 changed files with 16 additions and 2 deletions

View file

@ -35,6 +35,14 @@ in {
''; '';
}; };
hardware.wirelessRegulatoryDatabase = mkOption {
default = false;
type = types.bool;
description = ''
Load the wireless regulatory database at boot.
'';
};
}; };
@ -58,6 +66,7 @@ in {
++ optionals (versionOlder config.boot.kernelPackages.kernel.version "4.13") [ ++ optionals (versionOlder config.boot.kernelPackages.kernel.version "4.13") [
rtl8723bs-firmware rtl8723bs-firmware
]; ];
hardware.wirelessRegulatoryDatabase = true;
}) })
(mkIf cfg.enableAllFirmware { (mkIf cfg.enableAllFirmware {
assertions = [{ assertions = [{
@ -75,5 +84,8 @@ in {
b43FirmwareCutter b43FirmwareCutter
] ++ optional (pkgs.stdenv.hostPlatform.isi686 || pkgs.stdenv.hostPlatform.isx86_64) facetimehd-firmware; ] ++ optional (pkgs.stdenv.hostPlatform.isi686 || pkgs.stdenv.hostPlatform.isx86_64) facetimehd-firmware;
}) })
(mkIf cfg.wirelessRegulatoryDatabase {
hardware.firmware = [ pkgs.wireless-regdb ];
})
]; ];
} }

View file

@ -6,7 +6,6 @@ let
cfg = config.networking.networkmanager; cfg = config.networking.networkmanager;
basePackages = with pkgs; [ basePackages = with pkgs; [
crda
modemmanager modemmanager
networkmanager networkmanager
networkmanager-fortisslvpn networkmanager-fortisslvpn
@ -367,6 +366,8 @@ in {
} }
]; ];
hardware.wirelessRegulatoryDatabase = true;
environment.etc = with pkgs; { environment.etc = with pkgs; {
"NetworkManager/NetworkManager.conf".source = configFile; "NetworkManager/NetworkManager.conf".source = configFile;

View file

@ -228,7 +228,8 @@ in {
environment.systemPackages = [ package ]; environment.systemPackages = [ package ];
services.dbus.packages = [ package ]; services.dbus.packages = [ package ];
services.udev.packages = [ pkgs.crda ];
hardware.wirelessRegulatoryDatabase = true;
# FIXME: start a separate wpa_supplicant instance per interface. # FIXME: start a separate wpa_supplicant instance per interface.
systemd.services.wpa_supplicant = let systemd.services.wpa_supplicant = let