diff --git a/installer/grub.nix b/installer/grub.nix
new file mode 100644
index 00000000000..7ae2dd8e7a5
--- /dev/null
+++ b/installer/grub.nix
@@ -0,0 +1,113 @@
+{pkgs, config, ...}:
+
+###### interface
+let
+ inherit (pkgs.lib) mkOption;
+
+ options = {
+ boot = {
+
+ grubDevice = mkOption {
+ default = "";
+ example = "/dev/hda";
+ description = "
+ The device on which the boot loader, Grub, will be installed.
+ If empty, Grub won't be installed and it's your responsibility
+ to make the system bootable.
+ ";
+ };
+
+ bootMount = mkOption {
+ default = "";
+ example = "(hd0,0)";
+ description = "
+ If the system partition may be wiped on reinstall, it is better
+ to have /boot on a small partition. To do it, we need to explain
+ to GRUB where the kernels live. Specify the partition here (in
+ GRUB notation.
+ ";
+ };
+
+ configurationName = mkOption {
+ default = "";
+ example = "Stable 2.6.21";
+ description = "
+ Grub entry name instead of default.
+ ";
+ };
+
+ extraGrubEntries = mkOption {
+ default = "";
+ example = "
+ title Windows
+ chainloader (hd0,1)+1
+ ";
+ description = "
+ Any additional entries you want added to the Grub boot menu.
+ ";
+ };
+
+ extraGrubEntriesBeforeNixos = mkOption {
+ default = false;
+ description = "
+ Wheter extraGrubEntries are put before the Nixos-default option
+ ";
+ };
+
+ grubSplashImage = mkOption {
+ default = pkgs.fetchurl {
+ url = http://www.gnome-look.org/CONTENT/content-files/36909-soft-tux.xpm.gz;
+ sha256 = "14kqdx2lfqvh40h6fjjzqgff1mwk74dmbjvmqphi6azzra7z8d59";
+ };
+ example = null;
+ description = "
+ Background image used for Grub. It must be a 640x480,
+ 14-colour image in XPM format, optionally compressed with
+ gzip or bzip2. Set to
+ null to run Grub in text mode.
+ ";
+ };
+
+ configurationLimit = mkOption {
+ default = 100;
+ example = 120;
+ description = "
+ Maximum of configurations in boot menu. GRUB has problems when
+ there are too many entries.
+ ";
+ };
+
+ };
+ };
+in
+
+
+###### implementation
+let
+
+ grubMenuBuilder = pkgs.substituteAll {
+ src = ../installer/grub-menu-builder.sh;
+ isExecutable = true;
+ inherit (pkgs) bash;
+ path = [pkgs.coreutils pkgs.gnused pkgs.gnugrep];
+ inherit (config.boot) copyKernels extraGrubEntries extraGrubEntriesBeforeNixos
+ grubSplashImage bootMount configurationLimit;
+ };
+in
+
+{
+ require = [
+ options
+
+ # config.system.build
+ (import ../system/system-options.nix)
+ ];
+
+ system = {
+ build = {
+ inherit grubMenuBuilder;
+ };
+ };
+
+ # and many other things that have to be moved inside this file.
+}
diff --git a/system/options.nix b/system/options.nix
index c52a2327463..f9be98fdcc1 100644
--- a/system/options.nix
+++ b/system/options.nix
@@ -55,27 +55,6 @@ in
";
};
- grubDevice = mkOption {
- default = "";
- example = "/dev/hda";
- description = "
- The device on which the boot loader, Grub, will be installed.
- If empty, Grub won't be installed and it's your responsibility
- to make the system bootable.
- ";
- };
-
- bootMount = mkOption {
- default = "";
- example = "(hd0,0)";
- description = "
- If the system partition may be wiped on reinstall, it is better
- to have /boot on a small partition. To do it, we need to explain
- to GRUB where the kernels live. Specify the partition here (in
- GRUB notation.
- ";
- };
-
resumeDevice = mkOption {
default = "";
example = "0:0";
@@ -103,14 +82,6 @@ in
";
};
- configurationName = mkOption {
- default = "";
- example = "Stable 2.6.21";
- description = "
- Grub entry name instead of default.
- ";
- };
-
kernelParams = mkOption {
default = [
"selinux=0"
@@ -276,38 +247,6 @@ in
";
};
- extraGrubEntries = mkOption {
- default = "";
- example = "
- title Windows
- chainloader (hd0,1)+1
- ";
- description = "
- Any additional entries you want added to the Grub boot menu.
- ";
- };
-
- extraGrubEntriesBeforeNixos = mkOption {
- default = false;
- description = "
- Wheter extraGrubEntries are put before the Nixos-default option
- ";
- };
-
- grubSplashImage = mkOption {
- default = pkgs.fetchurl {
- url = http://www.gnome-look.org/CONTENT/content-files/36909-soft-tux.xpm.gz;
- sha256 = "14kqdx2lfqvh40h6fjjzqgff1mwk74dmbjvmqphi6azzra7z8d59";
- };
- example = null;
- description = "
- Background image used for Grub. It must be a 640x480,
- 14-colour image in XPM format, optionally compressed with
- gzip or bzip2. Set to
- null to run Grub in text mode.
- ";
- };
-
extraTTYs = mkOption {
default = [];
example = [8 9];
@@ -321,15 +260,6 @@ in
";
};
- configurationLimit = mkOption {
- default = 100;
- example = 120;
- description = "
- Maximum of configurations in boot menu. GRUB has problems when
- there are too many entries.
- ";
- };
-
};
system = {
@@ -2509,6 +2439,7 @@ in
require = [
# boot (is it the right place ?)
(import ../boot/boot-stage-2.nix)
+ (import ../installer/grub.nix)
# system
(import ../system/system-options.nix)
diff --git a/system/system.nix b/system/system.nix
index 8271b97371c..0ef870b8806 100644
--- a/system/system.nix
+++ b/system/system.nix
@@ -196,14 +196,7 @@ rec {
# Script to build the Grub menu containing the current and previous
# system configurations.
- grubMenuBuilder = pkgs.substituteAll {
- src = ../installer/grub-menu-builder.sh;
- isExecutable = true;
- inherit (pkgs) bash;
- path = [pkgs.coreutils pkgs.gnused pkgs.gnugrep];
- inherit (config.boot) copyKernels extraGrubEntries extraGrubEntriesBeforeNixos
- grubSplashImage bootMount configurationLimit;
- };
+ grubMenuBuilder = config.system.build.grubMenuBuilder;
# Putting it all together. This builds a store object containing