#!/bin/bash -e args=() all=0 while read -r line; do if [[ $line != */vmlinuz ]]; then # triggers when it's a change to usr/lib/initcpio/* all=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 preset="/etc/mkinitcpio.d/${pkgbase}.preset" if [[ ! -e $preset ]]; then if [[ -e $preset.pacsave ]]; then # move the pacsave to the template mv "${preset}.pacsave" "$preset" else # create the preset from the template sed "s|%PKGBASE%|${pkgbase}|g" /usr/share/mkinitcpio/hook.preset \ | install -Dm644 /dev/stdin "$preset" fi fi # always install the kernel install -Dm644 "${line}" "/boot/vmlinuz-${pkgbase}" # compound args for each kernel args+=(-p "${pkgbase}") done if (( all )) && compgen -G /etc/mkinitcpio.d/"*.preset" > /dev/null; then # change to use all presets args=(-P) fi if (( ${#args[@]} )); then mkinitcpio "${args[@]}" fi