#!/usr/bin/env zsh # Load dependencies. pmodload 'helper' # Memo-ized var SEPARATOR="" # Begin a segment # Takes two arguments, foreground and message. Foreground can be omitted, # rendering default foreground. prompt_segment() { local fg local message # If 2 params, 1st one is foreground if [[ -n $2 ]]; then # set fg to color passed in fg="%F{$1}" message="$2" else # otherwise set the fg color to reset value fg="%f" message="$1" fi # color the prompt, spit out the message and reset the colors print -Pn "$SEPARATOR%{$fg%}$message%{%f%}" # Let this run after the first run SEPARATOR=" " } function build_prompt { # If exit status is non-zero if [ $? -ne 0 ]; then prompt_segment red '\u2718' fi if [[ -n "$SSH_CONNECTION" ]]; then # username prompt_segment blue '%n' prompt_segment 'at' # hostname prompt_segment magenta '%m' prompt_segment 'in' fi # Working directory prompt_segment cyan '%~' # If git is installed and $git_status is defined if hash git 2>/dev/null && $git_status; then # if $git_status; then prompt_segment '${(e)git_info[prompt]}' if [[ -n "${git_info[status]}" ]]; then prompt_segment red '${git_info[status]}' fi fi } start_time=$SECONDS function prompt_craveytrain_preexec { start_time=$SECONDS } function calc_elapsed_time { if [[ $timer_result -ge 3600 ]]; then let "timer_hours = $timer_result / 3600" let "remainder = $timer_result % 3600" let "timer_minutes = $remainder / 60" let "timer_seconds = $remainder % 60" print -P "%B%F{red}>>> elapsed time ${timer_hours}h ${timer_minutes}m ${timer_seconds}s%b" elif [[ $timer_result -ge 60 ]]; then let "timer_minutes = $timer_result / 60" let "timer_seconds = $timer_result % 60" print -P "%B%F{yellow}>>> elapsed time ${timer_minutes}m ${timer_seconds}s%b" elif [[ $timer_result -gt 10 ]]; then print -P "%B%F{green}>>> elapsed time ${timer_result}s%b" fi } function prompt_craveytrain_precmd { setopt LOCAL_OPTIONS unsetopt XTRACE KSH_ARRAYS RPROMPT='' # Get Git repository information. if (( $+functions[git-info] )); then git_status=git-info fi # Get Ruby information if (( $+functions[ruby-info] )); then ruby-info if [[ "$ruby_info[version]" != *system* ]]; then RPROMPT='$ruby_info[version]' fi fi # Get Python information if (( $+functions[python-info] )); then python-info if [ -n "$python_info[virtualenv]" ]; then RPROMPT="$RPROMPT $python_info[virtualenv]" fi fi # Get Node information if (( $+functions[node-info] )); then node-info if [[ "$node_info[version]" != *system* ]]; then RPROMPT="$RPROMPT $node_info[version]" fi fi timer_result=$(($SECONDS-$start_time)) if [[ $timer_result -gt 10 ]]; then calc_elapsed_time fi start_time=$SECONDS } function prompt_craveytrain_setup { setopt LOCAL_OPTIONS unsetopt XTRACE KSH_ARRAYS prompt_opts=(cr percent subst) # Load required functions. autoload -Uz add-zsh-hook # Add hook for calling git-info before each command. add-zsh-hook preexec prompt_craveytrain_preexec add-zsh-hook precmd prompt_craveytrain_precmd # Set ruby-info parameters. # %v - ruby version. zstyle ':prezto:module:ruby:info:version' format '%v' # Set python-info parameters. # %v - virtualenv name. zstyle ':prezto:module:python:info:virtualenv' format 'venv:%v' # Set node-info parameters. # %v - Node.js version. zstyle ':prezto:module:node:info:version' format 'nvm:%v' zstyle ':prezto:module:git:info' verbose 'yes' zstyle ':prezto:module:editor:info:completing' format '%B%F{red}...%f%b' zstyle ':prezto:module:editor:info:keymap:primary' format '%B%F{blue}❯%f%b' zstyle ':prezto:module:editor:info:keymap:primary:overwrite' format '%F{red}♺%f' zstyle ':prezto:module:editor:info:keymap:alternate' format '%B%F{red}❮%f%b' zstyle ':prezto:module:git:info:action' format '! %s' zstyle ':prezto:module:git:info:added' format '✚' zstyle ':prezto:module:git:info:ahead' format '⬆' zstyle ':prezto:module:git:info:behind' format '⬇' zstyle ':prezto:module:git:info:branch' format '\ue0a0 %b' zstyle ':prezto:module:git:info:commit' format '%.7c' zstyle ':prezto:module:git:info:deleted' format '✖' zstyle ':prezto:module:git:info:modified' format '✱' zstyle ':prezto:module:git:info:position' format '%p' zstyle ':prezto:module:git:info:renamed' format '➙' zstyle ':prezto:module:git:info:stashed' format 's' zstyle ':prezto:module:git:info:unmerged' format '═' zstyle ':prezto:module:git:info:untracked' format '?' zstyle ':prezto:module:git:info:keys' format \ 'prompt' '%F{yellow}$(coalesce "%b" "%p") [%F{226}%c%F{yellow}]%s' \ 'status' '%A%B%S%a%d%m%r%U%u' # Define prompts. PROMPT='%{%f%b%k%}$(build_prompt) ${editor_info[keymap]} ' SPROMPT='zsh: correct %F{red}%R%f to %F{green}%r%f [nyae]? ' } prompt_craveytrain_setup "$@"