69 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ config, lib, pkgs, ... }:
 | 
						|
 | 
						|
with lib;
 | 
						|
 | 
						|
{
 | 
						|
 | 
						|
  ###### interface
 | 
						|
 | 
						|
  options = {
 | 
						|
 | 
						|
    boot.blacklistedKernelModules = mkOption {
 | 
						|
      type = types.listOf types.str;
 | 
						|
      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
 | 
						|
        <filename>modprobe.conf</filename>.  This is typically used to
 | 
						|
        specify module options.  See
 | 
						|
        <citerefentry><refentrytitle>modprobe.conf</refentrytitle>
 | 
						|
        <manvolnum>5</manvolnum></citerefentry> for details.
 | 
						|
      '';
 | 
						|
      type = types.lines;
 | 
						|
    };
 | 
						|
 | 
						|
  };
 | 
						|
 | 
						|
 | 
						|
  ###### implementation
 | 
						|
 | 
						|
  config = mkIf (!config.boot.isContainer) {
 | 
						|
 | 
						|
    environment.etc."modprobe.d/ubuntu.conf".source = "${pkgs.kmod-blacklist-ubuntu}/modprobe.conf";
 | 
						|
 | 
						|
    environment.etc."modprobe.d/nixos.conf".text =
 | 
						|
      ''
 | 
						|
        ${flip concatMapStrings config.boot.blacklistedKernelModules (name: ''
 | 
						|
          blacklist ${name}
 | 
						|
        '')}
 | 
						|
        ${config.boot.extraModprobeConfig}
 | 
						|
      '';
 | 
						|
    environment.etc."modprobe.d/debian.conf".source = pkgs.kmod-debian-aliases;
 | 
						|
 | 
						|
    environment.systemPackages = [ pkgs.kmod ];
 | 
						|
 | 
						|
    system.activationScripts.modprobe = stringAfter ["specialfs"]
 | 
						|
      ''
 | 
						|
        # Allow the kernel to find our wrapped modprobe (which searches
 | 
						|
        # in the right location in the Nix store for kernel modules).
 | 
						|
        # We need this when the kernel (or some module) auto-loads a
 | 
						|
        # module.
 | 
						|
        echo ${pkgs.kmod}/bin/modprobe > /proc/sys/kernel/modprobe
 | 
						|
      '';
 | 
						|
 | 
						|
  };
 | 
						|
 | 
						|
}
 |