You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
3.6 KiB
133 lines
3.6 KiB
# oh-my-zsh Bureau Theme |
|
|
|
### NVM |
|
|
|
ZSH_THEME_NVM_PROMPT_PREFIX="%B⬡%b " |
|
ZSH_THEME_NVM_PROMPT_SUFFIX="" |
|
|
|
### Git [±master ▾●] |
|
|
|
ZSH_THEME_GIT_PROMPT_PREFIX="[%{$fg_bold[green]%}±%{$reset_color%}%{$fg_bold[white]%}" |
|
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}]" |
|
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg_bold[green]%}✓%{$reset_color%}" |
|
ZSH_THEME_GIT_PROMPT_AHEAD="%{$fg[cyan]%}▴%{$reset_color%}" |
|
ZSH_THEME_GIT_PROMPT_BEHIND="%{$fg[magenta]%}▾%{$reset_color%}" |
|
ZSH_THEME_GIT_PROMPT_STAGED="%{$fg_bold[green]%}●%{$reset_color%}" |
|
ZSH_THEME_GIT_PROMPT_UNSTAGED="%{$fg_bold[yellow]%}●%{$reset_color%}" |
|
ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg_bold[red]%}●%{$reset_color%}" |
|
ZSH_THEME_GIT_PROMPT_STASHED="(%{$fg_bold[blue]%}✹%{$reset_color%})" |
|
|
|
bureau_git_info () { |
|
local ref |
|
ref=$(command git symbolic-ref HEAD 2> /dev/null) || \ |
|
ref=$(command git rev-parse --short HEAD 2> /dev/null) || return |
|
echo "${ref#refs/heads/}" |
|
} |
|
|
|
bureau_git_status() { |
|
local result gitstatus |
|
gitstatus="$(command git status --porcelain -b 2>/dev/null)" |
|
|
|
# check status of files |
|
local gitfiles="$(tail -n +2 <<< "$gitstatus")" |
|
if [[ -n "$gitfiles" ]]; then |
|
if [[ "$gitfiles" =~ $'(^|\n)[AMRD]. ' ]]; then |
|
result+="$ZSH_THEME_GIT_PROMPT_STAGED" |
|
fi |
|
if [[ "$gitfiles" =~ $'(^|\n).[MTD] ' ]]; then |
|
result+="$ZSH_THEME_GIT_PROMPT_UNSTAGED" |
|
fi |
|
if [[ "$gitfiles" =~ $'(^|\n)\\?\\? ' ]]; then |
|
result+="$ZSH_THEME_GIT_PROMPT_UNTRACKED" |
|
fi |
|
if [[ "$gitfiles" =~ $'(^|\n)UU ' ]]; then |
|
result+="$ZSH_THEME_GIT_PROMPT_UNMERGED" |
|
fi |
|
else |
|
result+="$ZSH_THEME_GIT_PROMPT_CLEAN" |
|
fi |
|
|
|
# check status of local repository |
|
local gitbranch="$(head -n 1 <<< "$gitstatus")" |
|
if [[ "$gitbranch" =~ '^## .*ahead' ]]; then |
|
result+="$ZSH_THEME_GIT_PROMPT_AHEAD" |
|
fi |
|
if [[ "$gitbranch" =~ '^## .*behind' ]]; then |
|
result+="$ZSH_THEME_GIT_PROMPT_BEHIND" |
|
fi |
|
if [[ "$gitbranch" =~ '^## .*diverged' ]]; then |
|
result+="$ZSH_THEME_GIT_PROMPT_DIVERGED" |
|
fi |
|
|
|
# check if there are stashed changes |
|
if command git rev-parse --verify refs/stash &> /dev/null; then |
|
result+="$ZSH_THEME_GIT_PROMPT_STASHED" |
|
fi |
|
|
|
echo $result |
|
} |
|
|
|
bureau_git_prompt() { |
|
# ignore non git folders and hidden repos (adapted from lib/git.zsh) |
|
if ! command git rev-parse --git-dir &> /dev/null \ |
|
|| [[ "$(command git config --get oh-my-zsh.hide-info 2>/dev/null)" == 1 ]]; then |
|
return |
|
fi |
|
|
|
# check git information |
|
local gitinfo=$(bureau_git_info) |
|
if [[ -z "$gitinfo" ]]; then |
|
return |
|
fi |
|
|
|
# quote % in git information |
|
local output="${gitinfo:gs/%/%%}" |
|
|
|
# check git status |
|
local gitstatus=$(bureau_git_status) |
|
if [[ -n "$gitstatus" ]]; then |
|
output+=" $gitstatus" |
|
fi |
|
|
|
echo "${ZSH_THEME_GIT_PROMPT_PREFIX}${output}${ZSH_THEME_GIT_PROMPT_SUFFIX}" |
|
} |
|
|
|
|
|
_PATH="%{$fg_bold[white]%}%~%{$reset_color%}" |
|
|
|
if [[ $EUID -eq 0 ]]; then |
|
_USERNAME="%{$fg_bold[red]%}%n" |
|
_LIBERTY="%{$fg[red]%}#" |
|
else |
|
_USERNAME="%{$fg_bold[white]%}%n" |
|
_LIBERTY="%{$fg[green]%}$" |
|
fi |
|
_USERNAME="$_USERNAME%{$reset_color%}@%m" |
|
_LIBERTY="$_LIBERTY%{$reset_color%}" |
|
|
|
|
|
get_space () { |
|
local STR=$1$2 |
|
local zero='%([BSUbfksu]|([FB]|){*})' |
|
local LENGTH=${#${(S%%)STR//$~zero/}} |
|
local SPACES=$(( COLUMNS - LENGTH - ${ZLE_RPROMPT_INDENT:-1} )) |
|
|
|
(( SPACES > 0 )) || return |
|
printf ' %.0s' {1..$SPACES} |
|
} |
|
|
|
_1LEFT="$_USERNAME $_PATH" |
|
_1RIGHT="[%*]" |
|
|
|
bureau_precmd () { |
|
_1SPACES=`get_space $_1LEFT $_1RIGHT` |
|
print |
|
print -rP "$_1LEFT$_1SPACES$_1RIGHT" |
|
} |
|
|
|
setopt prompt_subst |
|
PROMPT='> $_LIBERTY ' |
|
RPROMPT='$(nvm_prompt_info) $(bureau_git_prompt)' |
|
|
|
autoload -U add-zsh-hook |
|
add-zsh-hook precmd bureau_precmd
|
|
|