insmod gzio
insmod iso9660

if [ x$feature_default_font_path = xy ] ; then
   font=unicode
else
   font=$prefix/unicode.pf2
fi

set gfxmode=1024x768,640x480
# set kernel parameter vga=791
# do not specify color depth here (else efifb can fall back to 800x600)
set gfxpayload=1024x768
#set gfxmode=auto
#set gfxpayload=keep

if loadfont $font; then
    if test "${grub_platform}" = "efi"; then
        insmod efi_gop
        insmod efi_uga
    fi
    insmod video_bochs
    insmod video_cirrus
    insmod all_video
    insmod png
    insmod gfxterm
    set theme=/boot/grub/pvetheme/theme.txt
    export theme
    terminal_input console
    terminal_output gfxterm
fi

# Enable serial console
insmod serial
# FIXME: add below to our fixed-modules for next shim-review
insmod usbserial_common
insmod usbserial_ftdi
insmod usbserial_pl2303
insmod usbserial_usbdebug
if serial --unit=0 --speed=115200; then
    terminal_input --append serial
    terminal_output --append serial
    set show_serial_entry=y
fi

if [ -f auto-installer-mode.toml ]; then
    set timeout-style=menu
    set timeout=10

    menuentry 'Install Proxmox VE (Automated)' --class debian --class gnu-linux --class gnu --class os {
        echo        'Loading Proxmox VE Automatic Installer ...'
        linux       /boot/linux26 ro ramdisk_size=16777216 rw quiet splash=silent proxmox-start-auto-installer
        echo        'Loading initial ramdisk ...'
        initrd      /boot/initrd.img
     }
fi

menuentry 'Install Proxmox VE (Graphical)' --class debian --class gnu-linux --class gnu --class os {
    echo	'Loading Proxmox VE Installer ...'
    linux	/boot/linux26 ro ramdisk_size=16777216 rw quiet splash=silent
    echo	'Loading initial ramdisk ...'
    initrd	/boot/initrd.img
}

menuentry 'Install Proxmox VE (Terminal UI)' --class debian --class gnu-linux --class gnu --class os {
    set background_color=black
    echo    'Loading Proxmox VE Console Installer ...'
    linux   /boot/linux26 ro ramdisk_size=16777216 rw quiet splash=silent proxtui vga=788
    echo    'Loading initial ramdisk ...'
    initrd  /boot/initrd.img
}

if [ x"${show_serial_entry}" == 'xy' ]; then
    menuentry 'Install Proxmox VE (Terminal UI, Serial Console)' --class debian --class gnu-linux --class gnu --class os {
        echo	'Loading Proxmox Console Installer (serial) ...'
        linux	/boot/linux26 ro ramdisk_size=16777216 rw splash=verbose proxtui console=ttyS0,115200
        echo	'Loading initial ramdisk ...'
        initrd	/boot/initrd.img
    }
fi

submenu 'Advanced Options' {
    menuentry 'Install Proxmox VE (Graphical, Debug Mode)' --class debian --class gnu-linux --class gnu --class os {
        echo    'Loading Proxmox GUI Installer (debug) ...'
        linux   /boot/linux26 ro ramdisk_size=16777216 rw splash=verbose proxdebug vga=788
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.img
    }

    menuentry 'Install Proxmox VE (Terminal UI, Debug Mode)' --class debian --class gnu-linux --class gnu --class os {
        echo    'Loading Proxmox TUI Installer (debug) ...'
        linux   /boot/linux26 ro ramdisk_size=16777216 rw splash=verbose proxdebug proxtui vga=788
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.img
    }

    menuentry 'Install Proxmox VE (Serial Console Debug Mode)' --class debian --class gnu-linux --class gnu --class os {
        echo    'Loading Proxmox TUI Installer (serial, debug) ...'
        linux   /boot/linux26 ro ramdisk_size=16777216 rw splash=verbose proxdebug proxtui console=ttyS0,115200
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.img
    }

    if [ ! -f auto-installer-mode.toml ]; then
        menuentry 'Install Proxmox VE (Automated)' --class debian --class gnu-linux --class gnu --class os {
            echo        'Loading Proxmox VE Automatic Installer ...'
            linux       /boot/linux26 ro ramdisk_size=16777216 rw quiet splash=silent proxmox-start-auto-installer
            echo        'Loading initial ramdisk ...'
            initrd      /boot/initrd.img
         }
    fi

    menuentry 'Rescue Boot' --class debian --class gnu-linux --class gnu --class os {
        insmod lvm
        insmod ext2
        set tmproot=$root
        if test -e (lvm/pve-root)/boot/pve/vmlinuz; then
            echo 'LVM Rescue Boot ...'
            linux (lvm/pve-root)/boot/pve/vmlinuz ro ramdisk_size=16777216 root=/dev/mapper/pve-root
            initrd (lvm/pve-root)/boot/pve/initrd.img
            boot
        else
            insmod zfs
            search --no-floppy --label rpool --set root
            if test -e /ROOT/pve-1/@//boot/pve/vmlinuz; then
                echo 'ZFS Rescue Boot ...'
                linux /ROOT/pve-1/@//boot/pve/vmlinuz ro ramdisk_size=16777216 root=ZFS=rpool/ROOT/pve-1 boot=zfs
                initrd /ROOT/pve-1/@//boot/pve/initrd.img
                boot
            else
                echo 'ERROR: unable to find boot disk automatically.'
            fi
        fi
        set root=$tmproot
    }

    if test "${grub_platform}" = "pc"; then
        menuentry 'Test memory (memtest86+)' {
            linux /boot/memtest86+x64.bin
        }
    else
        if [ x$lockdown = xy ]; then
            menuentry 'Test memory (memtest86+) - requires secure-boot=off' {
                linux /boot/memtest86+x64.efi
            }
        else
            menuentry 'Test memory (memtest86+)' {
                linux /boot/memtest86+x64.efi
            }
        fi
        menuentry 'UEFI Firmware Settings' --id 'uefi-firmware' {
            fwsetup
        }
    fi
}
