mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2025-12-26 02:12:33 +01:00
87 lines
3.4 KiB
Bash
87 lines
3.4 KiB
Bash
PROMPT='$(haskell_version)$(python_version)$(rvm_ruby) %{$fg_bold[green]%}$(current_dir) %{$fg_bold[cyan]%}$(git_time_since_commit)$(git_prompt_info)%{$fg_bold[blue]%}%{$reset_color%}'
|
||
|
||
ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg_bold[green]%}"
|
||
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
|
||
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg_bold[cyan]%})%{$reset_color%} %{$fg_bold[yellow]%}⚡%{$reset_color%} "
|
||
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg_bold[cyan]%})%{$reset_color%} "
|
||
|
||
# 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]%}"
|
||
|
||
function current_dir() {
|
||
echo "%~"
|
||
}
|
||
|
||
function haskell_version() {
|
||
if [[ -x "`which ghci`" && ( "`ls`" == *.hs* || "`ls`" == *.cabal* ) ]]; then
|
||
out="`python -c "import sys; print sys.argv[-1]" \`ghci --version\``"
|
||
echo "%{$fg[red]%}‹ghci-$out›%{$reset_color%}"
|
||
fi
|
||
}
|
||
|
||
function python_version() {
|
||
# FIXME python --version # doesn't work since x=`python --version` is not
|
||
# capturing the thing
|
||
if [[ -x "`which python`" && "`ls`" == *.py* ]]; then
|
||
out=`python -c "import sys, itertools; print ''.join([item for item in itertools.takewhile(lambda char: char != ' ', sys.version)])"`
|
||
echo "%{$fg[red]%}‹python-$out›%{$reset_color%}"
|
||
fi
|
||
}
|
||
|
||
function rvm_ruby() {
|
||
cur_dir_files=`ls`
|
||
if [[ -x "`which rvm-prompt`" && ( "$cur_dir_files" == *Capfile* || "$cur_dir_files" == *Gemfile* || "$cur_dir_files" == *Rakefile* || "$cur_dir_files" == *.rb* ) ]]; then
|
||
if [ "$(rvm-prompt i v g)" != "" ]; then
|
||
echo "%{$fg[red]%}‹$(rvm-prompt i v g)›%{$reset_color%}"
|
||
else
|
||
echo ""
|
||
fi
|
||
fi
|
||
}
|
||
|
||
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
|
||
else
|
||
COLOR="$ZSH_THEME_GIT_TIME_SINCE_COMMIT_NEUTRAL"
|
||
echo "($COLOR~|"
|
||
fi
|
||
fi
|
||
}
|