134 lines
3.2 KiB
Bash
Executable File
134 lines
3.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
__find_esp__() {
|
|
local parttype
|
|
local fstype
|
|
local device
|
|
|
|
while read -r device; do
|
|
read -r parttype fstype ESP <<<"$(lsblk -o "PARTTYPE,FSTYPE,MOUNTPOINT" "$device" 2>/dev/null | awk 'NR==2')"
|
|
|
|
[[ "${parttype,,}" != "c12a7328-f81f-11d2-ba4b-00a0c93ec93b" ]] && continue
|
|
[[ "${fstype,,}" != "vfat" ]] && continue
|
|
[[ -z $(findmnt -sn "$ESP") ]] && continue
|
|
|
|
done <<<"$(fdisk -l 2>/dev/null | grep -i efi | cut -d " " -f 1)"
|
|
|
|
if [ -z "${ESP}" ]; then
|
|
ESP=$(grep -i "/efi" /etc/fstab | awk '{print $2}')
|
|
if [ -z "${ESP}" ]; then
|
|
ESP=$(grep -i "/boot" /etc/fstab | awk '{print $2}')
|
|
if [ -z "${ESP}" ]; then
|
|
ESP=$(bootctl --print-esp-path)
|
|
if [ -z "${ESP}" ]; then
|
|
exit 1
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
echo "Found ${ESP}"
|
|
readonly ESP
|
|
}
|
|
|
|
|
|
__has_esp__() {
|
|
__find_esp__
|
|
|
|
mount "$ESP" &>/dev/null
|
|
[[ -d "$ESP/EFI" ]] && return 0 || return 1
|
|
}
|
|
|
|
|
|
THEME_NAME="melawy-nier-a2"
|
|
install_dir="/usr/share/refind/themes"
|
|
|
|
|
|
echo "Searching rEFInd installation in EFI partition..."
|
|
if ! __has_esp__; then
|
|
echo "EFI partition not found" >&2
|
|
exit 1
|
|
fi
|
|
|
|
|
|
REFIND_DIR=$(find "${ESP}" -type d -iname refind)
|
|
if ! [[ -d "${REFIND_DIR}" ]]; then
|
|
echo "rEFInd not installed in $ESP" >&2
|
|
exit 1
|
|
fi
|
|
echo "Found rEFInd in ${REFIND_DIR}"
|
|
|
|
|
|
EFI_BOOT_DIR=$(find "$ESP" -type d -iname boot)
|
|
if ! [[ -d "${EFI_BOOT_DIR}" ]]; then
|
|
EFI_BOOT_DIR=$(find "$ESP" -type d -iname Boot)
|
|
if ! [[ -d "${EFI_BOOT_DIR}" ]]; then
|
|
EFI_BOOT_DIR=$(find "$ESP" -type d -iname BOOT)
|
|
if ! [[ -d "${EFI_BOOT_DIR}" ]]; then
|
|
mkdir -p "$(dirname ${REFIND_DIR})/boot"
|
|
EFI_BOOT_DIR="$(dirname ${REFIND_DIR})/boot"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
|
|
echo "Installing themes in ${REFIND_DIR}"
|
|
|
|
mkdir -p "${REFIND_DIR}/themes"
|
|
mkdir -p "${EFI_BOOT_DIR}/themes"
|
|
|
|
cp -vrf "${install_dir}/." "${REFIND_DIR}/themes/."
|
|
cp -vrf "${install_dir}/." "${EFI_BOOT_DIR}/themes/."
|
|
|
|
if [ -f "${REFIND_DIR}/refind_x64.efi" ]; then
|
|
# Remove all from "${EFI_BOOT_DIR}" except "themes"
|
|
# f_list=$(ls -1 "${EFI_BOOT_DIR}" | grep -v "themes")
|
|
#
|
|
# for i in ${f_list[@]}
|
|
# do
|
|
# rm -vr "${EFI_BOOT_DIR}/${i}"
|
|
# done
|
|
#
|
|
# unset f_list
|
|
|
|
# Copy all from "${REFIND_DIR}" to "${EFI_BOOT_DIR}" except "themes"
|
|
f_list=$(ls -1 "${REFIND_DIR}" | grep -v "themes")
|
|
|
|
for i in "${f_list[@]}"
|
|
do
|
|
if [ -f "${REFIND_DIR}/${i}" ]; then
|
|
cp -vf "${REFIND_DIR}/${i}" "${EFI_BOOT_DIR}/${i}"
|
|
fi
|
|
|
|
if [ -d "${REFIND_DIR}/${i}" ]; then
|
|
cp -vrf "${REFIND_DIR}/${i}" "${EFI_BOOT_DIR}/${i}"
|
|
fi
|
|
done
|
|
|
|
unset f_list
|
|
|
|
cp -vf "${REFIND_DIR}/refind_x64.efi" "${EFI_BOOT_DIR}/bootx64.efi"
|
|
fi
|
|
|
|
|
|
REFIND_CONF_PATH="${REFIND_DIR}/refind.conf"
|
|
|
|
cp -vf "/etc/refind-menu-generator/refind.conf" "${REFIND_DIR}/refind.conf"
|
|
|
|
RESULT=$(grep "theme" "${REFIND_CONF_PATH}")
|
|
|
|
if [[ "$?" = "0" ]]; then
|
|
CURRENT_THEME=$(echo "${RESULT}" | cut -d"/" -f2)
|
|
if [[ "$?" == "0" ]]; then
|
|
sed -e "s/${CURRENT_THEME}/${THEME_NAME}/g" -i "${REFIND_CONF_PATH}"
|
|
fi
|
|
else
|
|
if [[ -z "$(tail -n 1 -c 1 ${REFIND_CONF_PATH})" ]];then
|
|
echo "include themes/${THEME_NAME}/theme.conf" >> "${REFIND_CONF_PATH}"
|
|
else
|
|
echo -e "\ninclude themes/${THEME_NAME}/theme.conf" >> "${REFIND_CONF_PATH}"
|
|
fi
|
|
fi
|
|
|
|
cp -vf "${REFIND_DIR}/refind.conf" "${EFI_BOOT_DIR}/refind.conf"
|