diff --git a/modules/module-list.nix b/modules/module-list.nix index 861039d7391..cb1a19b4dfc 100644 --- a/modules/module-list.nix +++ b/modules/module-list.nix @@ -121,6 +121,7 @@ ./system/activation/activation-script.nix ./system/activation/top-level.nix ./system/boot/kernel.nix + ./system/boot/modprobe.nix ./system/boot/stage-1.nix ./system/boot/stage-2.nix ./system/etc/etc.nix diff --git a/modules/system/boot/kernel.nix b/modules/system/boot/kernel.nix index ea6f2812485..d7facd76519 100644 --- a/modules/system/boot/kernel.nix +++ b/modules/system/boot/kernel.nix @@ -1,8 +1,9 @@ -{pkgs, config, ...}: +{ config, pkgs, ... }: + +with pkgs.lib; ###### interface let - inherit (pkgs.lib) mkOption; options = { boot = { @@ -148,31 +149,12 @@ let built outside of the kernel. Combine these into a single tree of symlinks because modprobe only supports one directory. "; - merge = pkgs.lib.mergeListOption; + merge = mergeListOption; # Convert the list of path to only one path. apply = pkgs.aggregateModules; }; - system.sbin.modprobe = mkOption { - # should be moved in module-init-tools - internal = true; - default = pkgs.writeTextFile { - name = "modprobe"; - destination = "/sbin/modprobe"; - executable = true; - text = - '' - #! ${pkgs.stdenv.shell} - export MODULE_DIR=${config.system.modulesTree}/lib/modules - exec ${pkgs.module_init_tools}/sbin/modprobe "$@" - ''; - }; - description = '' - Wrapper around modprobe that sets the path to the modules - tree. - ''; - }; }; in diff --git a/modules/system/boot/modprobe.nix b/modules/system/boot/modprobe.nix new file mode 100644 index 00000000000..919a08f22ba --- /dev/null +++ b/modules/system/boot/modprobe.nix @@ -0,0 +1,80 @@ +{ config, pkgs, ... }: + +with pkgs.lib; + +# blacklist "cirrusfb" "i2c_piix4" + +{ + + ###### interface + + options = { + + system.sbin.modprobe = mkOption { + # should be moved in module-init-tools + internal = true; + default = pkgs.writeTextFile { + name = "modprobe"; + destination = "/sbin/modprobe"; + executable = true; + text = + '' + #! ${pkgs.stdenv.shell} + export MODULE_DIR=${config.system.modulesTree}/lib/modules + exec ${pkgs.module_init_tools}/sbin/modprobe "$@" + ''; + }; + description = '' + Wrapper around modprobe that sets the path to the modules + tree. + ''; + }; + + boot.blacklistedKernelModules = mkOption { + default = []; + example = [ "cirrusfb" "i2c_piix4" ]; + description = '' + List of names of kernel modules that should not be loaded + automatically by the hardware probing code. + ''; + }; + + boot.extraModprobeConfig = mkOption { + default = ""; + example = + '' + options parport_pc io=0x378 irq=7 dma=1 + ''; + description = '' + Any additional configuration to be appended to the generated + modprobe.conf. This is typically used to + specify module options. See + modprobe.conf + 5 for details. + ''; + }; + + }; + + + ###### implementation + + config = { + + environment.etc = singleton + { source = pkgs.writeText "modprobe.conf" + '' + ${flip concatMapStrings config.boot.blacklistedKernelModules (name: '' + blacklist ${name} + '')} + ${config.boot.extraModprobeConfig} + ''; + target = "modprobe.conf"; + }; + + }; + +} + + + \ No newline at end of file