# this file is sourced by all bash shells on startup # test for interactive shell [[ $- != *i* ]] && return # return if this script is executed twice [[ -n $(declare -p _DOTFILES_DIR 2>/dev/null) ]] && return declare -r _DOTFILES_DIR="${HOME}/.dotfiles" declare -r _BASHRC_DIR="${_DOTFILES_DIR}/bashrc" # start in home dir if [[ -n "${DIR}" ]]; then cd "${DIR}" unset DIR else cd "${HOME}" fi # self update magic _self_update() { pushd ${_DOTFILES_DIR} &>/dev/null # save the origin, the current master is based of if ! git tag | grep old-origin -q; then if git branch | grep old-origin -q; then git branch -D old-origin >/dev/null 2>&1 fi git tag old-origin origin/master >/dev/null 2>&1 fi if hash timeout >/dev/null 2>&1; then timeout 3s git fetch origin 2>/dev/null if [[ "$?" == "124" ]]; then echo -e "\033[31m*\033[0m timeout: git fetch origin" popd &>/dev/null return fi else git fetch origin 2>/dev/null fi if [[ -n "$(git whatchanged HEAD..origin/master)" ]]; then echo -ne "\033[31m*\033[0m dotfile updates found, merge now? (Y/n) " read _merge; if [[ $_merge != 'n' ]]; then _local_changes="$(git status | grep '^# Change')" _old_origin="$(git rev-list -n1 old-origin)" if [[ "$_old_origin" != "$(git rev-list -n1 HEAD)" ]]; then echo -e "\033[31m*\033[0m You have some local commits. I will now try to rebase them" echo " onto the new origin/master." fi if [[ -n "$_local_changes" ]]; then echo -e "\033[31m*\033[0m You have some uncommited local changes." echo " I will try to preserve it using the git stash." git stash >/dev/null || return fi # update old-origin git tag -d old-origin >/dev/null 2>&1 git tag old-origin origin/master >/dev/null 2>&1 echo -e "\033[33m*\033[0m git rebase --onto origin/master $_old_origin" git rebase --onto origin/master $_old_origin || return if [[ -n "$_local_changes" ]]; then git stash pop >/dev/null || return fi if [[ -e management/symlinks.md5 ]]; then if hash md5sum 2> /dev/null ; then md5sum -c management/symlinks.md5 --status 2>/dev/null else if hash md5 2> /dev/null ; then md5 -c management/symlinks.md5 >/dev/null fi fi if [[ $? -ne 0 ]]; then echo -e "\033[33m*\033[0m symlink mapping changed!" echo -e "\033[33m*\033[0m Maybe you should execute godot.sh again..." fi else echo -e "\033[33m*\033[0m symlink mapping checksum not found" echo -e "\033[33m*\033[0m Maybe you should execute godot.sh again." fi popd &>/dev/null exec $SHELL fi fi popd &>/dev/null } # module load magic _load() { local base path local pedantic=0 [[ -z $1 || -z $2 ]] && return base=${_BASHRC_DIR}/${1} if [[ $1 == "common" || $2 == "init" ]]; then path=${2}.sh pedantic=1 else case $1 in (dist) path=${_DISTNAME}/${2}.sh ;; (node) path=${_NODENAME}/${2}.sh ;; (net) path=${_NETNAME}/${2}.sh ;; esac fi if [[ -r ${base}/${path} ]]; then source ${base}/${path} 2>&1 > /dev/null elif [[ $2 == "*" ]]; then for file in ${base}/${path}; do if [[ -r $file ]]; then source $file 2>&1 > /dev/null fi done elif [[ ${pedantic} -eq 1 ]]; then echo "error: cannot find necessary startup file: ${base}/${path}" fi } # update first _self_update _load common '*' # load internals _load dist init _load node init _load net init # load common distribution settings _load dist common # load distribution specific node settings _load node ${_DISTNAME} # initialize preexec hack last init_preexec_hack