# Super Grub Disk Main Configuration file
# Copyright (C) 2009,2010,2011,2012,2013,2014,2015 Adrian Gibanel Lopez.
#
# Super Grub Disk is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Super Grub Disk is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Super Grub Disk. If not, see <http://www.gnu.org/licenses/>.
# Configure gfxterm, but allow it to be disabled by holding shift during boot.
# gfxterm is required to display non-ASCII translations.
loadfont "$prefix/unifont.pf2"
if keystatus --shift; then
disable_gfxterm=true
# export disable_gfxterm is needed so that the setting will persist even after
# a "configfile /boot/grub/main.cfg" (which is what language_select.cfg does after
# you select a new language)
export disable_gfxterm
# The following strings are intentionally not made translateable.
echo "It has been detected that the shift key was held down. Because of this SG2D"
echo "will use VGA text mode rather than gfxterm. This will cause display problems"
echo "when using some non-English translations."
echo
echo "Press escape to continue to the main menu"
sleep --interruptible 9999
fi
if [ "$disable_gfxterm" != true ]; then
insmod all_video
gfxmode=640x480
if terminal_output --append gfxterm
then
terminal_output --remove console
fi
fi
# Export the variables so that they persist when loading a new menu.
export menu_color_normal
export menu_color_highlight
export menu_color_background
export bwcolor
function set_sgd_colors {
if [ "$bwcolor" = "yes" ]; then
menu_color_normal=white/black
menu_color_highlight=black/white
menu_color_background=black/white
else
menu_color_normal=white/brown
menu_color_highlight=white/blue
menu_color_background=yellow/cyan
fi
}
set_sgd_colors
# Set secondary_locale_dir to the directory containing SG2D specific mo files.
# This makes grub aware of translations for SG2D specific strings.
secondary_locale_dir="${prefix}/sgd_locale/"
insmod part_acorn
insmod part_amiga
insmod part_apple
insmod part_bsd
insmod part_gpt
insmod part_msdos
insmod part_sun
insmod part_sunpc
function process_main_option {
set option_cfg="$1"
source "${option_cfg}"
menuentry "${option_title}" "${option_cfg}" {
set chosen=""
export chosen
set sourced_cfgs="${2}"
export sourced_cfgs
configfile "${prefix}/processoption.cfg"
}
}
function process_option {
set option_cfg="$1"
source "${option_cfg}"
menuentry "${finaloption_tab_str}${option_title}" "${option_cfg}" {
set chosen=""
export chosen
set sourced_cfgs="${2}"
export sourced_cfgs
configfile "${prefix}/processoption.cfg"
}
}
function process_enable {
set option_cfg="$1"
set forced_prefix="$2"
if [ "$forced_prefix" = "rootmenu" ]; then
menu_prefix_str=""
else
menu_prefix_str="${finaloption_tab_str}"
fi
source "${option_cfg}"
menuentry "${menu_prefix_str}${option_title}" "${option_cfg}" {
set chosen=""
export chosen
set sourced_cfgs="${2}"
export sourced_cfgs
configfile "${prefix}/processenable.cfg"
}
}
function submenu_title {
menuentry "${secondoption_prefixtab_str}${chosen}${secondoption_postfixtab_str}" {
sleep 1s
}
}
# Timeout for menu
set timeout=10
# Set default boot entry as Entry number 2 (counting from 0)
set default=2
# Init Super Grub2 Disk variables
insmod regexp
regexp -s "sg2d_dev_name" '^\((.*)\).*$' "$prefix"
rmmod regexp
export sg2d_dev_name
# Get the version number for this Super GRUB2 Disk release
source "${prefix}/version.cfg"
# Get design variables
source "${prefix}/design.cfg"
menuentry " ====---==- Super Grub2 Disk $sgrub_version -==---==== " {
# Set pager=1 so ls output doesn't scroll past the top of the screen
# but restore $pager to its previous value when finished
set oldpager="${pager}"
set pager=1
cat /boot/grub/AUTHORS
cat /boot/grub/COPYING
set pager="${oldpager}"
unset oldpager
echo $"Press escape to return to the main menu"
sleep --interruptible 9999
}
process_main_option "${prefix}/language_select.cfg"
process_enable "${prefix}/gen8.cfg" rootmenu
# Everything
menuentry $"Detect and show boot methods" {
configfile "${prefix}/everything.cfg"
}
process_enable "${prefix}/enableraidlvm.cfg" rootmenu
process_enable "${prefix}/enablenative.cfg" rootmenu
submenu $"Boot manually""${three_dots_str}" {
submenu_title
process_option "${prefix}/osdetect.cfg"
process_option "${prefix}/cfgextract.cfg"
process_option "${prefix}/cfgdetect.cfg"
process_option "${prefix}/menulstdetect.cfg"
process_option "${prefix}/grubdetect.cfg"
process_option "${prefix}/diskpartchainboot.cfg"
process_option "${prefix}/autoiso.cfg"
source "${prefix}/return.cfg"
}
submenu $"Extra GRUB2 functionality""${three_dots_str}" {
submenu_title
process_enable "${prefix}/enablelvm.cfg"
process_enable "${prefix}/enableraid.cfg"
process_enable "${prefix}/enableencrypted.cfg"
process_enable "${prefix}/enablenative.cfg"
process_enable "${prefix}/enableserial.cfg"
process_enable "${prefix}/searchfloppy.cfg"
process_enable "${prefix}/searchcdrom.cfg"
process_enable "${prefix}/searchsgd.cfg"
source "${prefix}/return.cfg"
}
menuentry $"Print devices/partitions" {
# Set pager=1 so ls output doesn't scroll past the top of the screen
# but restore $pager to its previous value when finished
set oldpager="${pager}"
set pager=1
ls -l
set pager="${oldpager}"
unset oldpager
echo $"Press escape to return to the main menu"
sleep --interruptible 9999
}
menuentry $"Color ON/OFF" {
if [ "$bwcolor" = 'yes' ]; then
bwcolor=no
else
bwcolor=yes
fi
set_sgd_colors
}
submenu $"Exit""${three_dots_str}" {
submenu_title
process_option "${prefix}/halt.cfg"
process_option "${prefix}/reboot.cfg"
source "${prefix}/return.cfg"
}
# If it exists, source $prefix/sgd_custom.cfg. This follows the same idea as
# grub-mkconfig generated grub.cfg files sourcing $prefix/custom.cfg, though
# it's less needed here since one could add custom code to this file directly
# whereas their distro might automatically overwrite /boot/grub/grub.cfg on
# kernel upgrades. The main motivation for adding this was the vmtest script
# which I use heavily during Super GRUB2 Disk development, but this feature
# might also be useful to others.
if [ -e "$prefix/sgd_custom.cfg" ]; then
source "$prefix/sgd_custom.cfg"
fi