2009-01-02 16:07:34 +00:00
|
|
|
{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
|
|
|
|
<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-05-27 23:14:38 +00: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 16:07:34 +00:00
|
|
|
};
|
|
|
|
};
|
|
|
|
in
|
|
|
|
|
|
|
|
|
|
|
|
###### implementation
|
|
|
|
let
|
|
|
|
|
|
|
|
grubMenuBuilder = pkgs.substituteAll {
|
2009-05-25 13:42:46 +00:00
|
|
|
src = ./grub-menu-builder.sh;
|
2009-01-02 16:07:34 +00:00
|
|
|
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
|
2009-05-25 13:42:46 +00:00
|
|
|
# ../system/system-options.nix
|
2009-01-02 16:07:34 +00:00
|
|
|
];
|
|
|
|
|
|
|
|
system = {
|
|
|
|
build = {
|
|
|
|
inherit grubMenuBuilder;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
# and many other things that have to be moved inside this file.
|
|
|
|
}
|