ZSH Snippets to add time since last commit, got this somewhere... forgot where :)
# Add this to your .oh-my-zsh theme if you're using those, or directly to your zsh theme :) | |
# 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]%}" | |
#Customized git status, oh-my-zsh currently does not allow render dirty status before branch | |
git_custom_status() { | |
local cb=$(current_branch) | |
if [ -n "$cb" ]; then | |
echo "$(parse_git_dirty)$ZSH_THEME_GIT_PROMPT_PREFIX$(current_branch)$ZSH_THEME_GIT_PROMPT_SUFFIX" | |
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 [ "$MINUTES" -gt 30 ]; then | |
COLOR="$ZSH_THEME_GIT_TIME_SINCE_COMMIT_LONG" | |
elif [ "$MINUTES" -gt 10 ]; 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${SUB_HOURS}h${SUB_MINUTES}m%{$reset_color%})" | |
elif [ "$MINUTES" -gt 60 ]; then | |
echo "($COLOR${HOURS}h${SUB_MINUTES}m%{$reset_color%})" | |
else | |
echo "($COLOR${MINUTES}m%{$reset_color%})" | |
fi | |
fi | |
fi | |
} | |
# Just add $(git_time_since_commit) to your ZSH PROMPT and you're set |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment