nixpkgs/installer/grub-menu-builder.sh
Michael Raskin 58b29cd565 Added possibility to give configurations custom names.
svn path=/nixos/trunk/; revision=8915
2007-06-23 16:09:05 +00:00

98 lines
2 KiB
Bash

#! @bash@/bin/sh -e
export PATH=/empty
for i in @path@; do PATH=$PATH:$i/bin; done
default=$1
if test -z "$1"; then
echo "Syntax: grub-menu-builder.sh <DEFAULT-CONFIG>"
exit 1
fi
target=/boot/grub/menu.lst
tmp=$target.tmp
cat > $tmp << GRUBEND
# Automatically generated. DO NOT EDIT THIS FILE!
default=0
timeout=5
GRUBEND
addEntry() {
local name="$1"
local path="$2"
local shortSuffix="$3"
if ! test -e $path/kernel -a -e $path/initrd; then
return
fi
local kernel=$(readlink -f $path/kernel)
local initrd=$(readlink -f $path/initrd)
if test -n "@copyKernels@"; then
local kernel2=/boot/kernels/$(echo $kernel | sed 's^/^-^g')
if ! test -e $kernel2; then
cp $kernel $kernel2
fi
kernel=$kernel2
local initrd2=/boot/kernels/$(echo $initrd | sed 's^/^-^g')
if ! test -e $initrd2; then
cp $initrd $initrd2
fi
initrd=$initrd2
fi
local confName=$(if test -e $path/configuration-name; then
cat $path/configuration-name;
fi);
if test -n "$confName" ; then
name="$confName $3";
fi;
cat >> $tmp << GRUBEND
title $name
kernel $kernel systemConfig=$(readlink -f $path) init=$(readlink -f $path/init) $(cat $path/kernel-params)
initrd $initrd
GRUBEND
}
rm -rf /boot/kernels
if test -n "@copyKernels@"; then
mkdir -p /boot/kernels
fi
if test -n "$tmp"; then
addEntry "NixOS - Default" $default ""
fi
# Additional entries specified verbatim by the configuration.
cat >> $tmp <<EOF
@extraGrubEntries@
EOF
# Add all generations of the system profile to the menu, in reverse
# (most recent to least recent) order.
for generation in $(
(cd /nix/var/nix/profiles && ls -d system-*-link) \
| sed 's/system-\([0-9]\+\)-link/\1/' \
| sort -n -r); do
echo $generation
link=/nix/var/nix/profiles/system-$generation-link
date=$(stat --printf="%y\n" $link | sed 's/\..*//')
addEntry "NixOS - Configuration $generation ($date)" $link "$generation ($date)"
done
cp $tmp $target