Files
zsh-config/lib/path.zsh
2026-05-20 00:26:28 -04:00

58 lines
1.0 KiB
Bash

# PATH management.
typeset -U path PATH
path=(
"$HOME/bin"
"$HOME/.local/bin"
"/usr/local/bin"
"${path[@]}"
)
PATH_TREE_ROOTS=(
"$HOME/bin"
"$HOME/.local/bin"
"$HOME/lib"
"$HOME/.dotfiles/bin"
"/data/Music/Beets/scripts"
)
path_add_recursive_roots() {
emulate -L zsh
setopt pipefail
local warn_limit=10
local root dir
local -a found_dirs new_dirs
found_dirs=()
new_dirs=()
for root in "$@"; do
[[ -d "$root" ]] || continue
while IFS= read -r -d $'\0' dir; do
found_dirs+=("$dir")
done < <(find "$root" -type d -print0 2>/dev/null)
done
for dir in "${found_dirs[@]}"; do
if (( ${path[(Ie)$dir]} == 0 )); then
new_dirs+=("$dir")
fi
done
if (( ${#new_dirs[@]} > warn_limit )); then
print -u2 -- "warning: adding ${#new_dirs[@]} directories to PATH recursively"
print -u2 -- "warning: PATH recursion roots: $*"
fi
for dir in "${(Oa)new_dirs[@]}"; do
path=("$dir" "${path[@]}")
done
export PATH
}
path_add_recursive_roots "${PATH_TREE_ROOTS[@]}"