|
|
@@ -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" |