#!/bin/bash # mkinitcpio bash completion by Seblu _lsinitcpio() { local cur opts opts=(-a --analyze -h --help -n --nocolor -v --verbose -x --extract) _get_comp_words_by_ref cur case $cur in -*) COMPREPLY=($(compgen -W "${opts[*]}" -- "$cur")) ;; *) _filedir ;; esac } _find_kernel_versions() { local -a matches local dir regex # add completions from kernels in /boot regex="Linux kernel.*version" while IFS=':' read -r file metadata; do [[ $metadata =~ $regex ]] || continue matches+=("$file") done < <(file -e ascii /boot/*) # add completions based on kernel versions in /lib/modules for dir in /lib/modules/*/kernel; do dir=${dir%/kernel} matches+=("${dir#/lib/modules/}") done COMPREPLY=($(compgen -W "${matches[*]}" -- $cur)) } _mkinitcpio() { local action cur prev opts opts=(-A --add -b --basedir -c --config -g --generate -H --hookhelp -h --help -k --kernel -L --listhooks -M --automods -n --nocolor -p --preset -S --skiphooks -s --save -t --builddir -v --verbose -z --compress) _get_comp_words_by_ref cur prev case $prev in -[cg]|--config|--generate) _filedir ;; -k|--kernel) _find_kernel_versions ;; -[bt]|--basedir|--builddir) _filedir -d ;; -p|--preset) COMPREPLY=($(cd /etc/mkinitcpio.d/ && compgen -X '!*.preset' -f -- $cur)) COMPREPLY=("${COMPREPLY[@]%.preset}") ;; -[AHS]|--add|--hookhelp|--skiphooks) COMPREPLY=($(cd /lib/initcpio/install/ && compgen -f -- $cur) $(cd /usr/lib/initcpio/install/ && compgen -f -- $cur)) ;; *) COMPREPLY=($(compgen -W "${opts[*]}" -- "$cur")) ;; esac } complete -F _mkinitcpio mkinitcpio complete -F _lsinitcpio lsinitcpio # vim: set et ts=4 sw=4 ft=sh: