# define symbols declare -A symbols=( [hard_separator]="▶" [soft_separator]="|" [git]="" [lock]="" [flag]="⚑" [plus]="✚" [tick]="✔" [cross]="✘" [enter]="⏎" [python]="λ" [battery_charging]="⚡" [battery_discharging]="▮" [untracked]="U" [stash]="🐿" [ahead]="+" [behind]="-" [smilie]="☺" [frownie]="☹" ) last_section_bg= # $1 - Text (FG) color of new section # $2 - BG of new section function section_separator() { if [ $2 = $last_section_bg ]; then PS1="${PS1}$(_CC ${1} ${2})${symbols[soft_separator]}" else if [ "$2" ]; then PS1="${PS1}$(_CC ${last_section_bg} ${2})${symbols[hard_separator]}" else PS1="${PS1}${NORMAL}$(_CFG ${last_section_bg})${symbols[hard_separator]}${NORMAL}" fi fi } # $1 - Content # $2 - Text (FG) color # $3 - BG Color function section(){ if [ $last_section_bg ]; then $(section_separator $2 $3) fi last_section_bg=$3 PS1="${PS1}$(_CC ${2} ${3})${1}" echo "$(_CC ${2} ${3})${1}" } # 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 PS1="${PS1}${diverged}${symbols[enter]}" fi fi } set_prompt() { local lec="$?" local color=$GREEN local bg=$BG_LBLUE local smilie=${symbols[smilie]} if [ $COLOR_PROMPT = yes ]; then if [ $lec -ne 0 ]; then color=$RED smilie=${symbols[frownie]} fi PS1="${debian_chroot:+($debian_chroot)}Hi" #$(_CC $GREEN $BG_DGREY)\u $(_CC $LBLUE $BG_DGREY)\w$(_CC $DEFAULT $BG_DGREY)|${smilie}$(_CC $DEFAULT $BG_DGREY)|$(_git_status)${NORMAL}$(_CFG $DGREY)${symbols[hard_separator]}${NORMAL} " #$(section $smilie $color $bg) $(section "\\\\u" $GREEN $BG_GREY) #$(section "\\\\w" $BLUE $BG_GREY) #$(section_git_status $YELLOW $BG_LBLUE) #$(section_separator) else PS1="${debian_chroot:+($debian_chroot)}\u@\h:\w\$ " fi } PROMPT_COMMAND="set_prompt; $PROMPT_COMMAND"