#!/usr/bin/env bash
set +e
DESTDIR=$(mktemp -d)
while [[ ! -b /dev/$mbr ]] ; do
    echo $(ls /sys/block/ | grep -v "loop")
    echo -n "Grub disk >>> "
    read mbr
done
source /usr/bin/pardus-mount-rootfs

if [[ -d /sys/firmware/efi/ ]]
then
    # if there is a /boot or /boot/efi (or both) partitions, mount them.
    for dir in "/boot" "/boot/efi"; do
        if [[ -d "$DESTDIR$dir" ]] && [[ $(grep "$dir " "$DESTDIR"/etc/fstab) ]] ; then
            chroot "$DESTDIR" mount "$dir"
        fi
    done
    mount --bind /sys/firmware/efi/efivars "$DESTDIR"/sys/firmware/efi/efivars
    if [[ ! $clear_efi ]] ; then
        read -p "Clear efi vars manually? [y/N] >>> " clear_efi
    fi
    [[ $clear_efi == "y" ]] && { rm -f "$DESTDIR"/sys/firmware/efi/efivars/Boot*; }
    [[ "$(cat /sys/firmware/efi/fw_platform_size)" == "64" ]] && efi64="1" || efi32="1"
else
  legacy="1"
fi

for kernel in $(ls "$DESTDIR"/lib/modules) ; do
    chroot "$DESTDIR" depmod -a $kernel
    chroot "$DESTDIR" update-initramfs -u -k $kernel
done
chroot "$DESTDIR" apt update || true
chroot "$DESTDIR" apt install --reinstall ${legacy:+grub-pc-bin} ${efi64:+grub-efi-amd64-bin} ${efi32:+grub-efi-ia32-bin} grub-common -yq || true
chroot "$DESTDIR" grub-install --force /dev/$mbr

# EFI hack for hardcoded winzort bootloader bioses.
if [[ -f "$DESTDIR"/boot/efi/pardus/bootx64.efi ]] ; then # amd64 only
    mkdir -p "$DESTDIR"/boot/efi/EFI/Microsoft/Boot/
    if [[ -f ""$DESTDIR"/boot/efi/EFI/Microsoft/Boot/bootmgfw.efi" ]] ; then
        mv "$DESTDIR"/boot/efi/EFI/Microsoft/Boot/bootmgfw.efi \
            "$DESTDIR"/boot/efi/EFI/Microsoft/Boot/bootmgfw-winzort.efi
    fi
    cp "$DESTDIR"/boot/efi/pardus/bootx64.efi \
        "$DESTDIR"/boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
fi

chroot "$DESTDIR" grub-mkconfig -o /boot/grub/grub.cfg
if [[ -d /sys/firmware/efi/ ]] ; then
    while umount -lf "\"$DESTDIR\"/sys/firmware/efi/efivars" 2>/dev/null ; do : ;done
fi
for dir in dev/pts dev sys proc ; do
    while umount -lf "\"$DESTDIR\"/$dir" 2>/dev/null; do : ;done
done
umount -lf "$DESTDIR"  2>/dev/null
