From ee6fbda428ec146e53da59a73479970633adc504 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 1 May 2026 17:25:23 +0200 Subject: [PATCH] Add bash completions for command --- default/bash/completions | 53 ++++++++++++++++++++++++++++++++++++++++ default/bash/init | 2 ++ 2 files changed, 55 insertions(+) create mode 100644 default/bash/completions diff --git a/default/bash/completions b/default/bash/completions new file mode 100644 index 00000000..6de3f458 --- /dev/null +++ b/default/bash/completions @@ -0,0 +1,53 @@ +_omarchy_complete() { + COMPREPLY=() + local cur="${COMP_WORDS[COMP_CWORD]}" + + local omarchy_path bin_dir + omarchy_path=$(command -v omarchy 2>/dev/null) || return 0 + bin_dir=$(dirname -- "$(readlink -f -- "$omarchy_path" 2>/dev/null || printf '%s' "$omarchy_path")") + [[ -d $bin_dir ]] || return 0 + + local prefix="omarchy" + local i part + for ((i = 1; i < COMP_CWORD; i++)); do + part="${COMP_WORDS[i]}" + [[ -z $part || $part == -* ]] && continue + prefix+="-$part" + done + + local -A seen=() + local candidates=() + local file basename rest next + + shopt -s nullglob + for file in "$bin_dir/$prefix"-*; do + [[ -f $file && -x $file ]] || continue + basename="${file##*/}" + rest="${basename#"$prefix"-}" + next="${rest%%-*}" + if [[ -n $next && -z ${seen[$next]:-} ]]; then + seen[$next]=1 + candidates+=("$next") + fi + done + shopt -u nullglob + + if (( COMP_CWORD == 1 )); then + candidates+=("commands") + fi + + if [[ ${COMP_WORDS[1]:-} == "commands" ]] && (( COMP_CWORD >= 2 )); then + candidates+=("--all" "--json" "--markdown" "--check") + fi + + if [[ -x $bin_dir/$prefix || ${#candidates[@]} -gt 0 ]]; then + candidates+=("--help") + fi + + if (( ${#candidates[@]} > 0 )); then + local IFS=$'\n' + COMPREPLY=($(compgen -W "${candidates[*]}" -- "$cur")) + fi +} + +complete -F _omarchy_complete omarchy diff --git a/default/bash/init b/default/bash/init index d2baba50..c3d8c97a 100644 --- a/default/bash/init +++ b/default/bash/init @@ -26,3 +26,5 @@ if command -v fzf &> /dev/null; then source /usr/share/fzf/key-bindings.bash fi fi + +source "$OMARCHY_PATH/default/bash/completions"