diff --git a/modules/hardware/cpu/intel-microcode.nix b/modules/hardware/cpu/intel-microcode.nix index fa7a6edc7374..b8e97b4ca4ac 100644 --- a/modules/hardware/cpu/intel-microcode.nix +++ b/modules/hardware/cpu/intel-microcode.nix @@ -23,17 +23,7 @@ with pkgs.lib; config = mkIf config.hardware.cpu.intel.updateMicrocode { hardware.firmware = [ pkgs.microcodeIntel ]; - - # This cannot be done using boot.kernelModules - # discussion at http://lists.science.uu.nl/pipermail/nix-dev/2012-February/007959.html - jobs.microcode = { - name = "microcode"; - description = "load microcode"; - startOn = "started udev"; - exec = "modprobe microcode"; - path = [config.system.sbin.modprobe]; - task = true; - }; + boot.kernelModules = [ "microcode" ]; }; } diff --git a/modules/services/hardware/udev.nix b/modules/services/hardware/udev.nix index c4c348c7c25c..0802d4f7dbcc 100644 --- a/modules/services/hardware/udev.nix +++ b/modules/services/hardware/udev.nix @@ -236,6 +236,17 @@ in daemonType = "fork"; exec = "udevd --daemon"; + + postStart = + '' + # Do the loading of additional stage 2 kernel modules. + # This needs to be done while udevd is running, because + # the modules may call upon udev's firmware loading rule. + for i in ${toString config.boot.kernelModules}; do + echo "loading kernel module ā€˜$i’..." + ${config.system.sbin.modprobe}/sbin/modprobe $i || true + done + ''; }; jobs.udevtrigger = diff --git a/modules/system/boot/modprobe.nix b/modules/system/boot/modprobe.nix index 4dd866a43952..ef3ed3bed94a 100644 --- a/modules/system/boot/modprobe.nix +++ b/modules/system/boot/modprobe.nix @@ -100,11 +100,6 @@ with pkgs.lib; # We need this when the kernel (or some module) auto-loads a # module. echo ${config.system.sbin.modprobe}/sbin/modprobe > /proc/sys/kernel/modprobe - - # Do the loading of additional stage 2 kernel modules. - for i in ${toString config.boot.kernelModules}; do - ${config.system.sbin.modprobe}/sbin/modprobe $i || true - done ''; };