diff options
Diffstat (limited to 'script')
| -rwxr-xr-x | script/bootstrap | 156 | ||||
| -rwxr-xr-x | script/install | 10 | 
2 files changed, 166 insertions, 0 deletions
| diff --git a/script/bootstrap b/script/bootstrap new file mode 100755 index 0000000..d817c18 --- /dev/null +++ b/script/bootstrap @@ -0,0 +1,156 @@ +#!/usr/bin/env bash +# +# bootstrap installs things. + +cd "$(dirname "$0")/.." +DOTFILES_ROOT=$(pwd -P) + +set -e + +echo '' + +info () { +  printf "\r  [ \033[00;34m..\033[0m ] $1\n" +} + +user () { +  printf "\r  [ \033[0;33m??\033[0m ] $1\n" +} + +success () { +  printf "\r\033[2K  [ \033[00;32mOK\033[0m ] $1\n" +} + +fail () { +  printf "\r\033[2K  [\033[0;31mFAIL\033[0m] $1\n" +  echo '' +  exit +} + +setup_gitconfig () { +  if ! [ -f git/gitconfig.symlink ] +  then +    info 'setup gitconfig' + +    git_credential='cache --timeout=3600' +    if [ "$(uname -s)" == "Darwin" ] +    then +      git_credential='osxkeychain' +    fi + +    user ' - What is your github author name?' +    read -e git_authorname +    user ' - What is your github author email?' +    read -e git_authoremail + +    sed -e "s/AUTHORNAME/$git_authorname/g" -e "s/AUTHOREMAIL/$git_authoremail/g" -e "s/GIT_CREDENTIAL_HELPER/$git_credential/g" git/gitconfig.symlink.example > git/gitconfig.symlink + +    success 'gitconfig' +  fi +} + + +link_file () { +  local src=$1 dst=$2 + +  local overwrite= backup= skip= +  local action= + +  if [ -f "$dst" -o -d "$dst" -o -L "$dst" ] +  then + +    if [ "$overwrite_all" == "false" ] && [ "$backup_all" == "false" ] && [ "$skip_all" == "false" ] +    then + +      local currentSrc="$(readlink $dst)" + +      if [ "$currentSrc" == "$src" ] +      then + +        skip=true; + +      else + +        user "File already exists: $dst ($(basename "$src")), what do you want to do?\n\ +        [s]kip, [S]kip all, [o]verwrite, [O]verwrite all, [b]ackup, [B]ackup all?" +        read -n 1 action + +        case "$action" in +          o ) +            overwrite=true;; +          O ) +            overwrite_all=true;; +          b ) +            backup=true;; +          B ) +            backup_all=true;; +          s ) +            skip=true;; +          S ) +            skip_all=true;; +          * ) +            ;; +        esac + +      fi + +    fi + +    overwrite=${overwrite:-$overwrite_all} +    backup=${backup:-$backup_all} +    skip=${skip:-$skip_all} + +    if [ "$overwrite" == "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" ]  # "false" or empty +  then +    ln -s "$1" "$2" +    success "linked $1 to $2" +  fi +} + +install_dotfiles () { +  info 'installing dotfiles' + +  local overwrite_all=false backup_all=false skip_all=false + +  for src in $(find -H "$DOTFILES_ROOT" -maxdepth 2 -name '*.symlink') +  do +    dst="$HOME/.$(basename "${src%.*}")" +    link_file "$src" "$dst" +  done +} + +setup_gitconfig +install_dotfiles + +# If we're on a Mac, let's install and setup homebrew. +if [ "$(uname -s)" == "Darwin" ] +then +  info "installing dependencies" +  if source bin/dot > /tmp/dotfiles-dot 2>&1 +  then +    success "dependencies installed" +  else +    fail "error installing dependencies" +  fi +fi + +echo '' +echo '  All installed!' diff --git a/script/install b/script/install new file mode 100755 index 0000000..1887fc2 --- /dev/null +++ b/script/install @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +# +# Run all dotfiles installers. + +set -e + +cd "$(dirname $0)"/.. + +# find the installers and run them iteratively +find . -name install.sh | while read installer ; do sh -c "${installer}" ; done | 
