Watch
1
0
Fork
You've already forked dotfiles
0

Add utility to generate shell completions

This commit is contained in:
Alexander Hess 2026-08-03 09:36:33 +02:00
commit a8b0a0e68e
Signed by: alexander
GPG key ID: B46EDB4DFC26805D
4 changed files with 109 additions and 2 deletions

View file

@ -0,0 +1,99 @@
#!/bin/sh
# Generate shell completions for various tools into the XDG data directories,
# so that they are loaded lazily instead of `eval`ed on every shell start
#
# Run this after installing or updating any of the tools below
set -eu
XDG_DATA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}" # also set in ~/.config/shell/env
XDG_STATE_HOME="${XDG_STATE_HOME:-$HOME/.local/state}" # also set in ~/.config/shell/env
BASH_DIR="$XDG_DATA_HOME/bash-completion/completions"
ZSH_DIR="$XDG_DATA_HOME/zsh/completions"
QUIET="${QUIET:-}"
rm -rf "$BASH_DIR" "$ZSH_DIR"
mkdir -p "$BASH_DIR" "$ZSH_DIR"
_command_exists() {
command -v "$1" 1>/dev/null 2>&1
}
# Write to a temporary file first,
# so that a failing tool does not leave a truncated completion file
_generate() {
_name="$1"
_target="$2"
shift 2
if "$@" > "$_target.tmp" 2>/dev/null && [ -s "$_target.tmp" ]; then
mv "$_target.tmp" "$_target"
echo " $_name"
else
rm -f "$_target.tmp"
echo " $_name => FAILED" >&2
fi
}
echo "Generating bash completions in: $BASH_DIR"
_command_exists pip \
&& _generate pip "$BASH_DIR/pip" pip completion --bash
_command_exists register-python-argcomplete \
&& _command_exists pipx \
&& _generate pipx "$BASH_DIR/pipx" register-python-argcomplete pipx
_command_exists poetry \
&& _generate poetry "$BASH_DIR/poetry" poetry completions bash
echo "Generating zsh completions in: $ZSH_DIR"
_pip_zsh() {
pip completion --zsh | sed -n '/^#compdef/,$p'
}
_command_exists pip \
&& _generate pip "$ZSH_DIR/_pip" _pip_zsh
_command_exists register-python-argcomplete \
&& _command_exists pipx \
&& _generate pipx "$ZSH_DIR/_pipx" register-python-argcomplete pipx
_command_exists poetry \
&& _generate poetry "$ZSH_DIR/_poetry" poetry completions zsh
rm -f "$XDG_STATE_HOME/zsh/zcompdump"*
if [ -z "$QUIET" ]; then
echo ""
echo "Reload your shell to use them:"
echo " exec \$SHELL -l"
echo ""
fi

View file

@ -109,6 +109,11 @@ if command -v batcat >/dev/null 2>&1 && ! command -v bat >/dev/null 2>&1; then
fi
if [ -x "$XDG_BIN_HOME/generate-shell-completions" ]; then
QUIET=1 "$XDG_BIN_HOME/generate-shell-completions" || true
fi
echo ""
echo "The dotfiles were installed successfully (branch: $DOTFILES_BRANCH)"
echo ""