summaryrefslogtreecommitdiff
path: root/.local
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@sbcglobal.net>2015-02-07 00:26:11 -0500
committerLuke Shumaker <lukeshu@sbcglobal.net>2015-02-07 00:26:11 -0500
commit865a768e44624c465e9d42c6ca91d0ef29a8e7ad (patch)
treeb7e960b53a230cd1f9840493a594e1c78c95e290 /.local
parentf5c41d73b4c085691f2c01dd80366d08cb352a01 (diff)
backport changes from cs-purdue
Diffstat (limited to '.local')
-rwxr-xr-x.local/bin/config-path90
-rwxr-xr-x.local/bin/config-symlinks9
2 files changed, 55 insertions, 44 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 "$@"
diff --git a/.local/bin/config-symlinks b/.local/bin/config-symlinks
index 0831ca3..7d889f0 100755
--- a/.local/bin/config-symlinks
+++ b/.local/bin/config-symlinks
@@ -1,6 +1,8 @@
#!/bin/bash
-sed -e '/^\s*$/d' -e '/#/d' symlinks | while read _target _link; do
+declare -i ret=0
+
+while read _target _link; do
target="$(sed -rn 's|[^/]+/|../|g;s|/[^/]+$|/|p' <<<"$_link")${_target}"
link="$HOME/$_link"
if [[ -L "$link" ]]; then
@@ -8,8 +10,11 @@ sed -e '/^\s*$/d' -e '/#/d' symlinks | while read _target _link; do
fi
if [[ -e "$link" ]]; then
echo "ERROR: file exists: $link" >> /dev/stderr
+ ret=1
else
mkdir -p "${link%/*}"
ln -s "$target" "$link"
fi
-done
+done < <(sed -e '/^\s*$/d' -e '/#/d' "$XDG_CONFIG_HOME/symlinks")
+
+exit $ret