dotfiles/bootstrap.sh

40 lines
1.3 KiB
Bash
Executable File

#!/bin/bash
case `uname` in
'Darwin')
readlink_command='greadlink'
;;
*)
readlink_command='readlink'
esac
DOTFILES_DIRECTORY="$(dirname "${BASH_SOURCE}" | xargs ${readlink_command} -f)/dotfiles"
function symlink_dotfiles() {
cd $DOTFILES_DIRECTORY
[ -a ~/.dotfiles-backups ] && mv ~/.dotfiles-backups ~/.dotfiles-backups.old
mkdir ~/.dotfiles-backups
for filename in *; do
local link_destination="$HOME/.$filename"
local link_target=$(${readlink_command} -f $filename)
echo "linking $link_destination to $link_target"
# Using only test -e doesn't work here because it will return
# false if the destination of the symbolic link at
# link_destination does not exist.
test -e $link_destination || test -L $link_destination && mv $link_destination ~/.dotfiles-backups
ln -si $link_target $link_destination
done
[ -a ~/.dotfiles-backups.old ] && mv ~/.dotfiles-backups.old ~/.dotfiles-backups/.dotfiles-backups
}
if [ "$1" = "--force" -o "$1" = "-f" ]; then
symlink_dotfiles
else
read -p "Symlinking files from $DOTFILES_DIRECTORY. This may overwrite existing files in your home directory. Do you wish to proceed? (y/n) " -n 1
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
symlink_dotfiles
fi
fi
unset symlink_dotfiles
unset DOTFILES_DIRECTORY