| 
          # vim:ft=zsh ts=2 sw=2 sts=2 | 
        
        
           | 
          # | 
        
        
           | 
          # agnoster's Theme - https://gist.github.com/3712874 | 
        
        
           | 
          # A Powerline-inspired theme for ZSH | 
        
        
           | 
          # | 
        
        
           | 
          # # README | 
        
        
           | 
          # | 
        
        
           | 
          # In order for this theme to render correctly, you will need a | 
        
        
           | 
          # [Powerline-patched font](https://gist.github.com/1595572). | 
        
        
           | 
          # | 
        
        
           | 
          # In addition, I recommend the | 
        
        
           | 
          # [Solarized theme](https://github.com/altercation/solarized/) and, if you're | 
        
        
           | 
          # using it on Mac OS X, [iTerm 2](http://www.iterm2.com/) over Terminal.app - | 
        
        
           | 
          # it has significantly better color fidelity. | 
        
        
           | 
          # | 
        
        
           | 
          # # Goals | 
        
        
           | 
          # | 
        
        
           | 
          # The aim of this theme is to only show you *relevant* information. Like most | 
        
        
           | 
          # prompts, it will only show git information when in a git working directory. | 
        
        
           | 
          # However, it goes a step further: everything from the current user and | 
        
        
           | 
          # hostname to whether the last call exited with an error to whether background | 
        
        
           | 
          # jobs are running in this shell will all be displayed automatically when | 
        
        
           | 
          # appropriate. | 
        
        
           | 
          
 | 
        
        
           | 
          ### Segment drawing | 
        
        
           | 
          # A few utility functions to make it easy and re-usable to draw segmented prompts | 
        
        
           | 
          
 | 
        
        
           | 
          CURRENT_BG='NONE' | 
        
        
           | 
          PRIMARY_FG=black | 
        
        
           | 
          
 | 
        
        
           | 
          # Characters | 
        
        
           | 
          RIGHT_POINTING_BLOCK_SEGMENT_SEPARATOR="\ue0b0" | 
        
        
           | 
          RIGHT_POINTING_SEGMENT_SEPARATOR="\ue0b1" | 
        
        
           | 
          LEFT_POINTING_BLOCK_SEGMENT_SEPARATOR="\ue0b2" | 
        
        
           | 
          LEFT_POINTING_SEGMENT_SEPARATOR="\ue0b3" | 
        
        
           | 
          PLUSMINUS="\u00b1" | 
        
        
           | 
          BRANCH="\ue0a0" | 
        
        
           | 
          DETACHED="\u27a6" | 
        
        
           | 
          CROSS="\xF0\x9F\x98\xA1 " | 
        
        
           | 
          LIGHTNING="\u26a1" | 
        
        
           | 
          GEAR="\u2699" | 
        
        
           | 
          LINE_NUMBER="\ue0a1" | 
        
        
           | 
          LOCK="\ue0a2" | 
        
        
           | 
          
 | 
        
        
           | 
          # Begin a segment | 
        
        
           | 
          # Takes two arguments, background and foreground. Both can be omitted, | 
        
        
           | 
          # rendering default background/foreground. | 
        
        
           | 
          prompt_segment() { | 
        
        
           | 
            local bg fg | 
        
        
           | 
            [[ -n $1 ]] && bg="%K{$1}" || bg="%k" | 
        
        
           | 
            [[ -n $2 ]] && fg="%F{$2}" || fg="%f" | 
        
        
           | 
            if [[ $CURRENT_BG != 'NONE' && $1 != $CURRENT_BG ]]; then | 
        
        
           | 
              print -n "%{$bg%F{$CURRENT_BG}%}$RIGHT_POINTING_BLOCK_SEGMENT_SEPARATOR%{$fg%}" | 
        
        
           | 
            elif [[ $CURRENT_BG != 'NONE' && $1 == $CURRENT_BG ]]; then | 
        
        
           | 
              print -n "%{$bg%F{$2}%}$RIGHT_POINTING_SEGMENT_SEPARATOR%{$fg%}" | 
        
        
           | 
            else | 
        
        
           | 
              print -n "%{$bg%}%{$fg%}" | 
        
        
           | 
            fi | 
        
        
           | 
            CURRENT_BG=$1 | 
        
        
           | 
            [[ -n $3 ]] && print -n $3 | 
        
        
           | 
          } | 
        
        
           | 
          
 | 
        
        
           | 
          # End the prompt, closing any open segments | 
        
        
           | 
          prompt_end() { | 
        
        
           | 
            if [[ -n $CURRENT_BG ]]; then | 
        
        
           | 
              print -n "%{%k%F{$CURRENT_BG}%}$RIGHT_POINTING_BLOCK_SEGMENT_SEPARATOR" | 
        
        
           | 
            else | 
        
        
           | 
              print -n "%{%k%}" | 
        
        
           | 
            fi | 
        
        
           | 
            print -n "%{%f%}" | 
        
        
           | 
            CURRENT_BG='' | 
        
        
           | 
          } | 
        
        
           | 
          
 | 
        
        
           | 
          right_prompt_start() { | 
        
        
           | 
            local bg fg | 
        
        
           | 
            [[ -n $1 ]] && bg="%K{$1}" || bg="%k" | 
        
        
           | 
            [[ -n $2 ]] && fg="%F{$2}" || fg="%f" | 
        
        
           | 
            if [[ $CURRENT_BG == 'NONE' ]]; then | 
        
        
           | 
              print -n "%{%k%F{$1}%}$LEFT_POINTING_BLOCK_SEGMENT_SEPARATOR%{$bg%}%{$fg%}" | 
        
        
           | 
            elif [[ $1 == $CURRENT_BG ]]; then | 
        
        
           | 
              print -n "%{$fg%}$LEFT_POINTING_SEGMENT_SEPARATOR%{$bg%}%{$fg%}" | 
        
        
           | 
            else | 
        
        
           | 
              print -n "%{%F{$1}%}$LEFT_POINTING_BLOCK_SEGMENT_SEPARATOR%{$bg%}%{$fg%}" | 
        
        
           | 
            fi | 
        
        
           | 
            CURRENT_BG=$1 | 
        
        
           | 
            [[ -n $3 ]] && print -n $3 | 
        
        
           | 
          } | 
        
        
           | 
          
 | 
        
        
           | 
          # End the right prompt, closing any open segments | 
        
        
           | 
          right_prompt_end() { | 
        
        
           | 
            if [[ -n $CURRENT_BG ]]; then | 
        
        
           | 
              print -n "%{%f%k%}" | 
        
        
           | 
            fi | 
        
        
           | 
            CURRENT_BG='' | 
        
        
           | 
          } | 
        
        
           | 
          
 | 
        
        
           | 
          ### Prompt components | 
        
        
           | 
          # Each component will draw itself, and hide itself if no information needs to be shown | 
        
        
           | 
          
 | 
        
        
           | 
          # Context: user@hostname (who am I and where am I) | 
        
        
           | 
          prompt_context() { | 
        
        
           | 
            local user=`whoami` | 
        
        
           | 
          
 | 
        
        
           | 
            if [[ "$user" != "$DEFAULT_USER" || -n "$SSH_CONNECTION" ]]; then | 
        
        
           | 
              prompt_segment $PRIMARY_FG default " %(!.%{%F{yellow}%}.)$user@%m " | 
        
        
           | 
            fi | 
        
        
           | 
          } | 
        
        
           | 
          
 | 
        
        
           | 
          # Git: branch/detached head, dirty status | 
        
        
           | 
          right_prompt_git() { | 
        
        
           | 
            local color ref | 
        
        
           | 
            is_dirty() { | 
        
        
           | 
              test -n "$(git status --porcelain --ignore-submodules)" | 
        
        
           | 
            } | 
        
        
           | 
            ref="$vcs_info_msg_0_" | 
        
        
           | 
            if [[ -n "$ref" ]]; then | 
        
        
           | 
              if is_dirty; then | 
        
        
           | 
                color=yellow | 
        
        
           | 
                ref="${ref} $PLUSMINUS" | 
        
        
           | 
              else | 
        
        
           | 
                color=green | 
        
        
           | 
                ref="${ref} " | 
        
        
           | 
              fi | 
        
        
           | 
              if [[ "${ref/.../}" == "$ref" ]]; then | 
        
        
           | 
                ref="$BRANCH $ref" | 
        
        
           | 
              else | 
        
        
           | 
                ref="$DETACHED ${ref/.../}" | 
        
        
           | 
              fi | 
        
        
           | 
              right_prompt_start $color $PRIMARY_FG | 
        
        
           | 
              print -Pn " $ref" | 
        
        
           | 
            fi | 
        
        
           | 
          } | 
        
        
           | 
          
 | 
        
        
           | 
          # Dir: current working directory | 
        
        
           | 
          prompt_dir() { | 
        
        
           | 
            prompt_segment blue $PRIMARY_FG ' %~ ' | 
        
        
           | 
          } | 
        
        
           | 
          
 | 
        
        
           | 
          # Status: | 
        
        
           | 
          # - was there an error | 
        
        
           | 
          # - am I root | 
        
        
           | 
          # - are there background jobs? | 
        
        
           | 
          prompt_status() { | 
        
        
           | 
            local symbols | 
        
        
           | 
            symbols=() | 
        
        
           | 
            [[ $RETVAL -ne 0 ]] && symbols+="%{%F{red}%}$CROSS" | 
        
        
           | 
            [[ $UID -eq 0 ]] && symbols+="%{%F{yellow}%}$LIGHTNING" | 
        
        
           | 
            [[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{cyan}%}$GEAR" | 
        
        
           | 
          
 | 
        
        
           | 
            [[ -n "$symbols" ]] && prompt_segment $PRIMARY_FG default " $symbols " | 
        
        
           | 
          } | 
        
        
           | 
          
 | 
        
        
           | 
          ## Main prompt | 
        
        
           | 
          prompt_agnoster_main() { | 
        
        
           | 
            RETVAL=$? | 
        
        
           | 
            CURRENT_BG='NONE' | 
        
        
           | 
            prompt_status | 
        
        
           | 
            prompt_context | 
        
        
           | 
            prompt_dir | 
        
        
           | 
            prompt_end | 
        
        
           | 
          } | 
        
        
           | 
          
 | 
        
        
           | 
          prompt_agnoster_right() { | 
        
        
           | 
            CURRENT_BG='NONE' | 
        
        
           | 
            right_prompt_start green $PRIMARY_FG ' %t ' | 
        
        
           | 
            right_prompt_git | 
        
        
           | 
            right_prompt_end | 
        
        
           | 
          } | 
        
        
           | 
          
 | 
        
        
           | 
          prompt_agnoster_precmd() { | 
        
        
           | 
            vcs_info | 
        
        
           | 
            PROMPT=$'%{%f%b%k%}$(prompt_agnoster_main)\n\u21e8  ' | 
        
        
           | 
            RPROMPT=$'%{%f%b%k%}$(prompt_agnoster_right)' | 
        
        
           | 
          } | 
        
        
           | 
          
 | 
        
        
           | 
          prompt_agnoster_setup() { | 
        
        
           | 
            autoload -Uz add-zsh-hook | 
        
        
           | 
            autoload -Uz vcs_info | 
        
        
           | 
          
 | 
        
        
           | 
            prompt_opts=(cr subst percent) | 
        
        
           | 
          
 | 
        
        
           | 
            add-zsh-hook precmd prompt_agnoster_precmd | 
        
        
           | 
          
 | 
        
        
           | 
            zstyle ':vcs_info:*' enable git | 
        
        
           | 
            zstyle ':vcs_info:*' check-for-changes false | 
        
        
           | 
            zstyle ':vcs_info:git*' formats '%b' | 
        
        
           | 
            zstyle ':vcs_info:git*' actionformats '%b (%a)' | 
        
        
           | 
          } | 
        
        
           | 
          
 | 
        
        
           | 
          prompt_agnoster_setup "$@" |