helm/bootstrap
2016-10-19 16:56:37 +02:00

83 lines
1.8 KiB
Bash
Executable file

#!/bin/bash
export DOTFILES=$(cd $(dirname $0) && pwd -P)
source "$DOTFILES/shell/common.sh"
set -e
#
install() {
for topic in $*;
do
local path="$(dirname $0)/$topic"
if [ -d "$path" ];
then
[ -f "$path/install" ] && . "$path/install"
# Link available dotfiles (1 level deep)
for file in "$1"/.[a-zA-Z]*
do
if [ -d "$file" ]; then
for subfile in "$file"/*
do
local base="$HOME/$(basename $file)"
[ ! -d "$base" ] && mkdir -p "$base"
ln -svf "$subfile" "$base"
done
elif [ -f "$file" ]; then
ln -svf "$file" "$HOME"
fi
done
# Symlink enabled topic folders
if [ ! -h "$DOTFILES/.enabled.d/$(basename $path)" ]
then
ln -svf "$DOTFILES/$path" "$DOTFILES/.enabled.d"
fi
elif [ -f "$path" ]
then
install $(cat "$path")
fi
done
}
update() {
for topic in $DOTFILES/.enabled.d/*/
do
[ -x "$topic/update" ] && . "$topic/update"
done
}
clean() {
# Temporarily move dotfiles to kill symlinks
mv $DOTFILES /tmp/dotfiles
# Clean up dead symlinks
find -L $HOME -iname '.*' -type l -maxdepth 1 -exec rm -fv {} \;
if [ -d "$HOME/.config" ]
then
find -L $HOME/.config -iname '.*' -type l -maxdepth 1 -exec rm -fv {} \;
fi
# Move it back
mv /tmp/dotfiles $DOTFILES
}
usage() {
echo "Nope"
exit
}
##
(( "$#" == 0 )) && usage
COMMAND="$1"
shift
case "$COMMAND" in
i|install) install $* ;;
u|update) update ;;
c|clean) clean ;;
r|reinstall)
clean
install $*
;;
*) usage ;;
esac