83 lines
1.8 KiB
Plaintext
83 lines
1.8 KiB
Plaintext
|
#!/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
|