#!/bin/bash # target dir of dotfiles (relative to $HOME) TARGET=".dotfiles" if [[ ! -e "${HOME}/${TARGET}" ]]; then if hash git > /dev/null 2>&1 ; then git clone git://git.animux.de/dotfiles.git "${HOME}/${TARGET}" else echo -e "\033[31m*\033[0m git is not available! This script will NOT work! Exiting..." exit fi fi pushd $HOME >/dev/null # create new symlinks as specified in dotfiles mapping file: grep -ve "^#" -e "^$" "${TARGET}/symlink-mapping" | \ grep -E "[^ ]+ -> [^ ]+" | \ awk -F " -> " '{ print $1 ; print "'$TARGET'/"$2; }' | \ while read target ; read source ; do if [[ -e "${target}" && ! -f "${target}" && ! -L "${target}" ]]; then echo "!!! ~/${target}/ exists and is not a symlink." else # remove folder (only if they are symlinks) and regular files # (all other actions could be dangerouse: e.g. lost private keys) [[ -L "${target}" || -f "${target}" ]] && rm -f "${target}" # create ne symlink ln -s "${source}" "${target}" fi done popd >/dev/null pushd "${HOME}/${TARGET}" >/dev/null # update hash of current symlink mapping if hash md5sum 2> /dev/null ; then md5sum "symlink-mapping" > "./management/symlinks.md5" else if hash md5 2> /dev/null ; then md5 "symlink-mapping" > "./management/symlinks.md5" fi fi popd >/dev/null echo echo "All done. Happy hacking ;)" echo