diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2016-02-03 14:24:11 +0100 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2016-02-03 14:24:11 +0100 |
commit | 20b54bd9899e28c157086847f666d4ebec0f3c36 (patch) | |
tree | a7205fea35f97cc677054fe95e3779ac39d99ff5 /nixos/modules | |
parent | ac9cea30fbc4f3aa7187d861d5a4a2c239a9e0a0 (diff) | |
parent | 54047149973c6698943081a83765c09b511dcc78 (diff) | |
download | nixlib-20b54bd9899e28c157086847f666d4ebec0f3c36.tar nixlib-20b54bd9899e28c157086847f666d4ebec0f3c36.tar.gz nixlib-20b54bd9899e28c157086847f666d4ebec0f3c36.tar.bz2 nixlib-20b54bd9899e28c157086847f666d4ebec0f3c36.tar.lz nixlib-20b54bd9899e28c157086847f666d4ebec0f3c36.tar.xz nixlib-20b54bd9899e28c157086847f666d4ebec0f3c36.tar.zst nixlib-20b54bd9899e28c157086847f666d4ebec0f3c36.zip |
Merge pull request #12724 from abbradar/udev-hwdb
udev service: generate hwdb database from all udev packages
Diffstat (limited to 'nixos/modules')
-rw-r--r-- | nixos/modules/services/hardware/udev.nix | 54 |
1 files changed, 46 insertions, 8 deletions
diff --git a/nixos/modules/services/hardware/udev.nix b/nixos/modules/services/hardware/udev.nix index c747c24db67d..daa2fd89baca 100644 --- a/nixos/modules/services/hardware/udev.nix +++ b/nixos/modules/services/hardware/udev.nix @@ -16,6 +16,12 @@ let destination = "/etc/udev/rules.d/10-local.rules"; }; + extraHwdbFile = pkgs.writeTextFile { + name = "extra-hwdb-file"; + text = cfg.extraHwdb; + destination = "/etc/udev/hwdb.d/10-local.hwdb"; + }; + nixosRules = '' # Miscellaneous devices. KERNEL=="kvm", MODE="0666" @@ -104,6 +110,27 @@ let ''; # */ }; + hwdbBin = stdenv.mkDerivation { + name = "hwdb.bin"; + + preferLocalBuild = true; + allowSubstitutes = false; + + buildCommand = '' + mkdir -p etc/udev/hwdb.d + for i in ${toString ([udev] ++ cfg.packages)}; do + echo "Adding hwdb files for package $i" + for j in $i/{etc,lib}/udev/hwdb.d/*; do + ln -s $j etc/udev/hwdb.d/$(basename $j) + done + done + + echo "Generating hwdb database..." + ${udev}/bin/udevadm hwdb --update --root=$(pwd) + mv etc/udev/hwdb.bin $out + ''; + }; + # Udev has a 512-character limit for ENV{PATH}, so create a symlink # tree to work around this. udevPath = pkgs.buildEnv { @@ -168,6 +195,21 @@ in ''; }; + extraHwdb = mkOption { + default = ""; + example = '' + evdev:input:b0003v05AFp8277* + KEYBOARD_KEY_70039=leftalt + KEYBOARD_KEY_700e2=leftctrl + ''; + type = types.lines; + description = '' + Additional <command>hwdb</command> files. They'll be written + into file <filename>10-local.hwdb</filename>. Thus they are + read before all other files. + ''; + }; + }; hardware.firmware = mkOption { @@ -216,7 +258,7 @@ in services.udev.extraRules = nixosRules; - services.udev.packages = [ extraUdevRules ]; + services.udev.packages = [ extraUdevRules extraHwdbFile ]; services.udev.path = [ pkgs.coreutils pkgs.gnused pkgs.gnugrep pkgs.utillinux udev ]; @@ -224,6 +266,9 @@ in [ { source = udevRules; target = "udev/rules.d"; } + { source = hwdbBin; + target = "udev/hwdb.bin"; + } ]; system.requiredKernelConfig = with config.lib.kernelConfig; [ @@ -241,13 +286,6 @@ in echo "" > /proc/sys/kernel/hotplug fi - # Regenerate the hardware database /var/lib/udev/hwdb.bin - # whenever systemd changes. - if [ ! -e /var/lib/udev/prev-systemd -o "$(readlink /var/lib/udev/prev-systemd)" != ${config.systemd.package} ]; then - echo "regenerating udev hardware database..." - ${config.systemd.package}/bin/udevadm hwdb --update && ln -sfn ${config.systemd.package} /var/lib/udev/prev-systemd - fi - # Allow the kernel to find our firmware. if [ -e /sys/module/firmware_class/parameters/path ]; then echo -n "${config.hardware.firmware}/lib/firmware" > /sys/module/firmware_class/parameters/path |