diff options
Diffstat (limited to '.local/bin/config-path')
-rwxr-xr-x | .local/bin/config-path | 90 |
1 files changed, 48 insertions, 42 deletions
diff --git a/.local/bin/config-path b/.local/bin/config-path index f4c2342..7cd1fcd 100755 --- a/.local/bin/config-path +++ b/.local/bin/config-path @@ -1,22 +1,14 @@ #!/bin/bash -the_guts() { - # Add generic prefixes - add_prefix "$HOME" - add_prefix "$HOME/.local.$(uname -m)" - add_prefix "$HOME/.local" - add_prefix "$HOME/.prefix.$(uname -m)" - add_prefix "$HOME/.prefix" - - # Add rubygem prefixes - local dir - for dir in "$HOME"/.gem/*; do - # Only add it if we have that type of ruby - if type "${dir##*/}" &>/dev/null; then - add_prefix "$dir"/* - fi - done -} +# All the prefixes to consider +prefixes=( + "$HOME" + "$HOME/.local.$(uname -m)" + "$HOME/.local" + "$HOME/.prefix.$(uname -m)" + "$HOME/.prefix" + "$HOME"/.gem/ruby/* +) in_array() { local needle=$1; shift @@ -28,41 +20,55 @@ in_array() { return 1 } -add_prefix() { - local prefix=$1 - local dir +var_init() { + eval "ary_$1=(\$$1)" +} - # PATH - dir="$prefix/bin" - if [[ -d "$dir" ]] && ! in_array "$dir" "${paths[@]}"; then - paths=("$dir" "${paths[@]}") - fi +var_add() { + local varname=ary_$1; shift + local var_all="${varname}[@]" + local dirs=("$@") - # RUBYLIB - dir="$prefix/lib" - if [[ -d "$dir" ]] && ! in_array "$dir" "${rubylibs[@]}"; then - rubylibs=("$dir" "${rubylibs[@]}") - fi + local dir + for dir in "${dirs[@]}"; do + if [[ -d "$dir" ]] && ! in_array "$dir" "${!var_all}"; then + eval "$varname=(\"\$dir\" \"\${$var_all}\")" + fi + done +} + +var_done() { + eval "$1=\"\${ary_$1[*]}\"" + declare -p $1 } main() { + IFS=: # Import existing values - declare -ga paths rubylibs - IFS=: paths=($PATH) - IFS=: rubylibs=($RUBYLIB) - - the_guts + var_init PATH + var_init MANPATH + var_init LD_LIBRARY_PATH + var_init RUBYLIB + var_init PERL5LIB - # Put our values into the env variables - IFS=: PATH="${paths[*]}" - IFS=: RUBYLIB="${rubylibs[*]}" + # Scan through prefixes + for prefix in "${prefixes[@]}"; do + var_add PATH "$prefix/bin" "$prefix/sbin" + var_add MANPATH "$prefix/share/man" + var_add LD_LIBRARY_PATH "$prefix"/lib{,32,64} + var_add RUBYLIB "$prefix"/lib{,32,64} + var_add PERL5LIB "$prefix"/lib{,32,64}/perl5 + done # Finally, print the values - # The sed bit here is the only time we call an external program + # The `sed` bit here is the only time we call an external program { - declare -p PATH - declare -p RUBYLIB + var_done PATH + var_done MANPATH + var_done LD_LIBRARY_PATH + var_done RUBYLIB + var_done PERL5LIB } | sed 's/^declare \(-\S* \)*//' } -main +main "$@" |