diff --git a/install b/install new file mode 100755 index 0000000..5af3021 --- /dev/null +++ b/install @@ -0,0 +1,212 @@ +#!/bin/bash + +####################################################################### +# Helper functions +####################################################################### + +# Make a folder (throw errors if it's already there but not a folder) +mkfolder() +{ + if [[ -e $1 ]] + then + if [[ ! -d $1 ]] + then + echo "$1 is not a directory!" + echo "Backing up $1 to $1.bak" + mv -v $1 $1.bak + + mkdir -p $1 + fi + else + mkdir -p $1 + fi +} + +# Symlink file to destination folder +lnfile() +{ + FILE_PATH=$(dirname $2) + FILE_NAME=$(basename $2) + DEST_FILE="$DF_PATH/$1" + WRITE_LINK=0 + # See if the target exists + if [[ -e $2 ]] + then + # Is the target a symbolic link? + if [[ -L $2 ]] + then + POINTS_TO=$(readlink $2) + # Does it point to our file? + if [[ "$POINTS_TO" != "$DEST_FILE" ]] + then + echo "Target $2 points to a different file - $POINTS_TO" + echo -n "Replace link to point to $DEST_FILE? [y/n] " + read -n1 + echo + + if [[ $REPLY == y || $REPLY == Y ]] + then + WRITE_LINK=1 + # Remove the old symbolic link + rm -f $2 + fi + #else + # It already points to our file. No point in rewriting it. + fi + else + # No, it's not a symbolic link + echo "Target $2 is not a symbolic link!" + echo "Backing up to $2.bak" + mv -v $2 ${2}.bak + WRITE_LINK=1 + fi + fi + + if [[ $WRITE_LINK == 1 ]] + then + echo "Installing $1" + pushd $FILE_PATH >/dev/null + ln -s "$DF_PATH/$1" $FILE_NAME + popd >/dev/null + fi +} + +# Install/update vim bundles +vim_update_bundle() +{ + BUNDLE=$(echo $1 | sed 's:^.*/::' | sed 's:\.git$::') + # If the bundle already exists, update it (if possible) + if [[ -d "$HOME/.vim/bundle/$BUNDLE" ]] + then + if [[ -d "$HOME/.vim/bundle/$BUNDLE/.git" ]] + then + echo "Updating bundle $BUNDLE..." + pushd "$HOME/.vim/bundle/$BUNDLE" >/dev/null + git pull + popd >/dev/null + echo + else + echo "$BUNDLE is not a Git repository. Skipping update." + fi + else + echo "Installing bundle $BUNDLE..." + pushd "$HOME/.vim/bundle/" >/dev/null + git clone $1 + popd >/dev/null + echo + fi +} + +####################################################################### +# Install dotfiles +####################################################################### + +# Install scripts/config files to corresponding destination folders +cd $(dirname $0) +DF_PATH=$(pwd) +PRINT_PATH=$(echo $DF_PATH | sed "s:^$HOME:~:") +echo Installing dotfiles from $PRINT_PATH + +####################################################################### +# Install scripts +####################################################################### + +# Create ~/bin folder +mkfolder ~/bin + +# Install scripts +lnfile scripts/beep ~/bin/beep +lnfile scripts/sdate ~/bin/stardate +lnfile scripts/settitle ~/bin/settitle +lnfile scripts/smartwd ~/bin/smartwd + +# Don't bother installing the note script on a Mac, it doesn't work that well +if [[ "$(uname)" != *"Darwin"* ]] +then + lnfile scripts/note ~/bin/note + lnfile scripts/note ~/bin/n +fi + +####################################################################### +# Install git configuration +####################################################################### +if [[ ! -e ~/.gitconfig ]] +then + echo "Installing gitconfig" + cp -v gitconfig ~/.gitconfig + echo -n "What is your default Git username? " + read $GIT_USER + echo -n "What is your default Git e-mail address? " + read $GIT_EMAIL + git config --global user.name $GIT_USER + git config --global user.email $GIT_EMAIL +fi + +####################################################################### +# Install vimrc & plugins +####################################################################### + +# Create VIM folders +mkfolder ~/.vim +mkfolder ~/.vim/autoload +mkfolder ~/.vim/bundle +mkfolder ~/.vim/colors +mkfolder ~/.vim/plugin +mkfolder ~/.vim/syntax + +# Install vim files +lnfile vimrc ~/.vimrc + +# Install my plugins +lnfile vim/plugin/long-lines.vim ~/.vim/plugin/long-lines.vim +lnfile vim/plugin/match-brackets.vim ~/.vim/plugin/match-brackets.vim +lnfile vim/plugin/tab-expand.vim ~/.vim/plugin/tab-expand.vim + +# Install pathogen +if [[ ! -f ~/.vim/autoload/pathogen.vim ]] +then + echo "Installing vim-pathogen" + curl -Sso ~/.vim/autoload/pathogen.vim \ + https://raw.github.com/tpope/vim-pathogen/master/autoload/pathogen.vim +fi + +####################################################################### +# Install/update Vim bundles +####################################################################### +# tmux config file syntax +vim_update_bundle https://github.com/zaiste/tmux.vim.git + +# Solarized +vim_update_bundle https://github.com/altercation/vim-colors-solarized.git + +####################################################################### +# Install tmux & screen config files +####################################################################### + +# Install tmux configuration file +lnfile tmux.conf ~/.tmux.conf + +# Install screen configuration file +lnfile screenrc ~/.screenrc + +####################################################################### +# Install bashrc files +####################################################################### +if [[ -L ~/.bashrc.common ]] +then + PRINT_INST=0 +else + PRINT_INST=1 +fi + +lnfile bash/bashrc.common ~/.bashrc.common +lnfile bash/bashrc.lscolors ~/.bashrc.lscolors +lnfile dircolors ~/.dir_colors + +if [[ $PRINT_INST == 1 ]] +then + echo "Add the following lines to your ~/.bashrc file" + echo " source ~/.bashrc.common" + echo " source ~/.bashrc.lscolors" +fi +