diff --git a/modules/system/boot/kernel.nix b/modules/system/boot/kernel.nix index 1b247a65890..f3ede5c0d49 100644 --- a/modules/system/boot/kernel.nix +++ b/modules/system/boot/kernel.nix @@ -173,6 +173,18 @@ let kernel = config.boot.kernelPackages.kernel; in # The Linux kernel >= 2.6.27 provides firmware. hardware.firmware = [ "${kernel}/lib/firmware" ]; + # Create /etc/modules-load.d/nixos.conf, which is read by + # systemd-modules-load.service to load required kernel modules. + # FIXME: ensure that systemd-modules-load.service is restarted if + # this file changes. + environment.etc = singleton + { target = "modules-load.d/nixos.conf"; + source = pkgs.writeText "nixos.conf" + '' + ${concatStringsSep "\n" config.boot.kernelModules} + ''; + }; + }; } diff --git a/modules/system/boot/systemd.nix b/modules/system/boot/systemd.nix index 10c98116710..2a586090dd1 100644 --- a/modules/system/boot/systemd.nix +++ b/modules/system/boot/systemd.nix @@ -67,6 +67,9 @@ let "systemd-update-utmp-runlevel.service" "systemd-update-utmp-shutdown.service" + # Kernel module loading. + "systemd-modules-load.service" + # Filesystems. "systemd-fsck@.service" "systemd-fsck-root.service"