@@ -0,0 +1,141 @@
# vim:ft=zsh ts=2 sw=2 sts=2
#
# Based on Agnoster's Theme — https://gist.github.com/3712874
# A Powerline-inspired theme for ZSH
#
# [Powerline-patched font](https://github.com/Lokaltog/powerline-fonts)
# [Solarized theme](https://github.com/altercation/solarized/)
# [iTerm 2](http://www.iterm2.com/)
# ## Segment drawing
# A few utility functions to make it easy and re-usable to draw segmented prompts
CURRENT_BG=' NONE'
SEGMENT_SEPARATOR=' '
RESET=" %{$reset_color %}"
SOLAR_YELLOW=" $FG [136]"
SOLAR_ORANGE=" $FG [166]"
SOLAR_GREEN=" $FG [064]"
SOLAR_WHITE=" $FG [254]"
ZSH_THEME_NVM_PROMPT_PREFIX=" ⬡ "
ZSH_THEME_NVM_PROMPT_SUFFIX=" "
# Begin a segment
# Takes two arguments, background and foreground. Both can be omitted,
# rendering default background/foreground.
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
}
# End the prompt, closing any open segments
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=' '
}
# ## Prompt components
# Each component will draw itself, and hide itself if no information needs to be shown
# Context: user@hostname (who am I and where am I)
prompt_context () {
local user=` whoami`
if [[ " $user " != " $DEFAULT_USER " || -n " $SSH_CLIENT " ]]; then
prompt_segment black default " %(!.%{%F{yellow}%}.)$SOLAR_ORANGE$user$SOLAR_WHITE @$SOLAR_YELLOW %m"
fi
}
# Git: branch/detached head, dirty status
prompt_git () {
local ref dirty mode repo_path
repo_path=$( git rev-parse --git-dir 2> /dev/null)
if $( git rev-parse --is-inside-work-tree > /dev/null 2>&1 ) ; then
dirty=$( parse_git_dirty)
ref=$( git symbolic-ref HEAD 2> /dev/null) || ref=" ➦ $( git show-ref --head -s --abbrev | head -n1 2> /dev/null) "
if [[ -n $dirty ]]; then
prompt_segment yellow black
else
prompt_segment green black
fi
if [[ -e " ${repo_path} /BISECT_LOG" ]]; then
mode=" <B>"
elif [[ -e " ${repo_path} /MERGE_HEAD" ]]; then
mode=" >M<"
elif [[ -e " ${repo_path} /rebase" || -e " ${repo_path} /rebase-apply" || -e " ${repo_path} /rebase-merge" || -e " ${repo_path} /../.dotest" ]]; then
mode=" >R>"
fi
setopt promptsubst
autoload -Uz vcs_info
zstyle ' :vcs_info:*' enable git
zstyle ' :vcs_info:*' get-revision true
zstyle ' :vcs_info:*' check-for-changes true
zstyle ' :vcs_info:*' stagedstr ' ✚'
zstyle ' :vcs_info:git:*' unstagedstr ' ●'
zstyle ' :vcs_info:*' formats ' %u%c'
zstyle ' :vcs_info:*' actionformats ' %u%c'
vcs_info
echo -n " ${ref/ refs\/ heads\/ / }${vcs_info_msg_0_%% }${mode} "
fi
}
# Dir: current working directory
prompt_dir () {
prompt_segment blue black ' %~'
}
# Virtualenv: current working virtualenv
prompt_virtualenv () {
local virtualenv_path=" $VIRTUAL_ENV "
if [[ -n $virtualenv_path && -n $VIRTUAL_ENV_DISABLE_PROMPT ]]; then
prompt_segment blue black " (` basename $virtualenv_path ` )"
fi
}
# Status:
# - was there an error
# - am I root
# - are there background jobs?
prompt_status () {
local symbols
symbols=()
[[ $RETVAL -ne 0 ]] && symbols+=" %{%F{red}%}✘"
[[ $UID -eq 0 ]] && symbols+=" %{%F{yellow}%}⚡"
[[ $( jobs -l | wc -l) -gt 0 ]] && symbols+=" %{%F{cyan}%}⚙"
[[ -n " $symbols " ]] && prompt_segment black default " $symbols "
}
# # Main prompt
build_prompt () {
RETVAL=$?
prompt_status
prompt_virtualenv
prompt_context
prompt_dir
prompt_git
prompt_end
}
PROMPT=" %{%f%b%k%}$( build_prompt) "
RPROMPT=' $SOLAR_GREEN$(nvm_prompt_info)$RESET'