diff options
Diffstat (limited to 'script/bootstrap')
-rwxr-xr-x | script/bootstrap | 156 |
1 files changed, 156 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!' |