| 1 | 1 | new file mode 100644 | 
| ... | ... | @@ -0,0 +1,91 @@ | 
| 0 | +# ----------------------------------------------------------------------------- | |
| 1 | +# FILE: smt.zsh-theme | |
| 2 | +# DESCRIPTION: oh-my-zsh theme file, based on dogenpunk by Matthew Nelson. | |
| 3 | +# AUTHOR: Stephen Tudor (stephen@tudorstudio.com | |
| 4 | +# VERSION: 0.1 | |
| 5 | +# SCREENSHOT: coming soon | |
| 6 | +# ----------------------------------------------------------------------------- | |
| 7 | + | |
| 8 | +MODE_INDICATOR="%{$fg_bold[red]%}❮%{$reset_color%}%{$fg[red]%}❮❮%{$reset_color%}" | |
| 9 | +local return_status="%{$fg[red]%}%(?..⏎)%{$reset_color%} " | |
| 10 | + | |
| 11 | +ZSH_THEME_GIT_PROMPT_PREFIX="|" | |
| 12 | +ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}" | |
| 13 | +ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg_bold[red]%}⚡%{$reset_color%}" | |
| 14 | +ZSH_THEME_GIT_PROMPT_AHEAD="%{$fg_bold[red]%}!%{$reset_color%}" | |
| 15 | +ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg_bold[green]%}✓%{$reset_color%}" | |
| 16 | + | |
| 17 | +ZSH_THEME_GIT_PROMPT_ADDED="%{$fg[green]%} ✚" | |
| 18 | +ZSH_THEME_GIT_PROMPT_MODIFIED="%{$fg[blue]%} ✹" | |
| 19 | +ZSH_THEME_GIT_PROMPT_DELETED="%{$fg[red]%} ✖" | |
| 20 | +ZSH_THEME_GIT_PROMPT_RENAMED="%{$fg[magenta]%} ➜" | |
| 21 | +ZSH_THEME_GIT_PROMPT_UNMERGED="%{$fg[yellow]%} ═" | |
| 22 | +ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[cyan]%} ✭" | |
| 23 | + | |
| 24 | +# Format for git_prompt_long_sha() and git_prompt_short_sha() | |
| 25 | +ZSH_THEME_GIT_PROMPT_SHA_BEFORE="➤ %{$fg_bold[yellow]%}" | |
| 26 | +ZSH_THEME_GIT_PROMPT_SHA_AFTER="%{$reset_color%}" | |
| 27 | + | |
| 28 | +function prompt_char() { | |
| 29 | +  git branch >/dev/null 2>/dev/null && echo "%{$fg[green]%}±%{$reset_color%}" && return | |
| 30 | +  hg root >/dev/null 2>/dev/null && echo "%{$fg_bold[red]%}☿%{$reset_color%}" && return | |
| 31 | +  echo "%{$fg[cyan]%}◯%{$reset_color%}" | |
| 32 | +} | |
| 33 | + | |
| 34 | +# Colors vary depending on time lapsed. | |
| 35 | +ZSH_THEME_GIT_TIME_SINCE_COMMIT_SHORT="%{$fg[green]%}" | |
| 36 | +ZSH_THEME_GIT_TIME_SHORT_COMMIT_MEDIUM="%{$fg[yellow]%}" | |
| 37 | +ZSH_THEME_GIT_TIME_SINCE_COMMIT_LONG="%{$fg[red]%}" | |
| 38 | +ZSH_THEME_GIT_TIME_SINCE_COMMIT_NEUTRAL="%{$fg[cyan]%}" | |
| 39 | + | |
| 40 | +# Determine the time since last commit. If branch is clean, | |
| 41 | +# use a neutral color, otherwise colors will vary according to time. | |
| 42 | +function git_time_since_commit() { | |
| 43 | + if git rev-parse --git-dir > /dev/null 2>&1; then | |
| 44 | + # Only proceed if there is actually a commit. | |
| 45 | + if [[ $(git log 2>&1 > /dev/null | grep -c "^fatal: bad default revision") == 0 ]]; then | |
| 46 | + # Get the last commit. | |
| 47 | + last_commit=`git log --pretty=format:'%at' -1 2> /dev/null` | |
| 48 | + now=`date +%s` | |
| 49 | + seconds_since_last_commit=$((now-last_commit)) | |
| 50 | + | |
| 51 | + # Totals | |
| 52 | + MINUTES=$((seconds_since_last_commit / 60)) | |
| 53 | + HOURS=$((seconds_since_last_commit/3600)) | |
| 54 | + | |
| 55 | + # Sub-hours and sub-minutes | |
| 56 | + DAYS=$((seconds_since_last_commit / 86400)) | |
| 57 | + SUB_HOURS=$((HOURS % 24)) | |
| 58 | + SUB_MINUTES=$((MINUTES % 60)) | |
| 59 | + | |
| 60 | + if [[ -n $(git status -s 2> /dev/null) ]]; then | |
| 61 | + if [ "$MINUTES" -gt 30 ]; then | |
| 62 | + COLOR="$ZSH_THEME_GIT_TIME_SINCE_COMMIT_LONG" | |
| 63 | + elif [ "$MINUTES" -gt 10 ]; then | |
| 64 | + COLOR="$ZSH_THEME_GIT_TIME_SHORT_COMMIT_MEDIUM" | |
| 65 | + else | |
| 66 | + COLOR="$ZSH_THEME_GIT_TIME_SINCE_COMMIT_SHORT" | |
| 67 | + fi | |
| 68 | + else | |
| 69 | + COLOR="$ZSH_THEME_GIT_TIME_SINCE_COMMIT_NEUTRAL" | |
| 70 | + fi | |
| 71 | + | |
| 72 | + if [ "$HOURS" -gt 24 ]; then | |
| 73 | +                echo "[$COLOR${DAYS}d${SUB_HOURS}h${SUB_MINUTES}m%{$reset_color%}]" | |
| 74 | + elif [ "$MINUTES" -gt 60 ]; then | |
| 75 | +                echo "[$COLOR${HOURS}h${SUB_MINUTES}m%{$reset_color%}]" | |
| 76 | + else | |
| 77 | +                echo "[$COLOR${MINUTES}m%{$reset_color%}]" | |
| 78 | + fi | |
| 79 | + else | |
| 80 | + COLOR="$ZSH_THEME_GIT_TIME_SINCE_COMMIT_NEUTRAL" | |
| 81 | + echo "[$COLOR~]" | |
| 82 | + fi | |
| 83 | + fi | |
| 84 | +} | |
| 85 | + | |
| 86 | +PROMPT=' | |
| 87 | +%{$fg[blue]%}%m%{$reset_color%} 寿帝文 %{$fg[cyan]%}%~ %{$reset_color%}$(git_prompt_short_sha)$(git_prompt_info) | |
| 88 | +%{$fg[red]%}%!%{$reset_color%} $(prompt_char) : ' | |
| 89 | + | |
| 90 | +RPROMPT='${return_status}$(git_time_since_commit)$(git_prompt_status)%{$reset_color%}' |