vscripts="${HOME}/vscripts" [[ -d ${vscripts} && ${PATH} != *${vscripts}* ]] && export PATH=${PATH}:${vscripts} completion_path='/usr/share/bash-completion/bash_completion' [[ -r "${completion_path}" ]] && . "${completion_path}" # because fuck you thats' why fuck() { echo 'no, fuck you'; } # some cool git stuff gdiff() { /usr/bin/git diff --color "$@"; } gdf() { local fancydiff='/usr/bin/diff-so-fancy' local githighlight='/usr/share/git/diff-highlight/diff-highlight' if [[ -x ${fancydiff} ]]; then gdiff "$@" | ${fancydiff} | less --tabs=4 -RSFX elif [[ -x ${githighlight} ]]; then gdiff "$@" | ${githighlight} | less --tabs=4 -RSFX else gdiff "$@" fi } git_prompt() { # FIXME: # upon the first traverse into the git repository, we always get staged # count instead of unstaged, that is weird prompt_command if ! raw_status="$(git status --porcelain -bu 2>/dev/null)"; then return fi git_status='' staged_count=0 unstaged_count=0 untracked_count=0 unmerged_count=0 while read line; do if [[ "${line:0:2}" == '##' ]]; then read branch_info <<< "${line:3}" fi [[ "${line:0:2}" =~ .[MD] ]] && (( unstaged_count++ )) [[ "${line:0:2}" =~ [MDARC]. ]] && (( staged_count++ )) [[ "${line:0:2}" == '??' ]] && (( untracked_count++ )) [[ "${line:0:2}" =~ (U[ADU]|A[AU]|D[DU]) ]] && (( unmerged_count++ )) done <<< "${raw_status}" (( $unstaged_count > 0 )) && git_status+="${pmagenta}~${unstaged_count}" (( $staged_count > 0 )) && git_status+="${pyellow}+${staged_count}" (( $untracked_count > 0 )) && git_status+="${pcyan}?${untracked_count}" (( $unmerged_count > 0 )) && git_status+="${pred}!${unmerged_count}" [[ -z "${git_status}" ]] && git_status='.' full_status="{ ${pblue}${branch_info}${preset} | ${git_status}${preset} }" IFS="$ifs_temp" PS1="${ps_line1} ${full_status}\n${ps_line2}" } gitmode() { if [[ -n "${OLD_PROMPT}" ]]; then PROMPT_COMMAND=${OLD_PROMPT} unset OLD_PROMPT else OLD_PROMPT=${PROMPT_COMMAND} PROMPT_COMMAND=git_prompt fi }