-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Expand file tree
/
Copy pathpowerline.base.bash
More file actions
338 lines (283 loc) · 11.3 KB
/
powerline.base.bash
File metadata and controls
338 lines (283 loc) · 11.3 KB
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
# shellcheck shell=bash
# shellcheck disable=SC2034 # Expected behavior for themes.
#To set color for foreground and background
function set_color() {
local fg='' bg=''
if [[ "${1:-}" != "-" ]]; then
fg="38;5;${1}"
fi
if [[ "${2:-}" != "-" ]]; then
bg="48;5;${2}"
if [[ -n "${fg}" ]]; then
bg=";${bg}"
fi
fi
printf '\[\\e[%s%sm\]' "${fg}" "${bg}"
}
#Customising User Info Segment
function __powerline_user_info_prompt() {
local user_info='\u'
local color=${USER_INFO_THEME_PROMPT_COLOR-${POWERLINE_USER_INFO_COLOR-"32"}}
if [[ "${THEME_CHECK_SUDO:-false}" == true ]]; then
if sudo -vn 2> /dev/null; then
color=${USER_INFO_THEME_PROMPT_COLOR_SUDO-${POWERLINE_USER_INFO_COLOR_SUDO-"202"}}
if [[ "${POWERLINE_PROMPT_USER_INFO_MODE:-}" == "sudo" ]]; then
user_info="!"
fi
fi
fi
if [[ -n "${SSH_CLIENT:-}" || -n "${SSH_CONNECTION:-}" ]]; then
user_info="${USER_INFO_SSH_CHAR-${POWERLINE_USER_INFO_SSH_CHAR-"⌁"}}${user_info}"
fi
printf '%s|%s' "${user_info}" "${color}"
}
function __powerline_terraform_prompt() {
local terraform_workspace=""
if [[ -d .terraform ]]; then
terraform_workspace="$(terraform_workspace_prompt)"
if [[ -n "${terraform_workspace}" ]]; then
printf '%s%s|%s' "${TERRAFORM_CHAR-${POWERLINE_TERRAFORM_CHAR-"❲t❳"}}" "${terraform_workspace}" "${TERRAFORM_THEME_PROMPT_COLOR-${POWERLINE_TERRAFORM_COLOR-"161"}}"
fi
fi
}
function __powerline_gcloud_prompt() {
local active_gcloud_account=""
active_gcloud_account="$(active_gcloud_account_prompt)"
if [[ -n "${active_gcloud_account}" ]]; then
printf '%s%s|%s' "${GCLOUD_CHAR-${POWERLINE_GCLOUD_CHAR-"❲G❳"}}" "${active_gcloud_account}" "${GCLOUD_THEME_PROMPT_COLOR-${POWERLINE_GCLOUD_COLOR-"161"}}"
fi
}
function __powerline_node_prompt() {
local node_version=""
node_version="$(node_version_prompt)"
if [[ -n "${node_version}" ]]; then
printf '%s%s|%s' "${NODE_CHAR-${POWERLINE_NODE_CHAR-="❲n❳"}}" "${node_version}" "${NODE_THEME_PROMPT_COLOR-${POWERLINE_NODE_COLOR-"22"}}"
fi
}
#Customising Ruby Prompt
function __powerline_ruby_prompt() {
local ruby_version
if _command_exists rvm; then
ruby_version="$(rvm_version_prompt)"
elif _command_exists rbenv; then
ruby_version=$(rbenv_version_prompt)
fi
if [[ -n "${ruby_version:-}" ]]; then
printf '%s%s|%s' "${RUBY_CHAR-${POWERLINE_RUBY_CHAR-"💎"}}" "${ruby_version}" "${RUBY_THEME_PROMPT_COLOR-${POWERLINE_RUBY_COLOR-"161"}}"
fi
}
function __powerline_k8s_context_prompt() {
local kubernetes_context=""
if _command_exists kubectl; then
kubernetes_context="$(k8s_context_prompt)"
fi
if [[ -n "${kubernetes_context}" ]]; then
printf '%s%s|%s' "${KUBERNETES_CONTEXT_THEME_CHAR-${POWERLINE_KUBERNETES_CONTEXT_CHAR-"⎈"}}" "${kubernetes_context}" "${KUBERNETES_CONTEXT_THEME_PROMPT_COLOR-${POWERLINE_KUBERNETES_CONTEXT_COLOR-"26"}}"
fi
}
function __powerline_k8s_namespace_prompt() {
local kubernetes_namespace=""
if _command_exists kubectl; then
kubernetes_namespace="$(k8s_namespace_prompt)"
fi
if [[ -n "${kubernetes_namespace}" ]]; then
printf '%s%s|%s' "${KUBERNETES_NAMESPACE_THEME_CHAR-${POWERLINE_KUBERNETES_NAMESPACE_CHAR-"⎈"}}" "${kubernetes_namespace}" "${KUBERNETES_NAMESPACE_THEME_PROMPT_COLOR-${POWERLINE_KUBERNETES_NAMESPACE_COLOR-"60"}}"
fi
}
#Customising Python (venv) Prompt
function __powerline_python_venv_prompt() {
local python_venv=""
if [[ -n "${CONDA_DEFAULT_ENV:-}" ]]; then
python_venv="${CONDA_DEFAULT_ENV}"
local PYTHON_VENV_CHAR=${CONDA_PYTHON_VENV_CHAR-${POWERLINE_CONDA_PYTHON_VENV_CHAR-"ⓔ"}}
elif [[ -n "${VIRTUAL_ENV:-}" ]]; then
python_venv="${VIRTUAL_ENV##*/}"
fi
if [[ -n "${python_venv}" ]]; then
printf '%s%s|%s' "${PYTHON_VENV_CHAR-${POWERLINE_PYTHON_VENV_CHAR-"ⓔ"}}" "${python_venv}" "${PYTHON_VENV_THEME_PROMPT_COLOR-${POWERLINE_PYTHON_VENV_COLOR-"35"}}"
fi
}
#Customising SCM(GIT) Prompt
function __powerline_scm_prompt() {
local color=""
local scm_prompt=""
scm_prompt_vars
if [[ "${SCM_NONE_CHAR?}" != "${SCM_CHAR?}" ]]; then
if [[ "${SCM_DIRTY?}" -eq 3 ]]; then
color=${SCM_THEME_PROMPT_STAGED_COLOR-${POWERLINE_SCM_STAGED_COLOR-"30"}}
elif [[ "${SCM_DIRTY?}" -eq 2 ]]; then
color=${SCM_THEME_PROMPT_UNSTAGED_COLOR-${POWERLINE_SCM_UNSTAGED_COLOR-"92"}}
elif [[ "${SCM_DIRTY?}" -eq 1 ]]; then
color=${SCM_THEME_PROMPT_DIRTY_COLOR-${POWERLINE_SCM_DIRTY_COLOR-"88"}}
elif [[ "${SCM_DIRTY?}" -eq 0 ]]; then
color=${SCM_THEME_PROMPT_CLEAN_COLOR-${POWERLINE_SCM_CLEAN_COLOR-"25"}}
else
color=${SCM_THEME_PROMPT_COLOR-${POWERLINE_SCM_CLEAN_COLOR-"25"}}
fi
if [[ "${SCM_GIT_CHAR?}" == "${SCM_CHAR?}" ]]; then
scm_prompt+="${SCM_CHAR}${SCM_BRANCH?}${SCM_STATE?}"
elif [[ "${SCM_P4_CHAR?}" == "${SCM_CHAR}" ]]; then
scm_prompt+="${SCM_CHAR}${SCM_BRANCH?}${SCM_STATE?}"
elif [[ "${SCM_HG_CHAR?}" == "${SCM_CHAR}" ]]; then
scm_prompt+="${SCM_CHAR}${SCM_BRANCH?}${SCM_STATE?}"
elif [[ "${SCM_SVN_CHAR?}" == "${SCM_CHAR}" ]]; then
scm_prompt+="${SCM_CHAR}${SCM_BRANCH?}${SCM_STATE?}"
fi
printf '%s|%s' "${scm_prompt}" "${color}"
fi
}
function __powerline_cwd_prompt() {
printf '%s|%s' "\w" "${CWD_THEME_PROMPT_COLOR-"240"}"
}
function __powerline_hostname_prompt() {
printf '%s|%s' "\h" "${HOST_THEME_PROMPT_COLOR-"0"}"
}
function __powerline_wd_prompt() {
printf '%s|%s' "\W" "${CWD_THEME_PROMPT_COLOR-"240"}"
}
function __powerline_clock_prompt() {
printf '%s|%s' "\D{${THEME_CLOCK_FORMAT-"%H:%M:%S"}}" "${CLOCK_THEME_PROMPT_COLOR-"240"}"
}
function __powerline_battery_prompt() {
local color="" battery_status
battery_status="$(battery_percentage 2> /dev/null)"
if [[ -z "${battery_status}" || "${battery_status}" == "-1" || "${battery_status}" == "no" ]]; then
true
else
if [[ "$((10#${battery_status}))" -le 5 ]]; then
color="${BATTERY_STATUS_THEME_PROMPT_CRITICAL_COLOR-"160"}"
elif [[ "$((10#${battery_status}))" -le 25 ]]; then
color="${BATTERY_STATUS_THEME_PROMPT_LOW_COLOR-"208"}"
else
color="${BATTERY_STATUS_THEME_PROMPT_GOOD_COLOR-"70"}"
fi
if ac_adapter_connected; then
battery_status="${BATTERY_AC_CHAR-"+"}${battery_status}"
fi
printf '%s|%s' "${battery_status}%" "${color}"
fi
}
function __powerline_in_vim_prompt() {
if [[ -n "${VIMRUNTIME:-}" ]]; then
printf '%s|%s' "${IN_VIM_THEME_PROMPT_TEXT-"vim"}" "${IN_VIM_THEME_PROMPT_COLOR-"245"}"
fi
}
function __powerline_aws_profile_prompt() {
if [[ -n "${AWS_PROFILE:-}" ]]; then
printf '%s%s|%s' "${AWS_PROFILE_CHAR-${POWERLINE_AWS_PROFILE_CHAR-"❲aws❳"}}" "${AWS_PROFILE}" "${AWS_PROFILE_PROMPT_COLOR-${POWERLINE_AWS_PROFILE_COLOR-"208"}}"
fi
}
function __powerline_in_toolbox_prompt() {
if [[ -f /run/.containerenv && -f /run/.toolboxenv ]]; then
printf '%s|%s' "${IN_TOOLBOX_THEME_PROMPT_TEXT-"⬢"}" "${IN_TOOLBOX_THEME_PROMPT_COLOR-"125"}"
fi
}
function __powerline_shlvl_prompt() {
if [[ "${SHLVL}" -gt 1 ]]; then
local prompt="${SHLVL_THEME_PROMPT_CHAR-"§"}"
local level=$((SHLVL - 1))
printf '%s|%s' "${prompt}${level}" "${SHLVL_THEME_PROMPT_COLOR-${HOST_THEME_PROMPT_COLOR-"0"}}"
fi
}
function __powerline_dirstack_prompt() {
if [[ "${#DIRSTACK[@]}" -gt 1 ]]; then
local depth=$((${#DIRSTACK[@]} - 1))
local prompt="${DIRSTACK_THEME_PROMPT_CHAR-${POWERLINE_DIRSTACK_CHAR-"←"}}"
if [[ "${depth}" -ge 2 ]]; then
prompt+="${depth}"
fi
printf '%s|%s' "${prompt}" "${DIRSTACK_THEME_PROMPT_COLOR-${POWERLINE_DIRSTACK_COLOR-${CWD_THEME_PROMPT_COLOR-${POWERLINE_CWD_COLOR-"240"}}}}"
fi
}
function __powerline_history_number_prompt() {
printf '%s%s|%s' "${HISTORY_NUMBER_THEME_PROMPT_CHAR-${POWERLINE_HISTORY_NUMBER_CHAR-"#"}}" '\!' "${HISTORY_NUMBER_THEME_PROMPT_COLOR-${POWERLINE_HISTORY_NUMBER_COLOR-"0"}}"
}
function __powerline_command_number_prompt() {
printf '%s%s|%s' "${COMMAND_NUMBER_THEME_PROMPT_CHAR-${POWERLINE_COMMAND_NUMBER_CHAR-"#"}}" '\#' "${COMMAND_NUMBER_THEME_PROMPT_COLOR-${POWERLINE_COMMAND_NUMBER_COLOR-"0"}}"
}
function __powerline_duration_prompt() {
local duration
duration=$(_command_duration)
if [[ -n "$duration" ]]; then
printf '%s|%s' "${duration}" "${COMMAND_DURATION_PROMPT_COLOR?}"
fi
}
function __powerline_left_segment() {
local -a params
IFS="|" read -ra params <<< "${1}"
local pad_before_segment=" "
#for seperator character
if [[ "${SEGMENTS_AT_LEFT?}" -eq 0 ]]; then
if [[ "${POWERLINE_COMPACT_BEFORE_FIRST_SEGMENT:-${POWERLINE_COMPACT:-0}}" -ne 0 ]]; then
pad_before_segment=""
fi
else
if [[ "${POWERLINE_COMPACT_AFTER_SEPARATOR:-${POWERLINE_COMPACT:-0}}" -ne 0 ]]; then
pad_before_segment=""
fi
# Since the previous segment wasn't the last segment, add padding, if needed
#
if [[ "${POWERLINE_COMPACT_BEFORE_SEPARATOR:-${POWERLINE_COMPACT:-0}}" -eq 0 ]]; then
LEFT_PROMPT+="$(set_color - "${LAST_SEGMENT_COLOR?}") ${normal?}"
fi
if [[ "${LAST_SEGMENT_COLOR?}" -eq "${params[1]:-}" ]]; then
LEFT_PROMPT+="$(set_color - "${LAST_SEGMENT_COLOR?}")${POWERLINE_LEFT_SEPARATOR_SOFT- }${normal?}"
else
LEFT_PROMPT+="$(set_color "${LAST_SEGMENT_COLOR?}" "${params[1]:-}")${POWERLINE_LEFT_SEPARATOR- }${normal?}"
fi
fi
#change here to cahnge fg color
LEFT_PROMPT+="$(set_color - "${params[1]:-}")${pad_before_segment}${params[0]}${normal?}"
#seperator char color == current bg
LAST_SEGMENT_COLOR="${params[1]:-}"
((SEGMENTS_AT_LEFT += 1))
}
function __powerline_left_last_segment_padding() {
LEFT_PROMPT+="$(set_color - "${LAST_SEGMENT_COLOR?}") ${normal?}"
}
function __powerline_last_status_prompt() {
if [[ "${1:-0}" -ne 0 ]]; then
printf '%s|%s' "${1}" "${LAST_STATUS_THEME_PROMPT_COLOR-"52"}"
fi
}
function __powerline_prompt_command() {
local last_status="$?" ## always the first
local beginning_of_line='\[\e[G\]'
local info prompt_color segment prompt
# Reversed % marks where a missing trailing newline was; \r\e[K then
# clears the line so the prompt always starts cleanly at column 1.
printf '%b' '\e[7m%\e[0m\r\e[K'
local LEFT_PROMPT=""
local SEGMENTS_AT_LEFT=0
local LAST_SEGMENT_COLOR=""
_save-and-reload-history "${HISTORY_AUTOSAVE:-0}"
if [[ -n "${POWERLINE_PROMPT_DISTRO_LOGO:-}" ]]; then
LEFT_PROMPT+="$(set_color "${PROMPT_DISTRO_LOGO_COLOR?}" "${PROMPT_DISTRO_LOGO_COLORBG?}")${PROMPT_DISTRO_LOGO?}$(set_color - -)"
fi
## left prompt ##
# shellcheck disable=SC2068 # intended behavior
for segment in ${POWERLINE_PROMPT[@]-"user_info" "scm" "python_venv" "ruby" "node" "cwd"}; do
info="$("__powerline_${segment}_prompt")"
if [[ -n "${info}" ]]; then
__powerline_left_segment "${info}"
fi
done
if [[ "${last_status}" -ne 0 ]]; then
__powerline_left_segment "$(__powerline_last_status_prompt "${last_status}")"
fi
if [[ -n "${LEFT_PROMPT:-}" && "${POWERLINE_COMPACT_AFTER_LAST_SEGMENT:-${POWERLINE_COMPACT:-0}}" -eq 0 ]]; then
__powerline_left_last_segment_padding
fi
# By default we try to match the prompt to the adjacent segment's background color,
# but when part of the prompt exists within that segment, we instead match the foreground color.
prompt_color="$(set_color "${LAST_SEGMENT_COLOR?}" -)"
if [[ -n "${LEFT_PROMPT:-}" && -n "${POWERLINE_LEFT_LAST_SEGMENT_END_CHAR:-}" ]]; then
LEFT_PROMPT+="$(set_color - "${LAST_SEGMENT_COLOR?}")${POWERLINE_LEFT_LAST_SEGMENT_END_CHAR}"
prompt_color="${normal?}"
fi
prompt="${prompt_color}${PROMPT_CHAR-${POWERLINE_PROMPT_CHAR-\\$}}${normal?}"
if [[ "${POWERLINE_COMPACT_PROMPT:-${POWERLINE_COMPACT:-0}}" -eq 0 ]]; then
prompt+=" "
fi
PS1="${beginning_of_line}${normal?}${LEFT_PROMPT}${prompt}"
}