Для отображения в строке приглашения zsh информации о типе VCS, текущей ветке и состоянии репозитария (есть ли не закомиченные файлы) можно воспользоваться встроенным модулем vcs_info либо выдумывать что-то свое.
У vcs_info заявлена поддержка большого числа систем контроля версий (Bazaar, Codeville, CVS, darcs, git, Mercurial, Perforce, Subversion, etc.), но по возможностям сбора информации о текущем состоянии репозитария - лидирует git. Файл отвечающий за функционал с этим VCS самый массивный, а для hg насчитывает пару строк, не считая комментарии :), поэтому отображаемая информация о hg весьма скудна (может есть расширенная версия для hg ?).
Ниже приведены настройки для отображения состояния репозитариев для git и svn, версия для mercurial была позаимствована отсюдова и немного подправлена под себя. Вносить в ~/.zshrc.
hg_branch() {
hg branch 2> /dev/null | awk '{ print "[hg:" $1 }'
}
hg_dirty() {
[ $(hg status 2> /dev/null | wc -l) != 0 ] && echo -e "%F{red}*%F{green}]"
[ $(hg status 2>&1 | wc -l) = 0 ] && echo -e "]"
}
autoload -Uz vcs_info
zstyle ':vcs_info:*' enable svn git
zstyle ':vcs_info:*' check-for-changes true
# zstyle ':vcs_info:*' get-revision true
zstyle ':vcs_info:*' stagedstr "+"
zstyle ':vcs_info:*' unstagedstr "!"
zstyle ':vcs_info:*' formats '[%s:%b%F{red}%c%u%F{green}]'
setopt PROMPT_SUBST
precmd () {
vcs_info
HG="$(hg_branch)$(hg_dirty)"
}
Теперь добавим сформированную переменную HG и vcs_info_msg_0_ (формирует vcs_info) в zsh prompt, например так
PROMPT='%B%F{yellow}%n%F{green}${HG}${vcs_info_msg_0_}%F{blue}%(!.#.$)%f '
Так выглядит prompt в репозитарии с mercurial, у которого есть незакомиченные файлы

Так выглядит prompt в репозитарии с git, у которого есть unstaged файлы

Так выглядит prompt в репозитарии с svn

Бонус
timed небольшая приблуда для слежения из консоли за временем потраченным на проект, при желании можно прикрутить к строке приглашения и трекать время потраченное на проект.
Дополнительное чтиво