mirror of https://github.com/nirenjan/dotfiles.git
				
				
				
			Merge branch 'install'
						commit
						76792ae62e
					
				|  | @ -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 | ||||||
|  | 
 | ||||||
		Loading…
	
		Reference in New Issue