#!/usr/bin/sh

set -euf

ROOT="$(awk '$2 == "/" {print $1}' /etc/fstab)"
TYPE="$(awk '$2 == "/" {print $3}' /etc/fstab)"
FLAGS="$(awk '$2 == "/" {print $4}' /etc/fstab)"
BOOT="$(awk '$2 == "/boot" {print $1}' /etc/fstab)"

if [ "$(echo $ROOT | wc -l)" -ne 1 ]
then
	echo 1>&2 'Could not find exactly one root entry!'
	exit 1
fi

if [ "$(echo $BOOT | wc -l)" -ne 1 ]
then
	echo 1>&2 'Could not find exactly one boot entry!'
	exit 1
fi

BOOT="/dev/$(lsblk -ndo pkname $BOOT)"

[ ! -b $BOOT ] && { echo 1>&2 "$BOOT does not exist, or is not a block device!"; exit 1; }

echo $ROOT | tr : \\n | while read dev
do
	[ ! -b $dev ] && { echo 1>&2 "/: $dev does not exist, or is not a block; exit 1; }
done

common="root=$ROOT rootfstype=$TYPE rootflags=$FLAGS rootdelay=0"

function create_boot() { # $1 = bootnum  $2 = extra params  $3 = Name
	efibootmgr -Bbq $1
	echo "$common $2" \
	| iconv -t UCS-2 \
	| efibootmgr --create -b $1 --disk "$BOOT" --loader "\\vmlinuz-linux" --label "$3" --UCS-2 -@ - \
	| grep "Boot0*$1"
}

create_boot 4 'initrd=\intel-ucode.img initrd=\initramfs-linux.img' 'Arch Linux'
create_boot 5 'initrd=\initramfs-linux-fallback.img' 'Arch Linux Fallback'
efibootmgr -qn 4
