c2147ab6a8
Shipped by systemd to combat kmod default options that interfere with the netdev setup, when those drivers are initially loaded.
90 lines
2.6 KiB
Nix
90 lines
2.6 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.d</refentrytitle>
|
|
<manvolnum>5</manvolnum></citerefentry> for details.
|
|
'';
|
|
type = types.lines;
|
|
};
|
|
|
|
boot.initrd.extraModprobeConfig = mkOption {
|
|
default = "";
|
|
example =
|
|
''
|
|
options zfs zfs_arc_max=1073741824
|
|
'';
|
|
description = ''
|
|
Does exactly the same thing as
|
|
<option>boot.extraModprobeConfig</option>, except
|
|
that the generated <filename>modprobe.conf</filename>
|
|
file is also included in the initrd.
|
|
This is useful for setting module options for kernel
|
|
modules that are loaded during early boot in the initrd.
|
|
'';
|
|
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/nixos-initrd.conf".text = ''
|
|
${config.boot.initrd.extraModprobeConfig}
|
|
'';
|
|
environment.etc."modprobe.d/debian.conf".source = pkgs.kmod-debian-aliases;
|
|
|
|
environment.etc."modprobe.d/systemd.conf".source = "${pkgs.systemd}/lib/modprobe.d/systemd.conf";
|
|
|
|
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
|
|
'';
|
|
|
|
};
|
|
|
|
}
|