-
Notifications
You must be signed in to change notification settings - Fork 12
/
ps1_prompt
99 lines (85 loc) · 4.42 KB
/
ps1_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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#!/bin/bash
# TODO: Currently, this is hardcoded. Ideally, this should be rewritten to be configurable.
function ps1_powerline {
RETCODE=$? # save return code
NUM_JOBS=$(jobs -rp | wc -l)
GIT_BRANCH=$(__git_ps1)
local GREY="\[\e[48;5;240m\]\[\e[38;5;250m\]"
local GREY_END="\[\e[48;5;2m\]\[\e[38;5;240m\]"
local GREEN="\[\e[48;5;2m\]\[\e[38;5;255m\]"
local GREEN_END="\[\e[48;5;27m\]\[\e[38;5;2m\]"
local ORANGE="\[\e[48;5;208m\]\[\e[38;5;255m\]"
local ORANGE_END="\[\e[48;5;236m\]\[\e[38;5;208m\]"
local ORANGE_RET_END="\[\e[48;5;160m\]\[\e[38;5;208m\]" # when next segment is prompt with return code
local BLUE="\[\e[48;5;27m\]\[\e[38;5;255m\]"
local BLUE_END="\[\e[48;5;208m\]\[\e[38;5;27m\]" # when next segment is git
local BLUE_END_JOBS="\[\e[48;5;93m\]\[\e[38;5;27m\]" # when next segment is jobs
local BLUE_END_ALT="\[\e[48;5;236m\]\[\e[38;5;27m\]" # when next segment is prompt
local BLUE_END_RET="\[\e[48;5;160m\]\[\e[38;5;27m\]" # when next segment is prompt with return code
local JOBS="\[\e[48;5;93m\]\[\e[38;5;255m\] ⏎"
local JOBS_END="\[\e[48;5;236m\]\[\e[38;5;93m\]" # when next segment is prompt
local JOBS_NO_RET_END="\[\e[48;5;208m\]\[\e[38;5;93m\]" # when next segment is git
local JOBS_NO_GIT_END="\[\e[48;5;160m\]\[\e[38;5;93m\]" # when next segment is prompt with return code
local RET="\[\e[48;5;160m\]\[\e[38;5;255m\]"
local RET_END="\[\e[0m\]\[\e[38;5;160m\]\[\e[0m\] "
local PROMPT="\[\e[48;5;236m\]\[\e[38;5;255m\]"
local PROMPT_END="\[\e[0m\]\[\e[38;5;236m\]\[\e[0m\] "
if [ ! -w "$PWD" ]; then
# Current directory is not writable
BLUE_END="\[\e[48;5;160m\]\[\e[38;5;27m\]\[\e[38;5;255m\] \[\e[48;5;208m\]\[\e[38;5;160m\]"
BLUE_END_JOBS="\[\e[48;5;160m\]\[\e[38;5;27m\]\[\e[38;5;255m\] \[\e[48;5;93m\]\[\e[38;5;160m\]"
BLUE_END_ALT="\[\e[48;5;160m\]\[\e[38;5;27m\]\[\e[38;5;255m\] \[\e[48;5;236m\]\[\e[38;5;160m\]"
BLUE_END_RET="\[\e[48;5;160m\]\[\e[38;5;27m\]\[\e[38;5;255m\] "
fi
if [ -z "$GIT_BRANCH" ]; then
# Is not a git repo
if [ "$RETCODE" -eq 0 ]; then
if [ "$NUM_JOBS" -eq 0 ]; then
# No jobs or ret code
PS1="$GREY \t $GREY_END$GREEN @\h $GREEN_END$BLUE \W $BLUE_END_ALT$PROMPT \$ $PROMPT_END"
else
# no ret code but jobs
PS1="$GREY \t $GREY_END$GREEN @\h $GREEN_END$BLUE \W $BLUE_END_JOBS$JOBS$NUM_JOBS $JOBS_END$PROMPT \$ $PROMPT_END"
fi
else
if [ "$NUM_JOBS" -eq 0 ]; then
# No jobs but ret code is there
PS1="$GREY \t $GREY_END$GREEN @\h $GREEN_END$BLUE \W $BLUE_END_RET$RET \$ ⚑ $RETCODE $RET_END"
else
# Both jobs and ret code
PS1="$GREY \t $GREY_END$GREEN @\h $GREEN_END$BLUE \W $BLUE_END_JOBS$JOBS$NUM_JOBS $JOBS_NO_GIT_END$RET \$ ⚑ $RETCODE $RET_END"
fi
fi
else
# Is a git repo
local NUM_MODIFIED=$(git diff --name-only --diff-filter=M | wc -l)
local NUM_STAGED=$(git diff --staged --name-only --diff-filter=AM | wc -l)
local NUM_CONFLICT=$(git diff --name-only --diff-filter=U | wc -l)
local GIT_STATUS="\[\e[48;5;255m\]\[\e[38;5;208m\]\[\e[38;5;27m\] ✚$NUM_MODIFIED \[\e[38;5;208m\]\[\e[38;5;2m\] ✔$NUM_STAGED \[\e[38;5;208m\]\[\e[38;5;9m\] ✘$NUM_CONFLICT "
if [ "$RETCODE" -eq 0 ]; then
GIT_STATUS+="\[\e[38;5;255m\]\[\e[48;5;236m\]"
else
GIT_STATUS+="\[\e[38;5;255m\]\[\e[48;5;160m\]"
fi
if [ "$RETCODE" -eq 0 ]; then
if [ "$NUM_JOBS" -eq 0 ]; then
# No jobs or ret code
PS1="$GREY \t $GREY_END$GREEN @\h $GREEN_END$BLUE \W $BLUE_END$ORANGE $GIT_BRANCH $GIT_STATUS$PROMPT \$ $PROMPT_END"
else
# no ret code but jobs
PS1="$GREY \t $GREY_END$GREEN @\h $GREEN_END$BLUE \W $BLUE_END_JOBS$JOBS$NUM_JOBS $JOBS_NO_RET_END$ORANGE $GIT_BRANCH $GIT_STATUS$PROMPT \$ $PROMPT_END"
fi
else
if [ "$NUM_JOBS" -eq 0 ]; then
# No jobs but ret code is there
PS1="$GREY \t $GREY_END$GREEN @\h $GREEN_END$BLUE \W $BLUE_END$ORANGE $GIT_BRANCH $GIT_STATUS$RET \$ ⚑ $RETCODE $RET_END"
else
# Both jobs and ret code
PS1="$GREY \t $GREY_END$GREEN @\h $GREEN_END$BLUE \W $BLUE_END_JOBS$JOBS$NUM_JOBS $JOBS_NO_RET_END$ORANGE $GIT_BRANCH $GIT_STATUS$RET \$ ⚑ $RETCODE $RET_END"
fi
fi
fi
}
if [ "$TERM" != "linux" ]; then
PROMPT_COMMAND="ps1_powerline; $PROMPT_COMMAND"
fi