#!/bin/sh

find_grub_probe_path() {
    if which grub-probe >/dev/null 2>&1; then
        which grub-probe
    elif which grub2-probe >/dev/null 2>&1; then
        which grub2-probe
    else
        echo "XXX"
    fi
}

find_grub_mkconfig_path() {
    if which grub-mkconfig >/dev/null 2>&1; then
        which grub-mkconfig
    elif which grub2-mkconfig >/dev/null 2>&1; then
        which grub2-mkconfig
    else
        echo "XXX"
    fi
}

find_grub_config_path() {
    for i in grub.cfg grub2.cfg grub-efi.cfg grub2-efi.cfg; do
        if readlink -f -e /etc/$i > /dev/null; then
            cfgfile=$(readlink -f -e /etc/$i)
            echo $cfgfile
            return
        fi
    done
    
    for t in /boot/grub/grub.cfg /boot/grub2/grub.cfg; do
        if grep -q 'BEGIN' $t 2>/dev/null; then
            echo $t
            return
        fi
    done
    
    echo "xx"
}

update_grub_config() {
    GRUB_UPDATE=""
    if update-grub -V > /dev/null 2>&1; then
        GRUB_UPDATE=update-grub
    elif update-grub2 -V > /dev/null 2>&1; then
        GRUB_UPDATE=update-grub2
    else
        vgrubcfg=$(find_grub_config_path)
        mkconfig=$(find_grub_mkconfig_path)

        if [ -f $mkconfig -a -f $vgrubcfg ]; then
            GRUB_UPDATE="$mkconfig -o $vgrubcfg"
        else
            echo "no grub.cfg found."
            return
        fi
    fi

    if [ -n "$GRUB_UPDATE" ]; then
        echo "update grub config $GRUB_UPDATE"
        $GRUB_UPDATE
    fi
}

USER=$(whoami)
if [ "$USER" != "root" ]; then
    echo "Please run this script as root or use sudo"
    echo ""
    exit 1
fi

update_grub_config
