#!/bin/bash -e package=0 process_preset() { if [[ -n "${pkgbase}" && -e $preset ]]; then if ! cmp $preset > /dev/null 2>&1 <(sed "s|%PKGBASE%|${pkgbase}|g" /usr/share/mkinitcpio/hook.preset); then if [[ ! -e $preset.pacsave ]]; then # save the preset as pacsave mv $preset $preset.pacsave && return 0 fi else # remove the preset rm $preset && return 0 fi fi } while read -r line; do if [[ $line != */vmlinuz ]]; then # triggers when it's a change to usr/lib/initcpio/* package=1 continue fi if ! read -r pkgbase > /dev/null 2>&1 < "${line%/vmlinuz}/pkgbase"; then # if the kernel has no pkgbase, we skip it continue fi # remove the actual kernel and images for the package being removed kernel="/boot/vmlinuz-${pkgbase}" preset="/etc/mkinitcpio.d/${pkgbase}.preset" initramfs="/boot/initramfs-${pkgbase}.img" fallback_initramfs="/boot/initramfs-${pkgbase}-fallback.img" if [[ -e $kernel ]]; then # remove the installed kernel rm $kernel fi process_preset "${pkgbase}" $preset if [[ -e $initramfs ]]; then # remove the main image rm $initramfs fi if [[ -e $fallback_initramfs ]]; then # remove the fallback image rm $fallback_initramfs fi done if (( package )) && compgen -G /etc/mkinitcpio.d/"*.preset" > /dev/null; then shopt -s nullglob for preset in /etc/mkinitcpio.d/*.preset; do pkgbase=${preset##*/} pkgbase=${pkgbase%.preset} process_preset "${pkgbase}" $preset done shopt -u nullglob fi