typeset -aHg YS_PROMPT_SEGMENTS=(
  prompt_start
  prompt_context
  prompt_dir
  prompt_git
  prompt_end
)

prompt_start() {
  print -n "%B%F{blue}%#%b%f "
}

prompt_context() {
  print -n "%(#,%K{yellow}%F{black}%n%k%f,%F{cyan}%n%f) @ %F{green}%m%f "
}

prompt_dir() {
  print -n "in %B%F{yellow}%~%b%f "
}

prompt_git() {
  print -n "$vcs_info_msg_0_"
}

prompt_end() {
  print -n "[%*] %(?,,C:%F{red}%?%f)\n%F{red}$%f "
}

prompt_ys_main() {
  for prompt_segment in "${YS_PROMPT_SEGMENTS[@]}"; do
    [[ -n $prompt_segment ]] && $prompt_segment
  done
}

prompt_ys_precmd() {
  vcs_info
  PROMPT='$(prompt_ys_main)'
}

prompt_ys_setup() {
  autoload -Uz add-zsh-hook
  autoload -Uz vcs_info

  prompt_opts=(cr subst percent)

  add-zsh-hook precmd prompt_ys_precmd

  zstyle ':vcs_info:*' enable git
  zstyle ':vcs_info:*' check-for-changes false

  zstyle ':vcs_info:git:*' formats 'on %s:%F{cyan}%b%f %m '
  zstyle ':vcs_info:git*+set-message:*' hooks git-branch-status
}

+vi-git-branch-status() {
  if [[ -n $(git status --porcelain --ignore-submodules=dirty | head -n1) ]] ; then
    hook_com[misc]='%F{red}x%f'
  else
    hook_com[misc]='%F{green}o%f'
  fi
}

prompt_ys_setup "$@"

# vim: ft=zsh expandtab tabstop=2 shiftwidth=2