Created
April 27, 2019 08:54
-
-
Save yingray/eacd5b671bc73cefc3114fc63ce1a79c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env zsh | |
#local return_code="%(?..%{$fg[red]%}%? ↵%{$reset_color%})" | |
setopt promptsubst | |
autoload -U add-zsh-hook | |
PROMPT_SUCCESS_COLOR=$FG[117] | |
PROMPT_FAILURE_COLOR=$FG[124] | |
PROMPT_VCS_INFO_COLOR=$FG[242] | |
PROMPT_PROMPT=$FG[077] | |
GIT_DIRTY_COLOR=$FG[133] | |
GIT_CLEAN_COLOR=$FG[118] | |
GIT_PROMPT_INFO=$FG[012] | |
ZSH_THEME_GIT_PROMPT_PREFIX=" (" | |
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$GIT_PROMPT_INFO%})" | |
ZSH_THEME_GIT_PROMPT_DIRTY=" %{$GIT_DIRTY_COLOR%}✘" | |
ZSH_THEME_GIT_PROMPT_CLEAN=" %{$GIT_CLEAN_COLOR%}✔" | |
ZSH_THEME_GIT_PROMPT_ADDED="%{$FG[082]%}✚%{$reset_color%}" | |
ZSH_THEME_GIT_PROMPT_MODIFIED="%{$FG[166]%}✹%{$reset_color%}" | |
ZSH_THEME_GIT_PROMPT_DELETED="%{$FG[160]%}✖%{$reset_color%}" | |
ZSH_THEME_GIT_PROMPT_RENAMED="%{$FG[220]%}➜%{$reset_color%}" | |
ZSH_THEME_GIT_PROMPT_UNMERGED="%{$FG[082]%}═%{$reset_color%}" | |
ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$FG[190]%}✭%{$reset_color%}" | |
ZSH_THEME_VIRTUALENV_PREFIX=" [" | |
ZSH_THEME_VIRTUALENV_SUFFIX="]" | |
prompt_kube() { | |
# Default values for the prompt | |
# Override these values in ~/.zshrc | |
KUBE_PS1_BINARY="${KUBE_PS1_BINARY:-kubectl}" | |
KUBE_PS1_SYMBOL_ENABLE="${KUBE_PS1_SYMBOL_ENABLE:-true}" | |
KUBE_PS1_SYMBOL_DEFAULT="${KUBE_PS1_SYMBOL_DEFAULT:-\u2388 }" | |
KUBE_PS1_SYMBOL_USE_IMG="${KUBE_PS1_SYMBOL_USE_IMG:-false}" | |
KUBE_PS1_NS_ENABLE="${KUBE_PS1_NS_ENABLE:-true}" | |
KUBE_PS1_SEPARATOR="${KUBE_PS1_SEPARATOR-|}" | |
KUBE_PS1_DIVIDER="${KUBE_PS1_DIVIDER-:}" | |
KUBE_PS1_PREFIX="${KUBE_PS1_PREFIX-(}" | |
KUBE_PS1_SUFFIX="${KUBE_PS1_SUFFIX-)}" | |
KUBE_PS1_LAST_TIME=0 | |
KUBE_PS1_ENABLED=true | |
KUBE_PS1_COLOR_SYMBOL="%F{blue}" | |
KUBE_PS1_COLOR_CONTEXT="%F{red}" | |
KUBE_PS1_COLOR_NS="%F{cyan}" | |
_kube_ps1_binary_check() { | |
command -v "$1" >/dev/null | |
} | |
_kube_ps1_symbol() { | |
[[ "${KUBE_PS1_SYMBOL_ENABLE}" == false ]] && return | |
KUBE_PS1_SYMBOL="${KUBE_PS1_SYMBOL_DEFAULT}" | |
KUBE_PS1_SYMBOL_IMG="\u2638 " | |
if [[ "${KUBE_PS1_SYMBOL_USE_IMG}" == true ]]; then | |
KUBE_PS1_SYMBOL="${KUBE_PS1_SYMBOL_IMG}" | |
fi | |
echo "${KUBE_PS1_SYMBOL}" | |
} | |
_kube_ps1_split() { | |
type setopt >/dev/null 2>&1 && setopt SH_WORD_SPLIT | |
local IFS=$1 | |
echo $2 | |
} | |
_kube_ps1_file_newer_than() { | |
local mtime | |
local file=$1 | |
local check_time=$2 | |
zmodload -e "zsh/stat" | |
if [[ "$?" -eq 0 ]]; then | |
mtime=$(stat +mtime "${file}") | |
elif stat -c "%s" /dev/null &> /dev/null; then | |
# GNU stat | |
mtime=$(stat -c %Y "${file}") | |
else | |
# BSD stat | |
mtime=$(stat -f %m "$file") | |
fi | |
[[ "${mtime}" -gt "${check_time}" ]] | |
} | |
_kube_ps1_update_cache() { | |
KUBECONFIG="${KUBECONFIG:=$HOME/.kube/config}" | |
if ! _kube_ps1_binary_check "${KUBE_PS1_BINARY}"; then | |
# No ability to fetch context/namespace; display N/A. | |
KUBE_PS1_CONTEXT="BINARY-N/A" | |
KUBE_PS1_NAMESPACE="N/A" | |
return | |
fi | |
if [[ "${KUBECONFIG}" != "${KUBE_PS1_KUBECONFIG_CACHE}" ]]; then | |
# User changed KUBECONFIG; unconditionally refetch. | |
KUBE_PS1_KUBECONFIG_CACHE=${KUBECONFIG} | |
_kube_ps1_get_context_ns | |
return | |
fi | |
# kubectl will read the environment variable $KUBECONFIG | |
# otherwise set it to ~/.kube/config | |
local conf | |
for conf in $(_kube_ps1_split : "${KUBECONFIG:-${HOME}/.kube/config}"); do | |
[[ -r "${conf}" ]] || continue | |
if _kube_ps1_file_newer_than "${conf}" "${KUBE_PS1_LAST_TIME}"; then | |
_kube_ps1_get_context_ns | |
return | |
fi | |
done | |
} | |
_kube_ps1_get_context_ns() { | |
# Set the command time | |
KUBE_PS1_LAST_TIME=$EPOCHSECONDS | |
KUBE_PS1_CONTEXT="$(${KUBE_PS1_BINARY} config current-context 2>/dev/null)" | |
if [[ -z "${KUBE_PS1_CONTEXT}" ]]; then | |
KUBE_PS1_CONTEXT="N/A" | |
KUBE_PS1_NAMESPACE="N/A" | |
return | |
elif [[ "${KUBE_PS1_NS_ENABLE}" == true ]]; then | |
KUBE_PS1_NAMESPACE="$(${KUBE_PS1_BINARY} config view --minify --output 'jsonpath={..namespace}' 2>/dev/null)" | |
# Set namespace to 'default' if it is not defined | |
KUBE_PS1_NAMESPACE="${KUBE_PS1_NAMESPACE:-default}" | |
fi | |
} | |
# Build our prompt | |
kube_ps1 () { | |
local reset_color="%{$reset_color%}" | |
[[ ${KUBE_PS1_ENABLED} != 'true' ]] && return | |
KUBE_PS1="${reset_color}$KUBE_PS1_PREFIX" | |
KUBE_PS1+="${KUBE_PS1_COLOR_SYMBOL}$(_kube_ps1_symbol)" | |
KUBE_PS1+="${reset_color}$KUBE_PS1_SEPERATOR" | |
KUBE_PS1+="${KUBE_PS1_COLOR_CONTEXT}$KUBE_PS1_CONTEXT${reset_color}" | |
KUBE_PS1+="$KUBE_PS1_DIVIDER" | |
KUBE_PS1+="${KUBE_PS1_COLOR_NS}$KUBE_PS1_NAMESPACE${reset_color}" | |
KUBE_PS1+="$KUBE_PS1_SUFFIX" | |
echo "${KUBE_PS1}" | |
} | |
KUBE_PS1_COLOR_SYMBOL="%F{cyan}" | |
KUBE_PS1_COLOR_CONTEXT="%F{cyan}" | |
KUBE_PS1_COLOR_NS="%F{yellow}" | |
PROMPT_NODEJS="%F{green}node%{$reset_color%}:%F{green}$(node -v)%{$reset_color%}" | |
PROMPT_GO="$(go version | awk '{print $3}')" | |
echo "🏡 %F{magenta}$VARIANT%{$reset_color%} $(kube_ps1) " | |
} | |
PROMPT='$(prompt_kube)%{$PROMPT_SUCCESS_COLOR%}%~%{$reset_color%}%{$GIT_PROMPT_INFO%}$(git_prompt_info)$(virtualenv_prompt_info)%{$GIT_DIRTY_COLOR%}$(git_prompt_status) %{$reset_color%}%{$PROMPT_PROMPT%}ᐅ%{$reset_color%} ' | |
#RPS1="${return_code}" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment