Skip to content

Instantly share code, notes, and snippets.

@surjikal
Forked from agnoster/README.md
Last active October 13, 2015 19:08
Show Gist options
  • Save surjikal/4242748 to your computer and use it in GitHub Desktop.
Save surjikal/4242748 to your computer and use it in GitHub Desktop.
My ZSH Theme

surj.zsh-theme

This is a hack of this awesome theme by agnoster.

The same instructions apply:

  • You'll probably need to install a Powerline-patched font for this theme to render correctly.
  • Optimized for iTerm2, using a modified version of the Solarized Theme (included at the bottom of this gist).
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Ansi 0 Color</key>
<dict>
<key>Blue Component</key>
<real>0.19370138645172119</real>
<key>Green Component</key>
<real>0.15575926005840302</real>
<key>Red Component</key>
<real>0.0</real>
</dict>
<key>Ansi 1 Color</key>
<dict>
<key>Blue Component</key>
<real>0.17366287112236023</real>
<key>Green Component</key>
<real>0.18485371768474579</real>
<key>Red Component</key>
<real>0.51474124193191528</real>
</dict>
<key>Ansi 10 Color</key>
<dict>
<key>Blue Component</key>
<real>0.38298487663269043</real>
<key>Green Component</key>
<real>0.35665956139564514</real>
<key>Red Component</key>
<real>0.27671992778778076</real>
</dict>
<key>Ansi 11 Color</key>
<dict>
<key>Blue Component</key>
<real>0.43850564956665039</real>
<key>Green Component</key>
<real>0.40717673301696777</real>
<key>Red Component</key>
<real>0.32436618208885193</real>
</dict>
<key>Ansi 12 Color</key>
<dict>
<key>Blue Component</key>
<real>0.51685798168182373</real>
<key>Green Component</key>
<real>0.50962930917739868</real>
<key>Red Component</key>
<real>0.44058024883270264</real>
</dict>
<key>Ansi 13 Color</key>
<dict>
<key>Blue Component</key>
<real>0.72908437252044678</real>
<key>Green Component</key>
<real>0.33896297216415405</real>
<key>Red Component</key>
<real>0.34798634052276611</real>
</dict>
<key>Ansi 14 Color</key>
<dict>
<key>Blue Component</key>
<real>0.56363654136657715</real>
<key>Green Component</key>
<real>0.56485837697982788</real>
<key>Red Component</key>
<real>0.50599193572998047</real>
</dict>
<key>Ansi 15 Color</key>
<dict>
<key>Blue Component</key>
<real>0.86405980587005615</real>
<key>Green Component</key>
<real>0.95794391632080078</real>
<key>Red Component</key>
<real>0.98943418264389038</real>
</dict>
<key>Ansi 2 Color</key>
<dict>
<key>Blue Component</key>
<real>0.25098040699958801</real>
<key>Green Component</key>
<real>0.50196081399917603</real>
<key>Red Component</key>
<real>0.0</real>
</dict>
<key>Ansi 3 Color</key>
<dict>
<key>Blue Component</key>
<real>0.023484811186790466</real>
<key>Green Component</key>
<real>0.46751424670219421</real>
<key>Red Component</key>
<real>0.64746475219726562</real>
</dict>
<key>Ansi 4 Color</key>
<dict>
<key>Blue Component</key>
<real>0.78231418132781982</real>
<key>Green Component</key>
<real>0.38804730772972107</real>
<key>Red Component</key>
<real>0.13841994106769562</real>
</dict>
<key>Ansi 5 Color</key>
<dict>
<key>Blue Component</key>
<real>0.27987304329872131</real>
<key>Green Component</key>
<real>0.0</real>
<key>Red Component</key>
<real>0.55965429544448853</real>
</dict>
<key>Ansi 6 Color</key>
<dict>
<key>Blue Component</key>
<real>0.29061792986425339</real>
<key>Green Component</key>
<real>0.25967185699781364</real>
<key>Red Component</key>
<real>0.069388223828563356</real>
</dict>
<key>Ansi 7 Color</key>
<dict>
<key>Blue Component</key>
<real>0.79781103134155273</real>
<key>Green Component</key>
<real>0.89001238346099854</real>
<key>Red Component</key>
<real>0.91611063480377197</real>
</dict>
<key>Ansi 8 Color</key>
<dict>
<key>Blue Component</key>
<real>0.15170273184776306</real>
<key>Green Component</key>
<real>0.11783610284328461</real>
<key>Red Component</key>
<real>0.0</real>
</dict>
<key>Ansi 9 Color</key>
<dict>
<key>Blue Component</key>
<real>0.073530435562133789</real>
<key>Green Component</key>
<real>0.21325300633907318</real>
<key>Red Component</key>
<real>0.74176257848739624</real>
</dict>
<key>Background Color</key>
<dict>
<key>Blue Component</key>
<real>0.15170273184776306</real>
<key>Green Component</key>
<real>0.11783610284328461</real>
<key>Red Component</key>
<real>0.0</real>
</dict>
<key>Bold Color</key>
<dict>
<key>Blue Component</key>
<real>0.56363654136657715</real>
<key>Green Component</key>
<real>0.56485837697982788</real>
<key>Red Component</key>
<real>0.50599193572998047</real>
</dict>
<key>Cursor Color</key>
<dict>
<key>Blue Component</key>
<real>0.51685798168182373</real>
<key>Green Component</key>
<real>0.50962930917739868</real>
<key>Red Component</key>
<real>0.44058024883270264</real>
</dict>
<key>Cursor Text Color</key>
<dict>
<key>Blue Component</key>
<real>0.19370138645172119</real>
<key>Green Component</key>
<real>0.15575926005840302</real>
<key>Red Component</key>
<real>0.0</real>
</dict>
<key>Foreground Color</key>
<dict>
<key>Blue Component</key>
<real>0.51685798168182373</real>
<key>Green Component</key>
<real>0.50962930917739868</real>
<key>Red Component</key>
<real>0.44058024883270264</real>
</dict>
<key>Selected Text Color</key>
<dict>
<key>Blue Component</key>
<real>0.56363654136657715</real>
<key>Green Component</key>
<real>0.56485837697982788</real>
<key>Red Component</key>
<real>0.50599193572998047</real>
</dict>
<key>Selection Color</key>
<dict>
<key>Blue Component</key>
<real>0.19370138645172119</real>
<key>Green Component</key>
<real>0.15575926005840302</real>
<key>Red Component</key>
<real>0.0</real>
</dict>
</dict>
</plist>
### Segment drawing
# A few utility functions to make it easy and re-usable to draw segmented prompts
CURRENT_BG='NONE'
SEGMENT_FORWARD='⮀'
SEGMENT_BACKWARD='⮂'
CARET="❯"
# 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_FORWARD%{$fg%} "
else
echo -n "%{$bg%}%{$fg%} "
fi
CURRENT_BG=$1
[[ -n $3 ]] && echo -n $3
}
segment_separator() {
echo -n " ⮁ "
}
# End the prompt, closing any open segments
prompt_end() {
if [[ -n $CURRENT_BG ]]; then
echo -n " %{%K{black}%F{$CURRENT_BG}%}$SEGMENT_FORWARD"
else
echo -n "%{%k%}"
fi
echo "%{%K{black}%f%}%E%{%f%b%k%}"
echo "%{%k%F{cyan}%}$CARET"
CURRENT_BG=''
}
### Prompt components
# Each component will draw itself, and hide itself if no information needs to be shown
# Context: hostname:user (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}%}.)%m:$user"
fi
}
prompt_git() {
local ref dirty
if $(git rev-parse --is-inside-work-tree >/dev/null 2>&1); then
ZSH_THEME_GIT_PROMPT_DIRTY='\u200B' # zero-width space, this needs a value for some odd reason.
dirty=$(parse_git_dirty)
ref=$(git symbolic-ref HEAD 2> /dev/null) || ref="➦ $(git show-ref --head -s --abbrev |head -n1 2> /dev/null)"
# TODO: Use git plumbing here
gitStatus=($(git status | grep "Your branch is" | sed -E "s/^.*(ahead|behind).*'(.*)' by ([0-9]+).*$/\1 \2 \3/"))
if [[ -n $dirty ]]; then
prompt_segment red black
elif [[ -n $gitStatus ]]; then
prompt_segment yellow black
else
prompt_segment green black
fi
# Show branch name ⭠
echo -n "${ref/refs\/heads\//}$dirty"
# Show branch branch state, i.e. are we rebasing, merging, etc?
gOpStatus=''
gDir=$(git rev-parse --git-dir)
if [[ -d "$gDir/rebase-apply" ]]; then gOpStatus='REBASING'
elif [[ -f "$gDir/MERGE_HEAD" ]]; then gOpStatus='MERGING'
elif [[ -f "$gDir/CHERRY_PICK_HEAD" ]]; then gOpStatus='CHERRY-PICKING'
elif [[ -f "$gDir/BISECT_LOG" ]]; then gOpStatus='BISECTING'
fi
if [[ -n $gOpStatus ]]; then
segment_separator
echo -n $gOpStatus
fi
# If we're tracking a remote branch, show the commit differences.
if [[ -n $gitStatus ]]; then
segment_separator
[[ -n $gitStatus[1] ]] && direction=$gitStatus[1]
[[ -n $gitStatus[3] ]] && commitCount=$gitStatus[3]
echo -n "$commitCount $direction"
fi
# Show the number of lines removed or added, if any
if [[ -n $dirty ]]; then
diffstat=($(git diff --shortstat | tr -d \[a-z\(\)\ ] | sed 's/[+|-]//g' | sed 's/[,]/ /g'))
if [[ -n $diffstat ]]; then
segment_separator
[[ -n $diffstat[2] ]] && added=$diffstat[2] || added="0"
[[ -n $diffstat[3] ]] && removed=$diffstat[3] || removed="0"
echo -n "$added ± $removed"
# [[ -n $diffstat[1] ]] && echo -n " ($diffstat[1] files modified)"
fi
fi
fi
}
prompt_dir() {
echo -n "%{%B%}"
prompt_segment cyan black '%~'
echo -n "%{%b%K{cyan}%}"
}
# Status:
# - was there an error
# - am I root
# - are there background jobs?
prompt_status() {
local symbols
symbols=()
[[ $RETVAL -ne 0 ]] && symbols+="%{%F{red}%}✘" || symbols+=' '
[[ $UID -eq 0 ]] && symbols+="%{%F{yellow}%}⚡" || symbols+=' '
[[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{cyan}%}⚙"
[[ -n "$symbols" ]] && prompt_segment cyan default "$symbols"
}
## Main prompt
build_prompt() {
RETVAL=$?
printf "\n"
# prompt_status
# prompt_context
prompt_dir
prompt_git
prompt_end
}
PROMPT='%{%f%b%k%}$(build_prompt)%{%f%b%k%} '
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment