mirror of
https://github.com/prdlk/dotfiles.git
synced 2026-11-02 19:32:43 +00:00
- 16 cross-shell utilities converted to sh/bash chezmoi executables: ai c2p cp-appid extract_agents fab gdc gh-sonr-org-migrate ghg-clone ghn gho git-summary launch_omp_livediff_overlay lc-elir mdcp mdp pj (ghg-clone not named ghg: unrelated cargo binary owns that name) - cwd/history helpers stay per-shell: yy c cd clip-last + ghg/ghn/gho cd-wrappers in bash/functions/ and zsh/functions/, loaded by rc files - fish keeps only shell-state functions; converted ones now hit PATH - cp-appid ignore gating moved to .local/bin path - dot_agents/skills: 82 skills materialized from dotstate storage so dot_claude skill symlinks resolve on fresh bootstrap; dotstate profile/symlinks.json released .agents/skills .bashrc .zshrc
45 lines
1.3 KiB
Bash
Executable File
45 lines
1.3 KiB
Bash
Executable File
#!/bin/sh
|
|
# Fuzzy find and execute a Fabric pattern.
|
|
json_file=$HOME/.config/fabric/pattern_explainations.json
|
|
|
|
if [ ! -f "$json_file" ]; then
|
|
printf '\033[31mError: %s not found.\033[0m\n' "$json_file" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# fabric is aliased to fabric-ai in the shells; resolve the real binary here
|
|
if command -v fabric-ai >/dev/null 2>&1; then
|
|
fabric_bin=fabric-ai
|
|
else
|
|
fabric_bin=fabric
|
|
fi
|
|
|
|
# 1. Safely capture piped input (if any) to a temp file — preserves all
|
|
# formatting and newlines, avoids variable escaping issues
|
|
temp_input=$(mktemp)
|
|
trap 'rm -f "$temp_input"' EXIT INT TERM
|
|
|
|
if [ ! -t 0 ]; then
|
|
cat > "$temp_input"
|
|
fi
|
|
|
|
# 2. Parse JSON to TSV -> fzf (name in list, description in preview)
|
|
selection=$(jq -r '.[] | "\(.name)\t\(.description)"' "$json_file" \
|
|
| fzf --delimiter '\t' \
|
|
--with-nth 1 \
|
|
--preview 'echo {2}' \
|
|
--preview-window 'right:60%:wrap' \
|
|
--prompt 'Pattern > ' \
|
|
--info inline \
|
|
--bind 'ctrl-/:toggle-preview')
|
|
|
|
# 3. Execute with or without the piped data
|
|
if [ -n "$selection" ]; then
|
|
pattern=$(printf '%s\n' "$selection" | cut -f1)
|
|
if [ -s "$temp_input" ]; then
|
|
"$fabric_bin" --pattern "$pattern" < "$temp_input"
|
|
else
|
|
"$fabric_bin" --pattern "$pattern"
|
|
fi
|
|
fi
|