151
|
1 function get_pwd() {
|
|
2 echo "${PWD/$HOME/~}"
|
|
3 }
|
|
4
|
|
5 eval my_gray='$FG[237]'
|
|
6 eval my_orange='$FG[214]'
|
|
7
|
|
8 function parse_git_branch() {
|
|
9 (git symbolic-ref -q HEAD || git name-rev --name-only --no-undefined --always HEAD) 2> /dev/null
|
|
10 }
|
|
11
|
|
12 # Modify the colors and symbols in these variables as desired.
|
|
13 GIT_PROMPT_PREFIX=""
|
|
14 GIT_PROMPT_SUFFIX=""
|
|
15 GIT_PROMPT_AHEAD="%{$fg[red]%} +NUM%{$reset_color%}"
|
|
16 GIT_PROMPT_BEHIND="%{$fg[green]%} -NUM%{$reset_color%}"
|
|
17 GIT_PROMPT_MERGING="%{$fg_bold[magenta]%}⚡︎%{$reset_color%}"
|
|
18 GIT_PROMPT_UNTRACKED="%{$fg[cyan]%} U%{$reset_color%}"
|
|
19 GIT_PROMPT_MODIFIED="%{$fg[blue]%} M%{$reset_color%}"
|
|
20 GIT_PROMPT_STAGED="%{$fg[green]%} A%{$reset_color%}"
|
|
21
|
|
22 ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[cyan]%} U"
|
|
23 ZSH_THEME_GIT_PROMPT_ADDED="%{$fg[green]%} A"
|
|
24 ZSH_THEME_GIT_PROMPT_DELETED="%{$fg[red]%} D"
|
|
25 ZSH_THEME_GIT_PROMPT_RENAMED="%{$fg[magenta]%} R"
|
|
26 ZSH_THEME_GIT_PROMPT_MODIFIED="%{$fg[blue]%} M"
|
|
27 ZSH_THEME_GIT_PROMPT_UNMERGED="%{$fg[yellow]%} U"
|
|
28
|
|
29 ZSH_THEME_GIT_PROMPT_PREFIX="${my_gray}"
|
|
30 ZSH_THEME_GIT_PROMPT_CLEAN=""
|
|
31 ZSH_THEME_GIT_PROMPT_DIRTY="%{$reset_color%}"
|
|
32 ZSH_THEME_GIT_PROMPT_SUFFIX="$my_gray%{$reset_color%}"
|
|
33
|
|
34 function parse_git_state() {
|
|
35 # Compose this value via multiple conditional appends.
|
|
36 local GIT_STATE=""
|
|
37
|
|
38 local NUM_AHEAD="$(git log --oneline @{u}.. 2> /dev/null | wc -l | tr -d ' ')"
|
|
39 if [ "$NUM_AHEAD" -gt 0 ]; then
|
|
40 GIT_STATE=$GIT_STATE${GIT_PROMPT_AHEAD//NUM/$NUM_AHEAD}
|
|
41 fi
|
|
42
|
|
43 local NUM_BEHIND="$(git log --oneline ..@{u} 2> /dev/null | wc -l | tr -d ' ')"
|
|
44 if [ "$NUM_BEHIND" -gt 0 ]; then
|
|
45 GIT_STATE=$GIT_STATE${GIT_PROMPT_BEHIND//NUM/$NUM_BEHIND}
|
|
46 fi
|
|
47
|
|
48 local GIT_DIR="$(git rev-parse --git-dir 2> /dev/null)"
|
|
49 if [ -n $GIT_DIR ] && test -r $GIT_DIR/MERGE_HEAD; then
|
|
50 GIT_STATE=$GIT_STATE$GIT_PROMPT_MERGING
|
|
51 fi
|
|
52
|
|
53 if [[ -n $(git ls-files --other --exclude-standard 2> /dev/null) ]]; then
|
|
54 GIT_STATE=$GIT_STATE$GIT_PROMPT_UNTRACKED
|
|
55 fi
|
|
56
|
|
57 if ! git diff --quiet 2> /dev/null; then
|
|
58 GIT_STATE=$GIT_STATE$GIT_PROMPT_MODIFIED
|
|
59 fi
|
|
60
|
|
61 if ! git diff --cached --quiet 2> /dev/null; then
|
|
62 GIT_STATE=$GIT_STATE$GIT_PROMPT_STAGED
|
|
63 fi
|
|
64
|
|
65 if [[ -n $GIT_STATE ]]; then
|
|
66 echo "$GIT_PROMPT_PREFIX$GIT_STATE$GIT_PROMPT_SUFFIX"
|
|
67 fi
|
|
68 }
|
|
69 # If inside a Git repository, print its branch and state
|
|
70 function git_prompt_string() {
|
|
71 local git_where="$(parse_git_branch)"
|
|
72 [ -n "$git_where" ] && echo "on %{$fg[blue]%}${git_where#(refs/heads/|tags/)}$(parse_git_state)"
|
|
73 }
|
|
74 local my_prompt_name='%n'
|
|
75 [[ "$SSH_CONNECTION" != '' ]] && my_prompt_name='%n@%m'
|
|
76
|
|
77 PROMPT='%{$fg[cyan]%}$my_prompt_name%{$reset_color%} in %{$fg[yellow]%}%~%b%{$reset_color%}
|
|
78 %{$reset_color%}%(1j.%j .)%(?.%{$fg[white]%}.%{$fg[red]%})→ %{$reset_color%}'
|
|
79
|
|
80
|
|
81 RPROMPT='$my_gray $(git_prompt_string)%{$reset_color%}%'
|
|
82
|
|
83 ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[cyan]%} U"
|
|
84 ZSH_THEME_GIT_PROMPT_ADDED="%{$fg[green]%} A"
|
|
85 ZSH_THEME_GIT_PROMPT_DELETED="%{$fg[red]%} D"
|
|
86 ZSH_THEME_GIT_PROMPT_RENAMED="%{$fg[magenta]%} R"
|
|
87 ZSH_THEME_GIT_PROMPT_MODIFIED="%{$fg[blue]%} M"
|
|
88 ZSH_THEME_GIT_PROMPT_UNMERGED="%{$fg[yellow]%} U"
|
|
89
|
|
90 ZSH_THEME_GIT_PROMPT_PREFIX="${my_gray}"
|
|
91 ZSH_THEME_GIT_PROMPT_CLEAN=""
|
|
92 ZSH_THEME_GIT_PROMPT_DIRTY="%{$reset_color%}"
|
|
93 ZSH_THEME_GIT_PROMPT_SUFFIX="$my_gray%{$reset_color%}"
|
|
94
|
|
95
|