#/bin/bash

# SISTEMA IN USO
# nome dispositivo disco del sistema in uso
ROOTMOUNT=$(mount |grep " / ")
DISKLETTER=${ROOTMOUNT:7:1}
PARTNUM=${ROOTMOUNT:8:1}

# trova i kernel presenti in /boot (non considera link simbolici abbreviati)
kernel=(`find /boot/ -name "vmlinuz*[0-9]"|cut -d/ -f3`)
ks=${#kernel[@]}
get_release=$(sed -n /PRETTY_NAME=/p /etc/os-release|cut -d\" -f2|tr ' ' \@)
release=(`for ((i=1; i<=$ks; i++)); do echo "$get_release"; done`)
rootdev=(`for ((i=1; i<=$ks; i++)); do echo "/dev/sd${DISKLETTER}${PARTNUM}"; done`)

# SISTEMI ALTRE PARTIZIONI
# trova sistemi in altre partizioni
probe=(`os-prober|tr ' ' @`)
probesize=${#probe[@]}
for (( i=0; i<$probesize; i++ )); do
	newrootdev+=(`cut -d':' -f1 <<< ${probe[$i]}`)
	newrelease+=(`cut -d':' -f2 <<< ${probe[$i]}`)
	newkernel+=(`linux-boot-prober ${newrootdev[$i]} |cut -d':' -f 4|grep '\-[0-9]'|cut -d'/' -f3`)
	for ((j=0; j<${#newkernel[@]}; j++)); do
		rootdev+=(${newrootdev[$i]})
		release+=(${newrelease[$i]})
		kernel+=(${newkernel[$j]})
	done
done
kss=${#kernel[@]}

write_grub() {
cat <<EOF
menuentry '${TITLE} ${KERNEL}' {
	savedefault
	load_video
	set gfxpayload=keep
	insmod gzio
	insmod part_gpt
	insmod ext2
	set root='hd${DISKNUM},gpt${PARTNUM}'
	echo	'caricamento linux ${K_VERSION}...'
	linux	/boot/vmlinuz-${K_TIPE}-${K_VERSION} root=/dev/sd${DISKLETTER}${PARTNUM} ro
EOF
if [ "x${K_TIPE}" = "xgeneric" ]; then
echo "	initrd /boot/initrd-${K_TIPE}-${K_VERSION}.img"
fi
echo "}"
}

for ((i=0; i<$kss; i++)); do
	TITLE=`tr @ \  <<< ${release[$i]}`
	KERNEL=${kernel[$i]}
	DISKLETTER=${rootdev[$i]:7:1}
	DISKNUM=`tr abcdefg 01234567 <<< $DISKLETTER`
	PARTNUM=${rootdev[$i]:8:1}
	K_VERSION=`cut -d\- -f3 <<< ${kernel[$i]}`
	K_TIPE=`cut -d\- -f2 <<< ${kernel[$i]}`
	write_grub
done
