2009-09-29 11:50:38 +02:00
|
|
|
{ config, pkgs, ... }:
|
2009-01-02 17:07:34 +01:00
|
|
|
|
2009-09-29 11:50:38 +02:00
|
|
|
with pkgs.lib;
|
2009-01-02 17:07:34 +01:00
|
|
|
|
|
|
|
let
|
|
|
|
|
|
|
|
grubMenuBuilder = pkgs.substituteAll {
|
2009-05-25 15:42:46 +02:00
|
|
|
src = ./grub-menu-builder.sh;
|
2009-01-02 17:07:34 +01:00
|
|
|
isExecutable = true;
|
2009-10-13 23:39:18 +02:00
|
|
|
grub = if config.boot.loader.grub.version == 1
|
|
|
|
then pkgs.grub
|
|
|
|
else pkgs.grub2;
|
2009-01-02 17:07:34 +01:00
|
|
|
inherit (pkgs) bash;
|
|
|
|
path = [pkgs.coreutils pkgs.gnused pkgs.gnugrep];
|
2009-09-29 11:50:38 +02:00
|
|
|
inherit (config.boot.loader.grub) copyKernels extraEntries extraEntriesBeforeNixOS
|
2009-10-13 23:39:18 +02:00
|
|
|
splashImage bootDevice configurationLimit version;
|
2009-01-02 17:07:34 +01:00
|
|
|
};
|
2009-09-29 11:50:38 +02:00
|
|
|
|
2009-01-02 17:07:34 +01:00
|
|
|
in
|
|
|
|
|
|
|
|
{
|
|
|
|
|
2009-09-29 11:50:38 +02:00
|
|
|
###### interface
|
|
|
|
|
|
|
|
options = {
|
|
|
|
|
|
|
|
boot.loader.grub = {
|
|
|
|
|
|
|
|
enable = mkOption {
|
|
|
|
default = true;
|
|
|
|
description = ''
|
|
|
|
Whether to enable the GRUB boot loader.
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
2009-10-13 23:39:18 +02:00
|
|
|
version = mkOption {
|
|
|
|
default = 1;
|
|
|
|
example = 2;
|
|
|
|
description = ''
|
|
|
|
The version of GRUB to use: <literal>1</literal> for GRUB Legacy
|
|
|
|
(versions 0.9x), or <literal>2</literal> for GRUB 2.
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
2009-09-29 11:50:38 +02:00
|
|
|
device = 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.
|
|
|
|
";
|
|
|
|
};
|
|
|
|
|
|
|
|
bootDevice = 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.
|
|
|
|
";
|
|
|
|
};
|
|
|
|
|
|
|
|
extraEntries = mkOption {
|
|
|
|
default = "";
|
|
|
|
example = "
|
|
|
|
title Windows
|
|
|
|
chainloader (hd0,1)+1
|
|
|
|
";
|
|
|
|
description = "
|
|
|
|
Any additional entries you want added to the Grub boot menu.
|
|
|
|
";
|
|
|
|
};
|
|
|
|
|
|
|
|
extraEntriesBeforeNixOS = mkOption {
|
|
|
|
default = false;
|
|
|
|
description = "
|
|
|
|
Whether extraEntries are included before the default option.
|
|
|
|
";
|
|
|
|
};
|
|
|
|
|
|
|
|
splashImage = mkOption {
|
2009-10-13 23:39:18 +02:00
|
|
|
default =
|
|
|
|
if config.boot.loader.grub.version == 1
|
|
|
|
then pkgs.fetchurl {
|
|
|
|
url = http://www.gnome-look.org/CONTENT/content-files/36909-soft-tux.xpm.gz;
|
|
|
|
sha256 = "14kqdx2lfqvh40h6fjjzqgff1mwk74dmbjvmqphi6azzra7z8d59";
|
|
|
|
}
|
|
|
|
# GRUB 1.97 doesn't support gzipped XPMs.
|
|
|
|
else pkgs.fetchurl {
|
|
|
|
url = http://www.gnu.org/graphics/winkler-gnu-blue.png;
|
|
|
|
sha256 = "0y8fvxalwxyid4k438k7c21bnv728qjsb92rqfapsmpv2bcj7f6k";
|
|
|
|
};
|
2009-09-29 11:50:38 +02:00
|
|
|
example = null;
|
|
|
|
description = "
|
|
|
|
Background image used for Grub. It must be a 640x480,
|
|
|
|
14-colour image in XPM format, optionally compressed with
|
|
|
|
<command>gzip</command> or <command>bzip2</command>. Set to
|
|
|
|
<literal>null</literal> 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.
|
|
|
|
";
|
|
|
|
};
|
2009-01-02 17:07:34 +01:00
|
|
|
|
2009-09-29 11:50:38 +02:00
|
|
|
copyKernels = mkOption {
|
|
|
|
default = false;
|
|
|
|
description = "
|
|
|
|
Whether the Grub menu builder should copy kernels and initial
|
|
|
|
ramdisks to /boot. This is necessary when /nix is on a
|
|
|
|
different file system than /boot.
|
|
|
|
";
|
|
|
|
};
|
|
|
|
|
2009-01-02 17:07:34 +01:00
|
|
|
};
|
Making modular my previous changes for armv5tel. I updated the way to use
grub. Its options are no more inside 'boot', but inside 'boot.loader.grub'.
I added a new bootloader configuration for nixos, generationsDir. It creates
/boot/default/{init,initrd,kernel,system} symlinks, and the same for the generations
in /boot/system-$gen/{init,initrd,kernel,system}.
I can program the u-boot loader to load /boot/default files always, and have
a minimal nixos boot loader installer functionality. Additionally, I can refer
to the other system generations easily, with a simple 'ls' in /boot.
svn path=/nixos/trunk/; revision=17460
2009-09-27 23:51:37 +02:00
|
|
|
|
2009-01-02 17:07:34 +01:00
|
|
|
};
|
2009-09-29 11:50:38 +02:00
|
|
|
|
|
|
|
|
|
|
|
###### implementation
|
2009-01-02 17:07:34 +01:00
|
|
|
|
2009-09-29 11:50:38 +02:00
|
|
|
config = mkIf config.boot.loader.grub.enable {
|
|
|
|
|
|
|
|
system.build.menuBuilder = grubMenuBuilder;
|
Making modular my previous changes for armv5tel. I updated the way to use
grub. Its options are no more inside 'boot', but inside 'boot.loader.grub'.
I added a new bootloader configuration for nixos, generationsDir. It creates
/boot/default/{init,initrd,kernel,system} symlinks, and the same for the generations
in /boot/system-$gen/{init,initrd,kernel,system}.
I can program the u-boot loader to load /boot/default files always, and have
a minimal nixos boot loader installer functionality. Additionally, I can refer
to the other system generations easily, with a simple 'ls' in /boot.
svn path=/nixos/trunk/; revision=17460
2009-09-27 23:51:37 +02:00
|
|
|
|
2009-09-29 11:50:38 +02:00
|
|
|
# Common attribute for boot loaders so only one of them can be
|
|
|
|
# set at once.
|
|
|
|
system.boot.loader.id = "grub";
|
|
|
|
system.boot.loader.kernelFile = "vmlinuz";
|
2009-10-13 23:39:18 +02:00
|
|
|
|
|
|
|
environment.systemPackages =
|
|
|
|
mkIf config.boot.loader.grub.enable
|
|
|
|
(let version = config.boot.loader.grub.version; in
|
|
|
|
assert version != 1 -> version == 2;
|
|
|
|
|
|
|
|
if version == 1
|
|
|
|
then [ pkgs.grub ]
|
|
|
|
else [ pkgs.grub2 ]);
|
|
|
|
|
2009-09-29 11:50:38 +02:00
|
|
|
# and many other things that have to be moved inside this file.
|
|
|
|
|
|
|
|
};
|
|
|
|
|
2009-01-02 17:07:34 +01:00
|
|
|
}
|