-autoload -Uz up-line-or-beginning-search down-line-or-beginning-search
-zle -N up-line-or-beginning-search
-zle -N down-line-or-beginning-search
-[[ -n "$key[Up]" ]] && bindkey -- "$key[Up]" up-line-or-beginning-search
-[[ -n "$key[Down]" ]] && bindkey -- "$key[Down]" down-line-or-beginning-search
+function zle-line-init zle-keymap-select {
+ VICOL="${${KEYMAP:/vicmd/red}:/(main|viins)/green}"
+ zle reset-prompt
+}
+zle -N zle-line-init
+zle -N zle-keymap-select
+
+autoload -Uz vcs_info
+zstyle ':vcs_info:*' enable git
+zstyle ':vcs_info:git*' formats "%c%u%%F{green}%r/%b%%f/%%F{yellow}%S%%f"
+zstyle ':vcs_info:git*' actionformats "%%F{red}(%a)%%f %c%u%%F{green}%r/%b%%f/\
+%%F{yellow}%S%%f"
+#zstyle ':vcs_info:git*' check-for-changes true #too slow
+zstyle ':vcs_info:git*:.dotfiles' check-for-changes true
+zstyle ':vcs_info:git*' check-for-staged-changes true
+zstyle ':vcs_info:git*' stagedstr "%F{blue}+"
+zstyle ':vcs_info:git*' unstagedstr "%F{red}*"
+
+# hooks
+function precmd {
+ # change terminal title
+ print -Pn "\e]0;%(1j,%j,)%#${SSH_CLIENT+$USER@$HOST:}%~\a"
+ # update vcs
+ vcs_info
+ # bell if exec takes 5s
+ if ((SECONDS - _exectime >= 5)) print "\a"
+}
+function preexec {
+ # change terminal title to show command
+ print -Pnf "\e]0;%s\a" "%#${SSH_CLIENT+$USER@$HOST:}$1"
+ # save last exec time for bell
+ _exectime=$SECONDS
+}
+function chpwd {
+ l
+}