#!/bin/bash ####################################################################### # Default settings ####################################################################### # Use git by default BUNDLE_TRANSPORT="git" ####################################################################### # 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() { # See if we are linking to a directory if [[ $2 =~ /$ ]] then FILE_PATH=$2 FILE_NAME=$(basename $1) DST_FILE="${FILE_PATH}${FILE_NAME}" else FILE_PATH=$(dirname $2) FILE_NAME=$(basename $2) DST_FILE="$FILE_PATH/$FILE_NAME" fi SRC_FILE="$DF_PATH/$1" WRITE_LINK=0 # See if the target exists if [[ -e $DST_FILE ]] then # Is the target a symbolic link? if [[ -L $DST_FILE ]] then POINTS_TO=$(readlink $DST_FILE) # Does it point to our file? if [[ "$POINTS_TO" != "$SRC_FILE" ]] then echo "Target $DST_FILE points to a different file - $POINTS_TO" echo -n "Replace link to point to $SRC_FILE? [y/n] " read -n1 echo if [[ $REPLY == y || $REPLY == Y ]] then WRITE_LINK=1 # Remove the old symbolic link rm -f $DST_FILE fi #else # It already points to our file. No point in rewriting it. fi else # No, it's not a symbolic link echo "Target $DST_FILE is not a symbolic link!" echo "Backing up to $DST_FILE.bak" mv -v $DST_FILE ${DST_FILE}.bak WRITE_LINK=1 fi else WRITE_LINK=1 fi if [[ ! -z $DEBUG ]] then echo -n "Linking " [[ ! -z $WRITE_LINK ]] && echo -n "(NOT) " echo "'$DST_FILE' -> '$SRC_FILE'" fi if [[ $WRITE_LINK == 1 ]] then echo "Installing $1" ln -sf "$SRC_FILE" "$DST_FILE" fi } ####################################################################### # Verify command line switches ####################################################################### while getopts "nht:" OPTION do case "$OPTION" in n) echo "Skipping bundle updates" BUNDLE_NO_UPDATE=1 ;; t) echo "Using transport $OPTARG" BUNDLE_TRANSPORT=$OPTARG ;; h) echo ' This script installs the dotfiles into various locations using symbolic links. Options: -------- -n Will not update existing bundles, but will install new bundles. -t