diff --git a/modules/system/boot/kernel.nix b/modules/system/boot/kernel.nix index afe453e47bc..973fe33b09e 100644 --- a/modules/system/boot/kernel.nix +++ b/modules/system/boot/kernel.nix @@ -2,164 +2,152 @@ with pkgs.lib; -###### interface -let +let kernel = config.boot.kernelPackages.kernel; in + +{ + + ###### interface options = { - boot = { - kernelPackages = mkOption { - default = pkgs.kernelPackages; - example = pkgs.kernelPackages_2_6_25; - description = " - This option allows you to override the Linux kernel used by - NixOS. Since things like external kernel module packages are - tied to the kernel you're using, it also overrides those. - This option is a function that takes Nixpkgs as an argument - (as a convenience), and returns an attribute set containing at - the very least an attribute kernel. - Additional attributes may be needed depending on your - configuration. For instance, if you use the NVIDIA X driver, - then it also needs to contain an attribute - nvidia_x11. - "; - }; + + boot.kernelPackages = mkOption { + default = pkgs.kernelPackages; + example = pkgs.kernelPackages_2_6_25; + description = '' + This option allows you to override the Linux kernel used by + NixOS. Since things like external kernel module packages are + tied to the kernel you're using, it also overrides those. + This option is a function that takes Nixpkgs as an argument + (as a convenience), and returns an attribute set containing at + the very least an attribute kernel. + Additional attributes may be needed depending on your + configuration. For instance, if you use the NVIDIA X driver, + then it also needs to contain an attribute + nvidia_x11. + ''; + }; - kernelParams = mkOption { - default = [ - "selinux=0" - "apm=on" - "acpi=on" - "console=tty1" - "splash=verbose" - "vga=0x317" - ]; - description = " - The kernel parameters. If you want to add additional - parameters, it's best to set - . - "; - }; + boot.kernelParams = mkOption { + default = [ + "selinux=0" + "apm=on" + "acpi=on" + "console=tty1" + "splash=verbose" + "vga=0x317" + ]; + description = '' + The kernel parameters. If you want to add additional + parameters, it's best to set + . + ''; + }; - extraKernelParams = mkOption { - default = [ - ]; - example = [ - "debugtrace" - ]; - description = " - Additional user-defined kernel parameters. - "; - }; + boot.extraKernelParams = mkOption { + default = [ ]; + example = [ "debugtrace" ]; + description = "Additional user-defined kernel parameters."; + }; - extraModulePackages = mkOption { - default = []; - # !!! example = [pkgs.aufs pkgs.nvidia_x11]; - description = '' - A list of additional packages supplying kernel modules. - ''; - }; + boot.extraModulePackages = mkOption { + default = []; + # !!! example = [pkgs.aufs pkgs.nvidia_x11]; + description = "A list of additional packages supplying kernel modules."; + }; - kernelModules = mkOption { - default = []; - description = '' - The set of kernel modules to be loaded in the second stage of - the boot process. Note that modules that are needed to - mount the root file system should be added to - . - ''; - }; + boot.kernelModules = mkOption { + default = []; + description = '' + The set of kernel modules to be loaded in the second stage of + the boot process. Note that modules that are needed to + mount the root file system should be added to + . + ''; + }; - initrd = { + boot.initrd.kernelModules = mkOption { + default = [ + # Note: most of these (especially the SATA/PATA modules) + # shouldn't be included by default since nixos-hardware-scan + # detects them, but I'm keeping them for now for backwards + # compatibility. - kernelModules = mkOption { - default = [ - # Note: most of these (especially the SATA/PATA modules) - # shouldn't be included by default since nixos-hardware-scan - # detects them, but I'm keeping them for now for backwards - # compatibility. - - # Some SATA/PATA stuff. - "ahci" - "sata_nv" - "sata_via" - "sata_sis" - "sata_uli" - "ata_piix" - "pata_marvell" - - # Standard SCSI stuff. - "sd_mod" - "sr_mod" - - # Standard IDE stuff. - "ide_cd" - "ide_disk" - "ide_generic" - - # Filesystems. - "ext2" "ext3" - - # Support USB keyboards, in case the boot fails and we only have - # a USB keyboard. - "uhci_hcd" - "ehci_hcd" - "ohci_hcd" - "usbhid" + # Some SATA/PATA stuff. + "ahci" + "sata_nv" + "sata_via" + "sata_sis" + "sata_uli" + "ata_piix" + "pata_marvell" - # LVM. - "dm_mod" + # Standard SCSI stuff. + "sd_mod" + "sr_mod" - # All-mod-config case: - "unix" - "i8042" "pcips2" "serio" "atkbd" "xtkbd" - ]; - description = " - The set of kernel modules in the initial ramdisk used during the - boot process. This set must include all modules necessary for - mounting the root device. That is, it should include modules - for the physical device (e.g., SCSI drivers) and for the file - system (e.g., ext3). The set specified here is automatically - closed under the module dependency relation, i.e., all - dependencies of the modules list here are included - automatically. - "; - }; + # Standard IDE stuff. + "ide_cd" + "ide_disk" + "ide_generic" - }; + # Filesystems. + "ext2" "ext3" + + # Support USB keyboards, in case the boot fails and we only have + # a USB keyboard. + "uhci_hcd" + "ehci_hcd" + "ohci_hcd" + "usbhid" + + # LVM. + "dm_mod" + + # All-mod-config case: + "unix" + "i8042" "pcips2" "serio" "atkbd" "xtkbd" + ]; + description = '' + The set of kernel modules in the initial ramdisk used during the + boot process. This set must include all modules necessary for + mounting the root device. That is, it should include modules + for the physical device (e.g., SCSI drivers) and for the file + system (e.g., ext3). The set specified here is automatically + closed under the module dependency relation, i.e., all + dependencies of the modules list here are included + automatically. + ''; }; system.modulesTree = mkOption { internal = true; default = []; - description = " + description = '' Tree of kernel modules. This includes the kernel, plus modules built outside of the kernel. Combine these into a single tree of symlinks because modprobe only supports one directory. - "; + ''; merge = mergeListOption; - # Convert the list of path to only one path. apply = pkgs.aggregateModules; }; }; + + + ###### implementation + + config = { + + system.build = { inherit kernel; }; + + system.modulesTree = [ kernel ] ++ config.boot.extraModulePackages; + + boot.kernelModules = [ "loop" ]; + + # The Linux kernel >= 2.6.27 provides firmware. + hardware.firmware = [ "${kernel}/lib/firmware" ]; + + }; -in - -###### implementation -let - kernelPackages = config.boot.kernelPackages; - kernel = kernelPackages.kernel; -in - -{ - require = [ options ]; - - system.build = { inherit kernel; }; - system.modulesTree = [ kernel ] ++ config.boot.extraModulePackages; - - boot.kernelModules = [ "loop" ]; - - # The Linux kernel >= 2.6.27 provides firmware. - hardware.firmware = [ "${kernel}/lib/firmware" ]; }