#!/bin/sh #extracting info from drives data=$(mount -l | sed -nE 's|([^ ]*) on \/boot.*|\1|p') #extracting drive name drive=$(printf '%s' "$data" | sed -nE 's|(.*nvme.*)p[0-9]*$|\1|p;s|(.*[s|v]d[a-z])[0-9]*$|\1|p') #extracting efi partition efi_part_no=$(printf '%s' "$data" | sed -nE 's/.*([0-9])$/\1/p') #extracting root partition root_part=$(sed -nE 's|^([^#][^ ]*).*/ .*|\1|p' /etc/fstab | tr -d '\t') #extracting ur OS name from os-release os_name=$(sed -nE 's/^NAME="([^"]*)"/\1/p' /etc/os-release) #checking for swap(this is currently not called in final command as not most people use hibernate..) lsblk | grep -q 'SWAP' && swap="resume=$(blkid | sed -nE 's/.*(UUID[^ ]*).*swap.*/\1/p' | sed 's/"//g') " #checking for ucode in ur /boot ls /boot/ | grep -q 'ucode' && ucode=" initrd=\\$(find /boot/ | sed -nE 's|.*/(.*code.*)|\1|p')" #fetching kernels list in /boot kernel=$(ls /boot/ | sed -nE 's|(vmlinuz-.*)|\1|p') #iterating kernel for i in $kernel;do kernel_ver=$(printf '%s' "$i" | sed -nE 's/vmlinuz-(.*)/\1/p') grep -q 'Arch Linux' /etc/os-release && initrd=$(ls /boot/ | sed -nE "s|(init.*$kernel_ver\.img)|\1|p") || initrd=$(ls /boot/ | sed -nE "s|(init.*$kernel_ver.*)|\1|p") [ -z "$initrd" ] && continue printf "\n\033[1;35mKernel : \033[1;32m%s\n" "$(printf "%s" "$i" | sed -nE 's/vmlinuz-(.*)/\1/p')" command="efibootmgr --create --disk $drive --part $efi_part_no --label '${os_name}' --loader /$i --unicode 'root=$root_part rw initrd=\\${initrd}${ucode}'" printf "\033[1;36m%s\n" "$command" done