Files
dotfiles/zsh/prompt.zsh

70 lines
1.9 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# heavily inspired by the wonderful pure theme
# https://github.com/sindresorhus/pure
# needed to get things like current git branch
autoload -Uz vcs_info
zstyle ':vcs_info:*' enable git # You can add hg too if needed: `git hg`
zstyle ':vcs_info:git*' use-simple true
zstyle ':vcs_info:git*' max-exports 2
zstyle ':vcs_info:git*' formats ' %b' 'x%R'
zstyle ':vcs_info:git*' actionformats ' %b|%a' 'x%R'
autoload colors && colors
git_dirty() {
# check if we're in a git repo
command git rev-parse --is-inside-work-tree &>/dev/null || return
# check if it's dirty
command git diff --quiet --ignore-submodules HEAD &>/dev/null;
if [[ $? -eq 1 ]]; then
echo "%F{red}✗%f"
else
echo "%F{green}✔%f"
fi
}
# get the status of the current branch and it's remote
# If there are changes upstream, display a ⇣
# If there are changes that have been committed but not yet pushed, display a ⇡
git_arrows() {
# do nothing if there is no upstream configured
command git rev-parse --abbrev-ref @'{u}' &>/dev/null || return
local arrows=""
local status
arrow_status="$(command git rev-list --left-right --count HEAD...@'{u}' 2>/dev/null)"
# do nothing if the command failed
(( !$? )) || return
# split on tabs
arrow_status=(${(ps:\t:)arrow_status})
local left=${arrow_status[1]} right=${arrow_status[2]}
(( ${right:-0} > 0 )) && arrows+="%F{011}⇣%f"
(( ${left:-0} > 0 )) && arrows+="%F{012}⇡%f"
echo $arrows
}
# indicate a job (for example, vim) has been backgrounded
# If there is a job in the background, display a ✱
suspended_jobs() {
local sj
sj=$(jobs 2>/dev/null | tail -n 1)
if [[ $sj == "" ]]; then
echo ""
else
echo "%{$FG[208]%}✱%f"
fi
}
precmd() {
vcs_info
print -P '\n%F{145}%~'
}
export PROMPT='%(?.%F{145}.%F{red})%f '
export RPROMPT='`git_dirty`%F{241}$vcs_info_msg_0_%f `git_arrows``suspended_jobs`'