From e4b0134a43262a1ccd7ede3747aa2f38b7913ea5 Mon Sep 17 00:00:00 2001 From: Nicolas Pierron Date: Fri, 2 Jan 2009 16:07:34 +0000 Subject: [PATCH] Add a grub configuration file. svn path=/nixos/branches/fix-style/; revision=13685 --- installer/grub.nix | 113 +++++++++++++++++++++++++++++++++++++++++++++ system/options.nix | 71 +--------------------------- system/system.nix | 9 +--- 3 files changed, 115 insertions(+), 78 deletions(-) create mode 100644 installer/grub.nix 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