mirror of https://github.com/nirenjan/dotfiles.git
				
				
				
			
		
			
				
	
	
		
			220 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			220 lines
		
	
	
		
			6.0 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 git prompt functions
 | |
| if [[ ! -e ~/.git_prompt.sh ]]
 | |
| then
 | |
|     echo "Installing Git prompt functionality..."
 | |
|     curl -Sso ~/.git_prompt.sh \
 | |
|     https://raw.github.com/git/git/master/contrib/completion/git-prompt.sh
 | |
| 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 line to your ~/.bashrc file"
 | |
|     echo "    source ~/.bashrc.common"
 | |
| fi
 | |
| 
 |