diff options
Diffstat (limited to 'script/bootstrap')
| -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  } | 
