| @@ -21,74 +21,105 @@ declare -A symbols=( | |||
| [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 | |||
| function _git_status() { | |||
| local unknown untracked stash clean ahead behind staged dirty diverged | |||
| unknown=$(_CC $BLUE $BG_DGREY) | |||
| untracked=$(_CC $GREEN $BG_DGREY) | |||
| stash=$(_CC $GREEN $BG_DGREY) | |||
| clean=$(_CC $GREEN $BG_DGREY) | |||
| ahead=$(_CC $YELLOW $BG_DGREY) | |||
| behind=$(_CC $YELLOW $BG_DGREY) | |||
| staged=$(_CC $CYAN $BG_DGREY) | |||
| dirty=$(_CC $RED $BG_DGREY) | |||
| diverged=$(_CC $RED $BG_DGREY) | |||
| # $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 | |||
| git_status=$(git status 2> /dev/null) | |||
| # If nothing changes the color, we can spot unhandled cases. | |||
| color=$unknown | |||
| if [[ $git_status =~ 'Untracked files' ]]; then | |||
| color=$untracked | |||
| branch="${branch}?" | |||
| fi | |||
| if git stash show &>/dev/null; then | |||
| color=$stash | |||
| branch="${branch}+" | |||
| fi | |||
| if [[ $git_status =~ 'working directory clean' ]]; then | |||
| color=$clean | |||
| fi | |||
| if [[ $git_status =~ 'Your branch is ahead' ]]; then | |||
| color=$ahead | |||
| branch="${branch}>" | |||
| fi | |||
| if [[ $git_status =~ 'Your branch is behind' ]]; then | |||
| color=$behind | |||
| branch="${branch}<" | |||
| fi | |||
| if [[ $git_status =~ 'Changes to be committed' ]]; then | |||
| color=$staged | |||
| fi | |||
| if [[ $git_status =~ 'Changed but not updated' || | |||
| $git_status =~ 'Changes not staged' || | |||
| $git_status =~ 'Unmerged paths' ]]; then | |||
| color=$dirty | |||
| fi | |||
| if [[ $git_status =~ 'Your branch'.+diverged ]]; then | |||
| color=$diverged | |||
| branch="${branch}!" | |||
| fi | |||
| echo -n "${color}${symbols[git]}${branch}" | |||
| $(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="$?" | |||
| if [ $COLOR_PROMPT = yes ]; then | |||
| if [ $lec -ne 0 ]; then | |||
| smilie="$(_CC $RED $BG_DGREY)${symbols[frownie]}" | |||
| 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 | |||
| smilie="$(_CC $GREEN $BG_DGREY)${symbols[smilie]}" | |||
| PS1="${debian_chroot:+($debian_chroot)}\u@\h:\w\$ " | |||
| fi | |||
| PS1="${debian_chroot:+($debian_chroot)}$(_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} " | |||
| else | |||
| PS1="${debian_chroot:+($debian_chroot)}\u@\h:\w\$ " | |||
| fi | |||
| } | |||
| PROMPT_COMMAND="set_prompt" | |||
| PROMPT_COMMAND="set_prompt; $PROMPT_COMMAND" | |||