Created
November 2, 2020 22:44
-
-
Save dmd/654b002eba137aba786fa5c3f793dc98 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# *** PROMPT FORMATTING *** | |
# Echoes a username/host string when connected over SSH (empty otherwise) | |
ssh_info() { | |
[[ "$SSH_CONNECTION" != '' ]] && echo "%(!.%{$fg[red]%}.%{$fg[yellow]%})%n%{$reset_color%}@%{$fg[green]%}%m%{$reset_color%}:" || echo "" | |
} | |
# Echoes information about Git repository status when inside a Git repository | |
git_info() { | |
# Exit if not inside a Git repository | |
! git rev-parse --is-inside-work-tree > /dev/null 2>&1 && return | |
# Git branch/tag, or name-rev if on detached head | |
local GIT_LOCATION=${$(git symbolic-ref -q HEAD || git name-rev --name-only --no-undefined --always HEAD)#(refs/heads/|tags/)} | |
local AHEAD="%{$fg[red]%}⇡NUM%{$reset_color%}" | |
local BEHIND="%{$fg[cyan]%}⇣NUM%{$reset_color%}" | |
local MERGING="%{$fg[magenta]%}⚡︎%{$reset_color%}" | |
local UNTRACKED="%{$fg[red]%}●%{$reset_color%}" | |
local MODIFIED="%{$fg[yellow]%}●%{$reset_color%}" | |
local STAGED="%{$fg[green]%}●%{$reset_color%}" | |
local -a DIVERGENCES | |
local -a FLAGS | |
local NUM_AHEAD="$(git log --oneline @{u}.. 2> /dev/null | wc -l | tr -d ' ')" | |
if [ "$NUM_AHEAD" -gt 0 ]; then | |
DIVERGENCES+=( "${AHEAD//NUM/$NUM_AHEAD}" ) | |
fi | |
local NUM_BEHIND="$(git log --oneline ..@{u} 2> /dev/null | wc -l | tr -d ' ')" | |
if [ "$NUM_BEHIND" -gt 0 ]; then | |
DIVERGENCES+=( "${BEHIND//NUM/$NUM_BEHIND}" ) | |
fi | |
local GIT_DIR="$(git rev-parse --git-dir 2> /dev/null)" | |
if [ -n $GIT_DIR ] && test -r $GIT_DIR/MERGE_HEAD; then | |
FLAGS+=( "$MERGING" ) | |
fi | |
if [[ -n $(git ls-files --other --exclude-standard 2> /dev/null) ]]; then | |
FLAGS+=( "$UNTRACKED" ) | |
fi | |
if ! git diff --quiet 2> /dev/null; then | |
FLAGS+=( "$MODIFIED" ) | |
fi | |
if ! git diff --cached --quiet 2> /dev/null; then | |
FLAGS+=( "$STAGED" ) | |
fi | |
local -a GIT_INFO | |
GIT_INFO+=( "%{$fg[cyan]%}±" ) | |
[[ ${#DIVERGENCES[@]} -ne 0 ]] && GIT_INFO+=( "${(j::)DIVERGENCES}" ) | |
[[ ${#FLAGS[@]} -ne 0 ]] && GIT_INFO+=( "${(j::)FLAGS}" ) | |
GIT_INFO+=( "%{$fg[cyan]%}$GIT_LOCATION%{$reset_color%}" ) | |
echo "${(j: :)GIT_INFO}" | |
} | |
# Use ❯ as the non-root prompt character; # for root | |
# Change the prompt character color if the last command had a nonzero exit code | |
PS1=" | |
\$(ssh_info)%{$fg[magenta]%}%~%u \$(git_info) | |
%(?.%{$fg[blue]%}.%{$fg[red]%})%(!.#.❯)%{$reset_color%} " | |
# <https://github.com/junegunn/fzf> | |
# . ~/.fzf.zsh |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment