# This function was modified from one found @ https://www.reddit.com/r/linux/comments/2uf5uu/this_is_my_bash_prompt_which_is_your_favorite/?st=jikgswh4&sh=371ba8bf
# $1 - Default text (foreground) color
# $2 - Background color
function section_git_status() {
local default untracked stash clean ahead behind staged dirty diverged
default=$(_CC $1 $2)
untracked=$(_CC $GREEN $2)
stash=$(_CC $GREEN $2)
clean=$(_CC $GREEN $2)
ahead=$(_CC $YELLOW $2)
behind=$(_CC $YELLOW $2)
staged=$(_CC $CYAN $2)
dirty=$(_CC $RED $2)
diverged=$(_CC $RED $2)
branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
if [[ -n "$branch" ]]; then
$(section_separator $1 $2)
last_section_bg=$2
PS1="${PS1}${default}${symbols[git]} $branch "
git_status=$(git status 2> /dev/null)
# If nothing changes the color, we can spot unhandled cases.
if [[ $git_status =~ 'Untracked files' ]]; then
PS1="${PS1}${untracked}${symbols[untracked]}"
fi
if git stash show &>/dev/null; then
PS1="${PS1}${stash}${symbols[stash]}"
fi
if [[ $git_status =~ 'Your branch is ahead' ]]; then
PS1="${PS1}${ahead}${symbols[ahead]}"
fi
if [[ $git_status =~ 'Your branch is behind' ]]; then
PS1="${PS1}${behind}${symbols[behind]}"
fi
if [[ $git_status =~ 'Changes to be committed' ]]; then
PS1="${PS1}${staged}${symbols[tick]}"
fi
if [[ $git_status =~ 'Changed but not updated' ||
$git_status =~ 'Changes not staged' ||
$git_status =~ 'Unmerged paths' ]]; then
PS1="${PS1}${dirty}${symbols[cross]}"
fi
if [[ $git_status =~ 'Your branch'.+diverged ]]; then