# kernel-install(8) completion                                   -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# systemd is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with systemd; If not, see <https://www.gnu.org/licenses/>.

_kernel_install() {
    local comps
    local MACHINE_ID
    local cur=${COMP_WORDS[COMP_CWORD]}

    case $COMP_CWORD in
        1)
            comps="add remove"
            ;;
        2)
            comps=$(cd /lib/modules; echo [0-9]*)
            if [[ ${COMP_WORDS[1]} == "remove" ]] && [[ -f /etc/machine-id ]]; then
                read MACHINE_ID < /etc/machine-id
                if [[ $MACHINE_ID ]] && ( [[ -d /boot/$MACHINE_ID ]] || [[ -L /boot/$MACHINE_ID ]] ); then
                    comps=$(cd "/boot/$MACHINE_ID"; echo [0-9]*)
                fi
            fi
            ;;
        3)
            [[ "$cur" ]] || cur=/lib/modules/${COMP_WORDS[2]}/vmlinuz
            comps=$(compgen -f -- "$cur")
            compopt -o filenames
            ;;
    esac

    COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
    return 0
}

complete -F _kernel_install kernel-install
