mirror of
https://github.com/harivansh-afk/nix.git
synced 2026-04-15 23:01:36 +00:00
183 lines
5 KiB
Bash
183 lines
5 KiB
Bash
# vim:ft=zsh ts=2 sw=2 sts=2
|
|
#
|
|
# agnoster's Theme - https://gist.github.com/3712874
|
|
# A Powerline-inspired theme for ZSH
|
|
|
|
### Segment drawing
|
|
CURRENT_BG='NONE'
|
|
|
|
case ${SOLARIZED_THEME:-dark} in
|
|
light)
|
|
CURRENT_FG=${CURRENT_FG:-'white'}
|
|
CURRENT_DEFAULT_FG=${CURRENT_DEFAULT_FG:-'white'}
|
|
;;
|
|
*)
|
|
CURRENT_FG=${CURRENT_FG:-'black'}
|
|
CURRENT_DEFAULT_FG=${CURRENT_DEFAULT_FG:-'default'}
|
|
;;
|
|
esac
|
|
|
|
### Theme Configuration Initialization
|
|
: ${AGNOSTER_DIR_FG:=${CURRENT_FG}}
|
|
: ${AGNOSTER_DIR_BG:=blue}
|
|
|
|
: ${AGNOSTER_CONTEXT_FG:=${CURRENT_DEFAULT_FG}}
|
|
: ${AGNOSTER_CONTEXT_BG:=black}
|
|
|
|
: ${AGNOSTER_GIT_CLEAN_FG:=${CURRENT_FG}}
|
|
: ${AGNOSTER_GIT_CLEAN_BG:=green}
|
|
: ${AGNOSTER_GIT_DIRTY_FG:=black}
|
|
: ${AGNOSTER_GIT_DIRTY_BG:=yellow}
|
|
|
|
: ${AGNOSTER_BZR_CLEAN_FG:=${CURRENT_FG}}
|
|
: ${AGNOSTER_BZR_CLEAN_BG:=green}
|
|
: ${AGNOSTER_BZR_DIRTY_FG:=black}
|
|
: ${AGNOSTER_BZR_DIRTY_BG:=yellow}
|
|
|
|
: ${AGNOSTER_HG_NEWFILE_FG:=white}
|
|
: ${AGNOSTER_HG_NEWFILE_BG:=red}
|
|
: ${AGNOSTER_HG_CHANGED_FG:=black}
|
|
: ${AGNOSTER_HG_CHANGED_BG:=yellow}
|
|
: ${AGNOSTER_HG_CLEAN_FG:=${CURRENT_FG}}
|
|
: ${AGNOSTER_HG_CLEAN_BG:=green}
|
|
|
|
: ${AGNOSTER_VENV_FG:=black}
|
|
: ${AGNOSTER_VENV_BG:=blue}
|
|
|
|
: ${AGNOSTER_AWS_PROD_FG:=yellow}
|
|
: ${AGNOSTER_AWS_PROD_BG:=red}
|
|
: ${AGNOSTER_AWS_FG:=black}
|
|
: ${AGNOSTER_AWS_BG:=green}
|
|
|
|
: ${AGNOSTER_STATUS_RETVAL_FG:=red}
|
|
: ${AGNOSTER_STATUS_ROOT_FG:=yellow}
|
|
: ${AGNOSTER_STATUS_JOB_FG:=cyan}
|
|
: ${AGNOSTER_STATUS_FG:=${CURRENT_DEFAULT_FG}}
|
|
: ${AGNOSTER_STATUS_BG:=black}
|
|
|
|
: ${AGNOSTER_STATUS_RETVAL_NUMERIC:=false}
|
|
: ${AGNOSTER_GIT_INLINE:=false}
|
|
: ${AGNOSTER_GIT_BRANCH_STATUS:=true}
|
|
|
|
() {
|
|
local LC_ALL="" LC_CTYPE="en_US.UTF-8"
|
|
SEGMENT_SEPARATOR=$'\ue0b0'
|
|
}
|
|
|
|
prompt_segment() {
|
|
local bg fg
|
|
[[ -n $1 ]] && bg="%K{$1}" || bg="%k"
|
|
[[ -n $2 ]] && fg="%F{$2}" || fg="%f"
|
|
if [[ $CURRENT_BG != 'NONE' && $1 != $CURRENT_BG ]]; then
|
|
echo -n " %{$bg%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR%{$fg%} "
|
|
else
|
|
echo -n "%{$bg%}%{$fg%} "
|
|
fi
|
|
CURRENT_BG=$1
|
|
[[ -n $3 ]] && echo -n $3
|
|
}
|
|
|
|
prompt_end() {
|
|
if [[ -n $CURRENT_BG ]]; then
|
|
echo -n " %{%k%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR"
|
|
else
|
|
echo -n "%{%k%}"
|
|
fi
|
|
echo -n "%{%f%}"
|
|
CURRENT_BG=''
|
|
}
|
|
|
|
git_toplevel() {
|
|
local repo_root=$(git rev-parse --show-toplevel)
|
|
if [[ $repo_root = '' ]]; then
|
|
repo_root=$(git rev-parse --git-dir)
|
|
[[ $repo_root = '.' ]] && repo_root=$PWD
|
|
fi
|
|
echo -n $repo_root
|
|
}
|
|
|
|
### Prompt components
|
|
|
|
prompt_context() {
|
|
if [[ -n "$SSH_CLIENT" ]]; then
|
|
prompt_segment "$AGNOSTER_CONTEXT_BG" "$AGNOSTER_CONTEXT_FG" "%(!.%{%F{$AGNOSTER_STATUS_ROOT_FG}%}.)%n@%m"
|
|
fi
|
|
}
|
|
|
|
prompt_git_relative() {
|
|
local repo_root=$(git_toplevel)
|
|
local path_in_repo=$(pwd | sed "s/^$(echo "$repo_root" | sed 's:/:\\/:g;s/\$/\\$/g')//;s:^/::;s:/$::;")
|
|
[[ $path_in_repo != '' ]] && prompt_segment "$AGNOSTER_DIR_BG" "$AGNOSTER_DIR_FG" "$path_in_repo"
|
|
}
|
|
|
|
prompt_git() {
|
|
(( $+commands[git] )) || return
|
|
[[ "$(command git config --get oh-my-zsh.hide-status 2>/dev/null)" = 1 ]] && return
|
|
|
|
local PL_BRANCH_CHAR
|
|
() { local LC_ALL="" LC_CTYPE="en_US.UTF-8"; PL_BRANCH_CHAR=$'\ue0a0' }
|
|
|
|
if [[ "$(command git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]]; then
|
|
local dirty ref
|
|
dirty=$(parse_git_dirty)
|
|
ref=$(command git symbolic-ref HEAD 2>/dev/null) || \
|
|
ref="➦ $(command git rev-parse --short HEAD 2>/dev/null)"
|
|
|
|
if [[ -n $dirty ]]; then
|
|
prompt_segment "$AGNOSTER_GIT_DIRTY_BG" "$AGNOSTER_GIT_DIRTY_FG"
|
|
else
|
|
prompt_segment "$AGNOSTER_GIT_CLEAN_BG" "$AGNOSTER_GIT_CLEAN_FG"
|
|
fi
|
|
|
|
echo -n "${${ref:gs/%/%%}/refs\/heads\//$PL_BRANCH_CHAR }"
|
|
fi
|
|
}
|
|
|
|
prompt_dir() {
|
|
if [[ $AGNOSTER_GIT_INLINE == 'true' ]] && $(git rev-parse --is-inside-work-tree >/dev/null 2>&1); then
|
|
prompt_segment "$AGNOSTER_DIR_BG" "$AGNOSTER_DIR_FG" "$(git_toplevel | sed "s:^$HOME:~:")"
|
|
else
|
|
prompt_segment "$AGNOSTER_DIR_BG" "$AGNOSTER_DIR_FG" '%~'
|
|
fi
|
|
}
|
|
|
|
prompt_virtualenv() {
|
|
return
|
|
}
|
|
|
|
prompt_status() {
|
|
local -a symbols
|
|
[[ $AGNOSTER_STATUS_RETVAL_NUMERIC == 'true' && $RETVAL -ne 0 ]] && symbols+="%{%F{$AGNOSTER_STATUS_RETVAL_FG}%}$RETVAL"
|
|
[[ $AGNOSTER_STATUS_RETVAL_NUMERIC != 'true' && $RETVAL -ne 0 ]] && symbols+="%{%F{$AGNOSTER_STATUS_RETVAL_FG}%}✘"
|
|
[[ $UID -eq 0 ]] && symbols+="%{%F{$AGNOSTER_STATUS_ROOT_FG}%}⚡"
|
|
[[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{$AGNOSTER_STATUS_JOB_FG}%}⚙"
|
|
[[ -n "$symbols" ]] && prompt_segment "$AGNOSTER_STATUS_BG" "$AGNOSTER_STATUS_FG" "$symbols"
|
|
}
|
|
|
|
prompt_aws() {
|
|
[[ -z "$AWS_PROFILE" || "$SHOW_AWS_PROMPT" = false ]] && return
|
|
case "$AWS_PROFILE" in
|
|
*-prod|*production*) prompt_segment "$AGNOSTER_AWS_PROD_BG" "$AGNOSTER_AWS_PROD_FG" "AWS: ${AWS_PROFILE:gs/%/%%}" ;;
|
|
*) prompt_segment "$AGNOSTER_AWS_BG" "$AGNOSTER_AWS_FG" "AWS: ${AWS_PROFILE:gs/%/%%}" ;;
|
|
esac
|
|
}
|
|
|
|
prompt_terraform() {
|
|
local terraform_info=$(tf_prompt_info)
|
|
[[ -z "$terraform_info" ]] && return
|
|
prompt_segment magenta yellow "TF: $terraform_info"
|
|
}
|
|
|
|
build_prompt() {
|
|
RETVAL=$?
|
|
prompt_status
|
|
prompt_virtualenv
|
|
prompt_aws
|
|
prompt_terraform
|
|
prompt_context
|
|
prompt_dir
|
|
prompt_git
|
|
prompt_end
|
|
}
|
|
|
|
PROMPT='%{%f%b%k%}$(build_prompt) '
|