dotfiles/install

213 lines
5.8 KiB
Bash
Executable File

#!/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