-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbash_prompt
146 lines (124 loc) · 3.43 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
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
#!/usr/bin/env bash
#
# DESCRIPTION:
#
# Set the bash prompt according to:
# * the active virtualenv / conda env
# * the branch of the current git/mercurial repository
# * the return value of the previous command
#
# USAGE:
#
# 1. Save this file as ~/.bash_prompt
# 2. Add the following line to the end of your ~/.bashrc or ~/.bash_profile:
# . ~/.bash_prompt
#
# LINEAGE:
#
# Based on work by woods
#
# https://gist.github.com/31967
# The various escape codes that we can use to color our prompt.
BLACK="\[\033[0;30m\]"
LIGHT_BLACK="\[\033[1;30m\]"
RED="\[\033[0;31m\]"
LIGHT_RED="\[\033[1;31m\]"
GREEN="\[\033[0;32m\]"
LIGHT_GREEN="\[\033[1;32m\]"
YELLOW="\[\033[0;33m\]"
LIGHT_YELLOW="\[\033[1;33m\]"
BLUE="\[\033[0;34m\]"
LIGHT_BLUE="\[\033[1;34m\]"
PURPLE="\[\033[0;35m\]"
LIGHT_PURPLE="\[\033[1;35m\]"
CYAN="\[\033[0;36m\]"
LIGHT_CYAN="\[\033[1;36m\]"
WHITE="\[\033[0;37m\]"
LIGHT_WHITE="\[\033[1;37m\]"
COLOR_NONE="\[\e[0m\]"
# determine time
function parse_datetime() {
# inconsistent across terminals or shells
# date | tr -s ' ' | cut -d ' ' -f5
printf '%(%H:%M:%S)T' -1
}
function set_time() {
time_str=$(parse_datetime)
TIME="${WHITE}(${time_str})${COLOR_NONE} "
}
# determine git branch name
function parse_git_branch() {
git branch 2>/dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
# determine mercurial branch name
function parse_hg_branch() {
hg branch 2>/dev/null | awk '{print " (" $1 ")"}'
}
# Determine the branch/state information for this git repository.
function set_git_branch() {
# Get the name of the branch.
branch=$(parse_git_branch)
# if not git then maybe mercurial
if [ "$branch" == "" ]; then
branch=$(parse_hg_branch)
fi
# Set the final branch string.
BRANCH="${CYAN}${branch}${COLOR_NONE} "
}
function set_k8s_namespace() {
kubectl config view --minify -o jsonpath="{.contexts[0].context.namespace}"
}
function set_k8s_context() {
kubectl config current-context
}
function set_k8s_prompt() {
CONTEXT=$(set_k8s_context)
NAMESPACE=$(set_k8s_namespace)
K8S="${LIGHT_WHITE}[${PURPLE}${CONTEXT}|${NAMESPACE}${LIGHT_WHITE}]${COLOR_NONE}"
}
function set_aws_profile() {
CURRENT_AWS_PROFILE=" ${WHITE}(${AWS_PROFILE})${COLOR_NONE} "
}
# Return the prompt symbol to use, colorized based on the return value of the
# previous command.
function set_prompt_symbol() {
if test $1 -eq 0; then
PROMPT_SYMBOL="\$"
else
PROMPT_SYMBOL="${LIGHT_WHITE}\$${COLOR_NONE}"
fi
}
# Determine active Python virtualenv details.
# NOTE: obsolete as we're using conda envs
function set_virtualenv() {
if test -z "$VIRTUAL_ENV"; then
PYTHON_VIRTUALENV=""
else
PYTHON_VIRTUALENV="${BLUE}[$(basename \"$VIRTUAL_ENV\")]${COLOR_NONE} "
fi
}
function set_conda_env() {
CONDA_ENV_PROMPT="${BLUE}${CONDA_PROMPT_MODIFIER}${COLOR_NONE}"
}
# Set the full bash prompt.
function set_bash_prompt() {
set_time
# Set the PROMPT_SYMBOL variable. We do this first so we don't lose the
# return value of the last command.
set_prompt_symbol $?
# Set the PYTHON_VIRTUALENV variable.
set_virtualenv
#set_conda_env
# Set the BRANCH variable.
set_git_branch
# set k8s prompt
set_k8s_prompt
# set AWS profile
set_aws_profile
# Set the bash prompt variable.
PS1="
${TIME}${PYTHON_VIRTUALENV} ${YELLOW}\w${COLOR_NONE}${BRANCH}${K8S}${CURRENT_AWS_PROFILE}
${PROMPT_SYMBOL} "
}
# Tell bash to execute this function just before displaying its prompt.
PROMPT_COMMAND=set_bash_prompt