aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xscript/bootstrap79
1 files changed, 78 insertions, 1 deletions
diff --git a/script/bootstrap b/script/bootstrap
index d817c18..667c7e1 100755
--- a/script/bootstrap
+++ b/script/bootstrap
@@ -50,6 +50,69 @@ setup_gitconfig () {
}
+link_directory () {
+ local src=$1 dst=$2
+
+ local overwrite= backup= skip=
+ local action=
+
+ if [ -f "$dst" -o -L "$dst" ]
+ then
+
+ if [ "$overwrite_all" == "false" ] && [ "$backup_all" == "false" ] && [ "$skip_all" == "false" ]
+ then
+
+ user "Directory already exists: $dst ($(basename "$src")), what do you want to do?\n\
+ [s]kip, [r]emove, [m]erge, [b]ackup?"
+ read -n 1 action
+
+ case "$action" in
+ s )
+ skip=true;;
+ r )
+ remove=true;;
+ m )
+ merge=true;;
+ b )
+ backup=true;;
+ * )
+ ;;
+ esac
+
+ fi
+
+ skip=${skip:-$skip_all}
+ backup=${backup:-$backup_all}
+
+ if [ "$remove" == "true" ]
+ then
+ rm -rf "$dst"
+ success "removed $dst"
+ fi
+
+ if [ "$backup" == "true" ]
+ then
+ mv "$dst" "${dst}.backup"
+ success "moved $dst to ${dst}.backup"
+ fi
+
+ if [ "$skip" == "true" ]
+ then
+ success "skipped $src"
+ fi
+ fi
+
+ if [ "$skip" != "true" ]
+ then
+ for f in "$src/*"
+ do
+ this_dst="$dst/$(basename "${f%.*}")"
+ link "$f" "$this_dst"
+ done
+ fi
+}
+
+
link_file () {
local src=$1 dst=$2
@@ -125,6 +188,20 @@ link_file () {
fi
}
+
+link () {
+ local src=$1 dst=$2
+
+ if [ -f "$src" ]
+ then
+ link_file "$src" "$dst"
+ elif [ -d "$src" ]
+ then
+ link_directory "$src" "$dst"
+ fi
+}
+
+
install_dotfiles () {
info 'installing dotfiles'
@@ -133,7 +210,7 @@ install_dotfiles () {
for src in $(find -H "$DOTFILES_ROOT" -maxdepth 2 -name '*.symlink')
do
dst="$HOME/.$(basename "${src%.*}")"
- link_file "$src" "$dst"
+ link "$src" "$dst"
done
}