-
Notifications
You must be signed in to change notification settings - Fork 10
/
bash_prompt
78 lines (66 loc) · 2.03 KB
/
bash_prompt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# Awesomness in form of colors, git branch, and commit (dirty) status
#
# * Copy this file to ~/.bash_prompt
# * Add to .bashrc:
# if [ -f ~/.bash_prompt ]; then
# source ~/.bash_prompt
# fi
#
RED="\[\033[0;31m\]"
YELLOW="\[\033[0;33m\]"
GREEN="\[\033[0;32m\]"
BLUE="\[\033[0;34m\]"
LIGHT_RED="\[\033[1;31m\]"
LIGHT_GREEN="\[\033[1;32m\]"
WHITE="\[\033[1;37m\]"
LIGHT_GRAY="\[\033[0;37m\]"
COLOR_NONE="\[\e[0m\]"
function parse_git_branch {
local state=''
local remote=''
local branch=''
local origin_awk='{gsub(/https:\/\/.+@/, "https://<auth>@"); print $3}'
git rev-parse --git-dir &> /dev/null
if [[ $? -ne 0 ]]; then
return 1
fi
local git_status="$(git status 2> /dev/null)"
local origin="$(git remote show -n origin | grep 'Fetch URL:' | awk "${origin_awk}")"
local branch_pattern="^(# )?On branch ([^${IFS}]*)"
local remote_pattern='(# )?Your branch is (.*) of'
local diverge_pattern='(# )?Your branch and (.*) have diverged'
if [[ ! ${git_status} =~ "working tree clean" ]]; then
state="${RED}⚡"
fi
# add an else if or two here if you want to get more specific
if [[ ${git_status} =~ ${remote_pattern} ]]; then
if [[ ${BASH_REMATCH[2]} == "ahead" ]]; then
remote="${YELLOW}↑"
else
remote="${YELLOW}↓"
fi
fi
if [[ ${git_status} =~ ${diverge_pattern} ]]; then
remote="${YELLOW}↕"
fi
if [[ ${git_status} =~ ${branch_pattern} ]]; then
branch=${BASH_REMATCH[2]}
fi
echo "${COLOR_NONE}${origin} ${GREEN}(${branch})${remote}${state}"
}
function prompt_func() {
previous_return_value=$?;
local prompt="${TITLEBAR}"
local git_state="$(parse_git_branch)"
if [[ -n "${git_state}" ]]; then
prompt="${prompt}${BLUE}[${git_state}${BLUE}]${COLOR_NONE}\n"
fi
prompt="${prompt}${BLUE}[${HOSTNAME}${COLOR_NONE}:${YELLOW}\w${BLUE}]${COLOR_NONE} "
if [ $previous_return_value -eq 0 ] ; then
# PS1="${prompt}➔ "
PS1="${prompt}\\$ "
else
PS1="${prompt}${RED}\\$ ${COLOR_NONE}"
fi
}
PROMPT_COMMAND=prompt_func