Last active
December 25, 2015 11:08
-
-
Save danemacaulay/6966279 to your computer and use it in GitHub Desktop.
my custom zsh cobbled together from alanpeabody
This file contains 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
ZSH_THEME_GIT_PROMPT_PREFIX="" | |
ZSH_THEME_GIT_PROMPT_SUFFIX="" | |
ZSH_THEME_GIT_PROMPT_CLEAN="" | |
ZSH_THEME_GIT_PROMPT_ADDED="%{$fg[green]%} ✚" | |
ZSH_THEME_GIT_PROMPT_MODIFIED="%{$fg[blue]%} ✹" | |
ZSH_THEME_GIT_PROMPT_DELETED="%{$fg[red]%} ✖" | |
ZSH_THEME_GIT_PROMPT_RENAMED="%{$fg[magenta]%} ➜" | |
ZSH_THEME_GIT_PROMPT_UNMERGED="%{$fg[yellow]%} ═" | |
ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[cyan]%} ✭" | |
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[yellow]%} !" | |
ZSH_THEME_SVN_PROMPT_REPLACEMENT="%{$fg[yellow]%} ∿" | |
# Colors vary depending on time lapsed. | |
ZSH_THEME_GIT_TIME_SINCE_COMMIT_SHORT="%{$fg[green]%}" | |
ZSH_THEME_GIT_TIME_SHORT_COMMIT_MEDIUM="%{$fg[yellow]%}" | |
ZSH_THEME_GIT_TIME_SINCE_COMMIT_LONG="%{$fg[red]%}" | |
ZSH_THEME_GIT_TIME_SINCE_COMMIT_NEUTRAL="%{$fg[cyan]%}" | |
# Use batcharge.py to output power level | |
function battery_charge() { | |
if [ -e ~/bin/batcharge.py ] | |
then | |
echo `python ~/bin/batcharge.py` | |
else | |
echo '' | |
fi | |
} | |
# Output a color for the git branch | |
function git_branch_color() { | |
if [[ "$(current_branch)" == *master* ]] | |
then | |
echo $fg[red]% | |
elif [[ "$(current_branch)" == *dev* ]] | |
then | |
echo $fg[green]% | |
else | |
echo $fg[yellow]% | |
fi | |
} | |
# Output a color for the svn branch | |
function svn_branch_color() { | |
if [[ "$(svn_current_branch_name)" == *trunk* ]] | |
then | |
echo $fg[red]% | |
else | |
echo $fg[yellow]% | |
fi | |
} | |
# Determine the time since last commit. If branch is clean, | |
# use a neutral color, otherwise colors will vary according to time. | |
function git_time_since_commit() { | |
if git rev-parse --git-dir > /dev/null 2>&1; then | |
# Only proceed if there is actually a commit. | |
if [[ $(git log 2>&1 > /dev/null | grep -c "^fatal: bad default revision") == 0 ]]; then | |
# Get the last commit. | |
last_commit=`git log --pretty=format:'%at' -1 2> /dev/null` | |
now=`date +%s` | |
seconds_since_last_commit=$((now-last_commit)) | |
# Totals | |
MINUTES=$((seconds_since_last_commit / 60)) | |
HOURS=$((seconds_since_last_commit/3600)) | |
# Sub-hours and sub-minutes | |
DAYS=$((seconds_since_last_commit / 86400)) | |
SUB_HOURS=$((HOURS % 24)) | |
SUB_MINUTES=$((MINUTES % 60)) | |
if [[ -n $(git status -s 2> /dev/null) ]]; then | |
if [ "$DAYS" -gt 7 ]; then | |
COLOR="$ZSH_THEME_GIT_TIME_SINCE_COMMIT_LONG" | |
elif [ "$DAYS" -gt 3 ]; then | |
COLOR="$ZSH_THEME_GIT_TIME_SHORT_COMMIT_MEDIUM" | |
else | |
COLOR="$ZSH_THEME_GIT_TIME_SINCE_COMMIT_SHORT" | |
fi | |
else | |
COLOR="$ZSH_THEME_GIT_TIME_SINCE_COMMIT_NEUTRAL" | |
fi | |
if [ "$HOURS" -gt 24 ]; then | |
echo "${COLOR}${DAYS}d" | |
elif [ "$MINUTES" -gt 60 ]; then | |
echo "${COLOR}${HOURS}h" | |
else | |
echo "${COLOR}${MINUTES}m" | |
fi | |
else | |
COLOR="$ZSH_THEME_GIT_TIME_SINCE_COMMIT_NEUTRAL" | |
echo "${COLOR}" | |
fi | |
fi | |
} | |
# Output an colorized icons representing svn status | |
function svn_status_info() { | |
local svn_status_string="" | |
local svn_status="$(svn status 2> /dev/null)"; | |
if grep -E '^\s*A' &> /dev/null <<< $svn_status; | |
then svn_status_string="${ZSH_THEME_GIT_PROMPT_ADDED}"; fi | |
if grep -E '^\s*D' &> /dev/null <<< $svn_status; | |
then svn_status_string="$svn_status_string${ZSH_THEME_GIT_PROMPT_DELETED}"; fi | |
if grep -E '^\s*M' &> /dev/null <<< $svn_status; | |
then svn_status_string="$svn_status_string${ZSH_THEME_GIT_PROMPT_MODIFIED}"; fi | |
if grep -E '^\s*[R~]' &> /dev/null <<< $svn_status; | |
then svn_status_string="$svn_status_string${ZSH_THEME_SVN_PROMPT_REPLACEMENT}"; fi | |
if grep -E '^\s*\?' &> /dev/null <<< $svn_status; | |
then svn_status_string="$svn_status_string${ZSH_THEME_GIT_PROMPT_UNTRACKED}"; fi | |
if grep -E '^\s*[CI!L]' &> /dev/null <<< $svn_status; | |
then svn_status_string="$svn_status_string${ZSH_THEME_GIT_PROMPT_DIRTY}"; fi | |
echo $svn_status_string | |
} | |
local user='%{$fg[green]%}%n@%{$fg[green]%}%m%{$reset_color%}' | |
local pwd='%{$fg[blue]%}%~%{$reset_color%}' | |
local return_code='%(?..%{$fg[red]%}%? ↵%{$reset_color%})' | |
local git_branch='$(git_time_since_commit) $(git_prompt_status)%{$reset_color%}%{$(git_branch_color)} $(current_branch)%{$reset_color%}' | |
local svn_branch='$(svn_status_info)%{$reset_color%}%{$(svn_branch_color)} $(svn_current_branch_name)%{$reset_color%}' | |
PROMPT="${user} ${pwd} > " | |
RPROMPT="${return_code} ${git_branch}${svn_branch}" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment