diff --git a/system/kernel.nix b/system/kernel.nix
new file mode 100644
index 000000000000..6fd20a820f7c
--- /dev/null
+++ b/system/kernel.nix
@@ -0,0 +1,160 @@
+{pkgs, config, ...}:
+
+###### interface
+let
+ inherit (pkgs.lib) mkOption;
+
+ options = {
+ boot = {
+ kernelPackages = mkOption {
+ default = pkgs.kernelPackages;
+ example = pkgs.kernelPackages_2_6_25;
+ merge = backwardPkgsFunMerge;
+ 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
+ nvidiaDrivers.
+ ";
+ };
+
+ kernelParams = mkOption {
+ default = [
+ "selinux=0"
+ "apm=on"
+ "acpi=on"
+ "vga=0x317"
+ "console=tty1"
+ "splash=verbose"
+ ];
+ 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.
+ ";
+ };
+
+ extraModulePackages = mkOption {
+ default = [];
+ # !!! example = [pkgs.aufs pkgs.nvidiaDrivers];
+ description = ''
+ A list of additional packages supplying kernel modules.
+ '';
+ merge = backwardPkgsFunListMerge;
+ };
+
+ kernelModules = mkOption {
+ default = [];
+ description = "
+ The set of kernel modules to be loaded in the second stage of
+ the boot process. That is, these modules are not included in
+ the initial ramdisk, so they'd better not be required for
+ mounting the root file system. Add them to
+ if they are.
+ ";
+ };
+
+ 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.
+
+ # 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.
+ "ext3"
+
+ # Support USB keyboards, in case the boot fails and we only have
+ # a USB keyboard.
+ "ehci_hcd"
+ "ohci_hcd"
+ "usbhid"
+
+ # LVM.
+ "dm_mod"
+ ];
+ 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. If you want to add additional
+ modules, it's best to set
+ .
+ ";
+ };
+
+ extraKernelModules = mkOption {
+ default = [];
+ description = "
+ Additional kernel modules for the initial ramdisk. These are
+ loaded before the modules listed in
+ , so they take
+ precedence.
+ ";
+ };
+
+ };
+ };
+ };
+in
+
+###### implementation
+let
+ kernelPackages = config.boot.kernelPackages;
+ kernel = kernelPackages.kernel;
+in
+
+{
+ require = [
+ options
+ ];
+
+ system = {
+ # include kernel modules.
+ modulesTree = [ kernel ]
+ # this line should be removed!
+ ++ pkgs.lib.optional config.hardware.enableGo7007 kernelPackages.wis_go7007
+ ++ config.boot.extraModulePackages;
+ };
+}
diff --git a/system/options.nix b/system/options.nix
index fbb316dc53a0..3ebb06e4d49b 100644
--- a/system/options.nix
+++ b/system/options.nix
@@ -64,51 +64,6 @@ in
";
};
- kernelPackages = mkOption {
- default = pkgs.kernelPackages;
- example = pkgs.kernelPackages_2_6_25;
- merge = backwardPkgsFunMerge;
- 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
- nvidiaDrivers.
- ";
- };
-
- kernelParams = mkOption {
- default = [
- "selinux=0"
- "apm=on"
- "acpi=on"
- "vga=0x317"
- "console=tty1"
- "splash=verbose"
- ];
- 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.
- ";
- };
-
hardwareScan = mkOption {
default = true;
description = "
@@ -121,89 +76,8 @@ in
";
};
- extraModulePackages = mkOption {
- default = [];
- # !!! example = [pkgs.aufs pkgs.nvidiaDrivers];
- description = ''
- A list of additional packages supplying kernel modules.
- '';
- merge = backwardPkgsFunListMerge;
- };
-
- kernelModules = mkOption {
- default = [];
- description = "
- The set of kernel modules to be loaded in the second stage of
- the boot process. That is, these modules are not included in
- the initial ramdisk, so they'd better not be required for
- mounting the root file system. Add them to
- if they are.
- ";
- };
-
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.
-
- # 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.
- "ext3"
-
- # Support USB keyboards, in case the boot fails and we only have
- # a USB keyboard.
- "ehci_hcd"
- "ohci_hcd"
- "usbhid"
-
- # LVM.
- "dm_mod"
- ];
- 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. If you want to add additional
- modules, it's best to set
- .
- ";
- };
-
- extraKernelModules = mkOption {
- default = [];
- description = "
- Additional kernel modules for the initial ramdisk. These are
- loaded before the modules listed in
- , so they take
- precedence.
- ";
- };
-
allowMissing = mkOption {
default = false;
description = ''
@@ -295,17 +169,7 @@ in
merge = pkgs.lib.mergeListOption;
# Convert the list of path to only one path.
- apply = list: pkgs.aggregateModules (
- let
- kernelPackages = config.boot.kernelPackages;
- kernel = kernelPackages.kernel;
- in
- [ kernel ]
- ++ pkgs.lib.optional config.hardware.enableGo7007 kernelPackages.wis_go7007
- ++ config.boot.extraModulePackages
- # should only keep this one, other have to be set by the option owners.
- ++ list
- );
+ apply = pkgs.aggregateModules;
};
sbin = {
@@ -2405,6 +2269,7 @@ in
require = [
# boot (is it the right place ?)
+ (import ../system/kernel.nix)
(import ../boot/boot-stage-2.nix)
(import ../installer/grub.nix)