58 lines
1.0 KiB
Bash
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[@]}"
|