|
-
- # 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]="O_o"
- )
-
- 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+="$(_CC ${BLACK} ${2})${symbols[soft_separator]}"
- else
- if [ "$2" ]; then
- PS1+="$(_CC $(_CBG2FG ${last_section_bg}) ${2})${symbols[hard_separator]}"
- else
- #echo "${last_section_bg} GAH!"
- PS1+="${NORMAL}$(_CFG $(_CBG2FG ${last_section_bg}) )${symbols[hard_separator]}${NORMAL}"
- fi
- fi
- }
-
- # $1 - Content
- # $2 - Text (FG) color
- # $3 - BG Color
- # $4 - Font style
- # $5 - Ignore section separator
- function section(){
- ignore=$5
- if [ "$ignore" != true ]; then
- ignore=false
- fi
- if [ "$last_section_bg" ]; then
- if [ "$ignore" = false ]; then
- section_separator ${2} ${3}
- fi
- fi
- last_section_bg=$3
- PS1+="$(_CC ${2} ${3} ${4})${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
- if [ "$last_section_bg" ]; then
- section_separator $1 $2
- fi
- last_section_bg=$2
-
- 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+="${symbols[untracked]}"
- fi
- if git stash show &>/dev/null; then
- PS1+="${symbols[stash]}"
- fi
- if [[ $git_status =~ 'Your branch is ahead' ]]; then
- PS1+="${symbols[ahead]}"
- fi
- if [[ $git_status =~ 'Your branch is behind' ]]; then
- PS1+="${symbols[behind]}"
- fi
- if [[ $git_status =~ 'Changes to be committed' ]]; then
- PS1+="${symbols[tick]}"
- fi
- if [[ $git_status =~ 'Changed but not updated' ||
- $git_status =~ 'Changes not staged' ||
- $git_status =~ 'Unmerged paths' ]]; then
- PS1+="${symbols[cross]}"
- fi
- if [[ $git_status =~ 'Your branch'.+diverged ]]; then
- PS1+="${symbols[enter]}"
- fi
- PS1+=" "
- fi
- }
-
- # $1 - FG local
- # $2 - BG User
- # $3 - FG Remote
- # $4 - BG Root
- section_tty () {
- local TTY=`ps aux | grep $$ | grep bash | awk '{ print $7 }'`
- local SESS_SRC=`who | grep $TTY | awk '{ print $6 }'`
- local USR=0 # 0 = User | 1 = Root
- local FG=$1
- local BG=$2
-
- # Okay...Now who we be?
- if [ `/usr/bin/whoami` = "root" ] ; then
- USR=1
- BG=$4
- fi
-
- SSH_IP=`echo $SSH_CLIENT | awk '{ print $1 }'`
- if [ $SSH_IP ] ; then
- FG=$3
- else
- SSH_IP=`echo $SSH2_CLIENT | awk '{ print $1 }'`
- if [ $SSH_IP ]; then
- FG=$3
- fi
- fi
-
- if [ "$last_section_bg" ]; then
- section_separator $1 $2
- fi
- last_section_bg=$2
- PS1+="$(_CC $FG $BG) ${TTY} "
- }
-
-
- # NOTE: Removed this as it does not handle paths with spaces well.
- #short_PWD ()
- #{
- # local PRE= NAME="$1" LENGTH="$2";
- # [[ "$NAME" != "${NAME#$HOME/}" || -z "${NAME#$HOME}" ]] &&
- # PRE+='~' NAME="${NAME#$HOME}" LENGTH=$[LENGTH-1];
- # ((${#NAME}>$LENGTH)) && NAME="/...${NAME:$[${#NAME}-LENGTH+4]}";
- # echo "$PRE$NAME"
- #}
-
-
- set_prompt() {
- local lec="$?"
- if [ -z "$PROMPT_DIRTRIM" ]; then
- PROMPT_DIRTRIM=2
- fi
- local color=$GREEN
- local bg=$BG_LBLUE
- local smilie=" ${symbols[smilie]} "
- local DL="\033[1B"
- local UL2="\033[1A"
- if [ $COLOR_PROMPT = yes ]; then
- if [ $lec -ne 0 ]; then
- color=$RED
- smilie=" ${symbols[frownie]} "
- 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} "
- section "\n\033[1A$(printf "%*s" $(($(tput cols)-2)) "") \r" $BLUE $BG_GREY
- section $smilie $color $BG_BLACK 1 true
- section_tty $BLACK $BG_LBLUE $RED $BG_YELLOW
- section " \u@\h " $BLUE $BG_LCYAN
- section " \w " $LCYAN $BG_BLUE
- #section " $(short_PWD $PWD 20) " $LCYAN $BG_BLUE
- section_git_status $YELLOW $BG_LBLUE
- section "\n" $DEFAULT $BG_GREY
- section_separator
- PS1+="> \[\033[K\]"
- unset last_section_bg
- else
- PS1="${debian_chroot:+($debian_chroot)}\u@\h:\w\$ "
- fi
- }
-
- PROMPT_COMMAND="set_prompt; $PROMPT_COMMAND"
|