diff options
-rwxr-xr-x | script/bootstrap | 79 |
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 } |