# bash completion for pkg - rawnix.org package manager # https://rawnix.org # # Install: /usr/share/bash-completion/completions/pkg # # Copyright (c) 2025 zorz@gmx.com # SPDX-License-Identifier: BSD-2-Clause # -- Data sources ---------------------------------------------------------- _pkg_installed() { # Package names from /var/lib/pkg/db: the first line of each # record (name, version, files..., blank line) local db="/var/lib/pkg/db" [[ -r "$db" ]] || return awk 'state==0 && NF { print; state=1; next } NF == 0 { state=0 }' "$db" 2>/dev/null } _pkg_available() { # Ports in the portdir directories of /etc/pkg.conf: every # subdirectory holding a MAKEPKG or a MAKEPKG.lock local conf="/etc/pkg.conf" d p [[ -r "$conf" ]] || return while read -r key d _; do [[ "$key" == portdir && -d "$d" ]] || continue for p in "$d"/*/MAKEPKG "$d"/*/MAKEPKG.lock; do [[ -f "$p" ]] && basename "${p%/*}" done done < "$conf" | sort -u } _pkg_locked() { # Locked packages from /var/lib/pkg/locked, without its comment local lockfile="/var/lib/pkg/locked" [[ -r "$lockfile" ]] || return grep -v '^[[:space:]]*\(#\|$\)' "$lockfile" 2>/dev/null } # -- Main completion function ---------------------------------------------- _pkg_complete() { local cur prev words cword _init_completion || return local commands="add del list isinst update build prepare bulk sysup \ autoremove orphans depends rdepends diff \ lock unlock locked checkdb initdb version help" local opts="-r --root -N --no-deps -b --use-bulk -y --yes -f --force -v --verbose -V --version -h --help" if [[ "$prev" == -r || "$prev" == --root ]]; then _filedir -d return fi if [[ "$cur" == -* ]]; then COMPREPLY=( $(compgen -W "$opts" -- "$cur") ) return fi # the command is the first word that is not an option or -r's path local i cmd="" for (( i = 1; i < cword; i++ )); do case "${words[i]}" in -r|--root) (( i++ )) ;; -*) ;; *) cmd="${words[i]}"; break ;; esac done if [[ -z "$cmd" ]]; then COMPREPLY=( $(compgen -W "$commands" -- "$cur") ) return fi case "$cmd" in del|update|isinst|lock) COMPREPLY=( $(compgen -W "$(_pkg_installed)" -- "$cur") ) ;; unlock) COMPREPLY=( $(compgen -W "$(_pkg_locked)" -- "$cur") ) ;; add|build|prepare|bulk|depends) COMPREPLY=( $(compgen -W "$(_pkg_available)" -- "$cur") ) ;; rdepends) COMPREPLY=( $(compgen -W "$(_pkg_installed)" -- "$cur") ) ;; *) ;; esac } complete -F _pkg_complete pkg