Advertisement
Guest User

crub.cfg

a guest
Jan 25th, 2023
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 15.26 KB | None | 0 0
  1. insmod font
  2. insmod keylayouts
  3. insmod part_msdos
  4. insmod part_gpt
  5.  
  6. export loaded
  7. export koptsok
  8. export disable_gfxterm
  9. export bootarch
  10. export firmware
  11. export firmware_found
  12. export from
  13. export fromiso
  14. export bootlang
  15. export keyboard
  16. export timezone
  17. export hwclock
  18. export def_bootlang
  19. export def_keyboard
  20. export def_timezone
  21. export menu_color_normal
  22. export menu_color_highlight
  23. export pager
  24.  
  25. function menu_help {
  26.     check_help
  27.     grub_help
  28. }
  29.  
  30. function check_help {
  31.     if [ -z "${koptsok}" ]; then
  32.         echo $"WARNING: nothing set"
  33.         echo $" System will use defaults"
  34.         echo  "  American English <> utc clock <> us "$"keyboard <> free drivers"
  35.         echo ""
  36.     fi
  37. }
  38.  
  39. function kopts_help {
  40.     echo $"Example boot command line arguments:"
  41.     echo $" Setup"
  42.     echo  "  lang=<language>_<variant> keytable=<layout>         tz=<region>/<city>"
  43.     echo  "  hostname=<name>           username=<name>"
  44.     echo $" Kernel"
  45.     echo  "  blacklist=<module>"
  46.     echo $" Video"
  47.     echo  "  <module>.modeset=0"
  48.     echo  "  radeon.modeset=0          nouveau.modeset=0         i915.modeset=0"
  49.     echo  "  video=VGA-1:1920x1080e    DVI-0:800x600"
  50.     echo ""
  51. }
  52.  
  53. function grub_help {
  54.     echo $"To use the menu:"
  55.     echo $" press up or down to move between items"
  56.     echo $" press enter or right to select the item"
  57.     echo $" press e to edit the current item"
  58.     echo $" press c to go to the grub command line"
  59.     echo ""
  60.     echo $"Simply edit the first line of most menus to control them"
  61.     echo $"Select or edit the blank line to enter command line arguments"
  62.     echo ""
  63. }
  64.  
  65. function menu_reload {
  66.     configfile /boot/grub/grub.cfg
  67. }
  68.  
  69. function menu_continue {
  70.     echo -n $"Press Enter to continue"
  71.     read mcont
  72. }
  73.  
  74. function prompt {
  75.     echo -n "> "
  76. }
  77.  
  78. function is_efi {
  79.     if [ "${grub_platform}" = "efi" ]; then
  80.         return 0
  81.     fi
  82.     return 1
  83. }
  84.  
  85. function efi_detect {
  86.     if is_efi ; then
  87.         submenu --class=find.efi --hotkey=f "Detect EFI bootloaders" {
  88.             efi_found=false
  89.  
  90.             for efi in (*,gpt*)/efi/*/*.efi (*,gpt*)/efi/*/*/*.efi (*,gpt*)/*.efi (*,gpt*)/*/*.efi ; do
  91.                 regexp --set=1:efi_device '^\((.*)\)/' "${efi}"
  92.                 if [ -e "${efi}" ]; then
  93.                     efi_found=true
  94.  
  95.                     menuentry --class=efi "${efi}" "${efi_device}" {
  96.                         root="${2}"
  97.                         chainloader "${1}"
  98.                     }
  99.                 fi
  100.             done
  101.  
  102.             if [ "${efi_found}" != true ]; then
  103.                 menuentry --hotkey=q --class=find.none "No EFI files detected." {menu_reload}
  104.             else
  105.                 menuentry --hotkey=q --class=cancel "Cancel" {menu_reload}
  106.             fi
  107.         }
  108.     fi
  109. }
  110.  
  111. function memtest_detect {
  112.     if ! is_efi; then
  113.         if [ -f /boot/memtest ]; then
  114.             menuentry --class=memtest --hotkey=m "Memory Test" {linux16 /boot/$1}
  115.         fi
  116.     fi
  117. }
  118.  
  119. function lang_setup {
  120.     source /boot/grub/locales/${1}
  121.     menu_reload
  122. }
  123.  
  124. function lang_menu {
  125.     menuentry --class=lang.${ll} "lang=${ll}" "${ll}" {lang_setup "${2}"}
  126. }
  127.  
  128. function show_timezones {
  129.     submenu --class=tz --hotkey=t "tz=${def_timezone}" {# set the timezone above with the editor
  130.         if [ -n "$1" ];then
  131.             if [ "$1" = "tz=${def_timezone}" ]; then
  132.                 default=0
  133.                 menuentry --class=cancel --hotkey=q "Cancel (${def_timezone})" {menu_reload}
  134.                 for tt in Africa America Asia Atlantic Australia Etc Europe Pacific; do
  135.                     submenu --class=tz.${tt} "${tt}" {
  136.                         menuentry --class=cancel --hotkey=q "Cancel (${def_timezone})" {menu_reload}
  137.                         source "/boot/grub/tz/${1}"
  138.                     }
  139.                 done
  140.             else
  141.                 regexp -s newtz '^tz=(.*)' "$1"
  142.                 if [ -z "$newtz" ]; then
  143.                     def_timezone="$1"
  144.                 else
  145.                     def_timezone="$newtz"
  146.                 fi
  147.                 timezone="tz=$def_timezone"
  148.                 menu_reload
  149.             fi
  150.         fi
  151.     }
  152. }
  153.  
  154. function show_keymaps {
  155.     submenu --class=kbd --hotkey=k "keytable=${def_keyboard}" {# set the timezone above with the editor
  156.         if [ -n "$1" ]; then
  157.             if [ "$1" = "keytable=${def_keyboard}" ]; then
  158.                 default=0
  159.                 menuentry --class=cancel --hotkey=q "Cancel (${def_keyboard})" {menu_reload}
  160.                 source /boot/grub/locales/keyboards
  161.             else
  162.                 regexp -s newkey '^keytable=(.*)' "$1"
  163.                 if [ -z "$newkey" ]; then
  164.                     def_keyboard="$1"
  165.                 else
  166.                     def_keyboard="$newkey"
  167.                 fi
  168.                 keyboard="keytable=$def_keyboard"
  169.                 menu_reload
  170.             fi
  171.         fi
  172.     }
  173. }
  174.  
  175. function show_languages {
  176.     submenu --hotkey=l --class=lang "lang=${def_bootlang}" {# set the timezone above with the editor
  177.         if [ -n "$1" ]; then
  178.             if [ "$1" = "lang=${def_bootlang}" ]; then
  179.                 default=0
  180.                 menuentry --class=lang.${def_bootlang} "lang=${def_bootlang}" {menu_reload}
  181.                 menuentry --class=lang.cs "Čeština" {lang_setup "cs_CZ"}
  182.                 menuentry --class=lang.da "Dansk" {lang_setup "da_DK"}
  183.                 submenu --class=lang.de "Deutsch" {
  184.                     for ll in de_DE de_AT de_BE de_CH de_LI de_LU; do
  185.                         lang_menu ${ll}
  186.                     done
  187.                 }
  188.                 submenu --class=lang.el "Ελληνικά" {
  189.                     for ll in el_GR el_CY; do
  190.                         lang_menu ${ll}
  191.                     done
  192.                 }
  193.                 submenu --class=lang.en "English" {
  194.                     for ll in en_US en_AG en_AU en_BW en_CA en_DK en_GB en_HK en_IE en_IN en_NG en_NZ en_PH en_SG en_ZA en_ZW; do
  195.                         lang_menu ${ll}
  196.                     done
  197.                 }
  198.                 submenu --class=lang.es "Español" {
  199.                     for ll in es_ES es_AR es_BO es_CL es_CO es_CR es_DO es_EC es_GT es_HN es_MX es_NI es_PA es_PE es_PR es_PY es_SV es_US es_UY es_VE; do
  200.                         lang_menu ${ll}
  201.                     done
  202.                 }
  203.                 submenu --class=lang.fr "Français" {
  204.                     for ll in fr_FR fr_BE fr_CA fr_CH fr_LU fr_NC; do
  205.                         lang_menu ${ll}
  206.                     done
  207.                 }
  208.                 menuentry --class=lang.he "עִבְרִית" {lang_setup "he_IL"}
  209.                 submenu --class=lang.it "Italiano" {
  210.                     for ll in it_IT it_CH; do
  211.                         lang_menu ${ll}
  212.                     done
  213.                 }
  214.                 menuentry --class=lang.ja "日本語" {lang_setup "ja_JP"}
  215.                 submenu --class=lang.nl "Nederlands" {
  216.                     for ll in nl_NL nl_AW nl_BE; do
  217.                         lang_menu ${ll}
  218.                     done
  219.                 }
  220.                 menuentry --class=lang.pl "Polski" {lang_setup "pl_PL"}
  221.                 submenu --class=lang.pt "Português" {
  222.                     for ll in pt_BR pt_PT; do
  223.                         lang_menu ${ll}
  224.                     done
  225.                 }
  226.                 menuentry --class=lang.ro "Română" {lang_setup "ro_RO"}
  227.                 submenu --class=lang.ru "Русский" {
  228.                     for ll in ru_RU ru_UA;do
  229.                         lang_menu ${ll}
  230.                     done
  231.                 }
  232.                 submenu --class=lang.zh "中文" {
  233.                     for ll in zh_CN zh_TW; do
  234.                         lang_menu ${ll}
  235.                     done
  236.                 }
  237.             else
  238.                 regexp -s newlang '^lang=(.*)' "$1"
  239.                 if [ -z "$newlang" ]; then
  240.                     def_bootlang="$1"
  241.                 else
  242.                     def_bootlang="$newlang"
  243.                 fi
  244.                 bootlang="lang=$def_bootlang"
  245.                 if [ -f /boot/grub/locales/${def_bootlang} ]; then
  246.                     source /boot/grub/locales/${def_bootlang}
  247.                 fi
  248.                 menu_reload
  249.             fi
  250.         fi
  251.     }
  252. }
  253.  
  254. function boot_menu {
  255.     if [ "${hwclock}" = "utc=yes" ]; then
  256.         class="utc"
  257.         title="utc"
  258.         clockset=""
  259.     elif [ "${timezone}${bootlang}" = "" ]; then
  260.         class="unset"
  261.         title="utc"
  262.         clockset=""
  263.     else
  264.         title="${def_timezone}"
  265.         class="tz.${def_timezone}"
  266.         clockset="utc=yes"
  267.     fi
  268.     min2d="$MINUTE"
  269.     if regexp '(^.$)' "$min2d"; then
  270.         min2d="0${min2d}"
  271.     fi
  272.     hour2d="$HOUR"
  273.     if regexp '(^.$)' "$hour2d"; then
  274.         hour2d="0${hour2d}"
  275.     fi
  276.     menuentry --class=tz.$class --hotkey=u "System time $hour2d:$min2d $title " "$clockset" {
  277.         hwclock="$2"
  278.         menu_reload
  279.     }
  280.     show_timezones
  281.     show_keymaps
  282.     show_languages
  283.     default=4
  284. }
  285.  
  286. function boot_defaults {
  287.     source /boot/grub/defaults.cfg
  288. }
  289.  
  290. function grub_reboot {
  291.     menuentry " " {true}
  292.     menuentry --class=reboot "Reboot!" {reboot}
  293. }
  294.  
  295. function grub_bios_installed {
  296.     if ! is_efi;  then
  297.         menuentry "" {true}
  298.         menuentry --class=manjaro "Installed BIOS-System on $installed" {exit}
  299.     fi
  300. }
  301.  
  302. function grub_efi_installed {
  303.     if is_efi; then
  304.         menu "" {true}
  305.         menu --class=manjaro "Installed EFI-System on $installed" {exit}
  306.     fi
  307. }
  308.  
  309.  
  310. function check {
  311.     cliname="$1"
  312.     varname="$2"
  313.     if [ "${optname}" != "${cliname}" ]; then
  314.         return 1
  315.     fi
  316.     if [ -z "$varname" ]; then
  317.         varname="${cliname}"
  318.     fi
  319.     if [ -z "${optval}" ]; then
  320.         eval ${varname}="${cliname}"
  321.     else
  322.         eval ${varname}="${cliname}=${optval}"
  323.         if [ "${optname}" = "lang" ]; then
  324.             lang_setup ${optval}
  325.         elif [ "${optname}" = "keytable" ]; then
  326.             def_keyboard="${optval}"
  327.         elif [ "${optname}" = "tz" ]; then
  328.             def_timezone="${optval}"
  329.         fi
  330.     fi
  331.     return 0
  332. }
  333.  
  334. function checkinput {
  335.     newinput="$1"
  336.     newoutput=""
  337.     for newcli in ${newinput} ; do
  338.     optname=""
  339.     optval=""
  340.     optdone=""
  341.     regexp -s optname '^(.+)=.*$' "${newcli}"
  342.     if [ -z "${optname}" ]; then
  343.         optname="${newcli}"
  344.     else
  345.         regexp -s optval '^.+=(.*)$' "${newcli}"
  346.     fi
  347.     for tocheck in "lang bootlang" "keytable keyboard" "tz timezone" "utc hwclock"; do
  348.         if check $tocheck ; then
  349.             optdone="Y"
  350.             break
  351.         fi
  352.     done
  353.     if [ -z "${optdone}" ]; then
  354.         if [ -z "${newoutput}" ]; then
  355.             newoutput="${newcli}"
  356.         else
  357.             newoutput="${newoutput} ${newcli}"
  358.         fi
  359.     fi
  360.     done
  361. }
  362.  
  363. function new2cli {
  364.     newinput="$1"
  365.     if [ -n "$newinput" ]; then
  366.         checkinput "$newinput"
  367.         if [ -n "${newoutput}" ]; then
  368.             newinput="${newoutput}"
  369.             if [ -n "$clinput" ]; then
  370.                 clinput="$clinput $newinput"
  371.             else
  372.                 clinput="$newinput"
  373.             fi
  374.             export clinput
  375.         fi
  376.     fi
  377. }
  378.  
  379. function getargs {
  380.     args=""
  381.     for a in $@; do
  382.         if [ -n "${a}" ]; then
  383.             args="${args} ${a}"
  384.         fi
  385.     done
  386. }
  387.  
  388. function bootcheck {
  389.     getargs
  390. }
  391.  
  392. pager=1
  393.  
  394. insmod regexp
  395. insmod datehook
  396. if ! is_efi; then
  397.     insmod part_gpt
  398. fi
  399.  
  400. if is_efi; then
  401.     insmod efi_gop
  402.     insmod efi_uga
  403. fi
  404.  
  405. if [ -z "${loaded}" ]; then
  406.     iscd=""
  407.     auto=""
  408.     regexp -s iscd '^(cd)' "${root}"
  409.     if [ "${iscd}" != "cd" -a -e (cd) ]; then
  410.         probe -s cdp -u cd
  411.         probe -s hdp -u $root
  412.         if [ -n "$cdp" -a "$cdp" = "$hdp" ]; then
  413.             iscd="cd"
  414.         fi
  415.     fi
  416.     if [ "${root}" != "hd96" -a "${iscd}" != "cd" ]; then
  417.         auto="${auto}"
  418.     fi
  419.     source /boot/grub/variable.cfg
  420.     loaded=true
  421.  
  422.     if keystatus --shift; then
  423.         disable_gfxterm=true
  424.     fi
  425.  
  426.     if [ "${disable_gfxterm}" != "true" ]; then
  427.         if loadfont /boot/grub/unicode.pf2 ; then
  428.             if [ -z "$gfxmode" ] ; then
  429.                 gfxmode=1024x768,auto # 1280x1024,1024x768,800x600,640x480 possible value
  430.                 gfxpayload=keep
  431.             fi
  432.             if keystatus --ctrl; then
  433.                 gfxok=""
  434.                 pager=0
  435.                 while [ -z "$gfxok" ]; do
  436.                     echo "gfxmode=$gfxmode"
  437.                     echo "Input new mode or Enter to confirm"
  438.                     prompt
  439.                     read gfxmodein
  440.                     if [ -n "$gfxmodein" ]; then
  441.                         gfxmode="$gfxmodein"
  442.                         echo ""
  443.                     else
  444.                         gfxok="true"
  445.                     fi
  446.                 done
  447.             fi
  448.             insmod all_video
  449.             insmod gfxterm
  450.             if terminal_output --append gfxterm; then
  451.                 terminal_output --remove console
  452.             else
  453.                 disable_gfxterm=true
  454.             fi
  455.         else
  456.             disable_gfxterm=true
  457.         fi
  458.     fi
  459.  
  460.     if [ "${disable_gfxterm}" != "true"  -a -f "${grub_theme}" ]; then
  461.         insmod gfxmenu
  462.         themedir=""
  463.         regexp -s themedir '^(.*)/.*$' "${grub_theme}"
  464.         for themefont in $themedir/*.pf2 $themedir/f/*.pf2; do
  465.             if [ -f "${themefont}" ]; then
  466.                 loadfont "${themefont}"
  467.             fi
  468.         done
  469.         for imagetype in jpg jpeg png tga; do
  470.             for themeimage in ${themedir}/*.${imagetype}; do
  471.                 if [ -f "${themeimage}" ]; then
  472.                     if [ "${imagetype}" = "jpg" ]; then
  473.                         insmod jpeg
  474.                     else
  475.                         insmod $imagetype
  476.                     fi
  477.                 fi
  478.             done
  479.         done
  480.         theme=${grub_theme}
  481.         export theme
  482.     fi
  483.  
  484.     menu_color_normal=cyan/blue
  485.     menu_color_highlight=white/blue
  486.  
  487.     if [ -n "${iso_path}" ]; then
  488.         auto="img_dev=/dev/disk/by-uuid/${rootuuid} img_loop=${iso_path}"
  489.     fi
  490.    
  491.     export auto
  492. fi
  493.  
  494. boot_defaults
  495.  
  496. for kopt in "${clinput}" "${bootlang}" "${keyboard}" "${timezone}" "${hwclock}" "${auto}"; do
  497.     if [ -n "${kopt}" ]; then
  498.         kopts="${kopts} ${kopt}"
  499.     fi
  500. done
  501. if [ -n "${bootlang}${keyboard}${timezone}" ]; then
  502.     koptsok="true"
  503. fi
  504.  
  505. boot_menu
  506.  
  507. source /boot/grub/kernels.cfg
  508. if [ -n "$clinput" ]; then
  509.     menuentry --class=edit "$clinput" {
  510.         if [ -n "$1" ]; then
  511.             clinput="$@"
  512.         else
  513.             unset clinput
  514.         fi
  515.         menu_reload
  516.     }
  517. fi
  518. menuentry --class=type --hotkey=tab "Edit boot options" {# set arguments above with the editor
  519.     getargs $@
  520.     pager=0
  521.     if [ -z "$args" ]; then
  522.         check_help
  523.         kopts_help
  524.         echo $"Input command line options, press Enter to continue"
  525.         prompt
  526.         read newinput
  527.     else
  528.         newinput="$args"
  529.     fi
  530.     new2cli "$newinput"
  531.     pager=1
  532.     menu_reload
  533. }
  534. menuentry --hotkey=h --class=help "Help" {
  535.     pager=0
  536.     menu_help
  537.     menu_continue
  538.     pager=1
  539. }
  540. efi_detect
  541. memtest_detect
  542. search --no-floppy --file /etc/issue --set installed
  543. grub_bios_installed
  544. grub_efi_installed
  545. grub_reboot
Tags: GRUB
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement