summaryrefslogtreecommitdiff
path: root/oh-my-zsh/themes/bureau.zsh-theme
diff options
context:
space:
mode:
Diffstat (limited to 'oh-my-zsh/themes/bureau.zsh-theme')
-rw-r--r--oh-my-zsh/themes/bureau.zsh-theme126
1 files changed, 126 insertions, 0 deletions
diff --git a/oh-my-zsh/themes/bureau.zsh-theme b/oh-my-zsh/themes/bureau.zsh-theme
new file mode 100644
index 0000000..698aa2f
--- /dev/null
+++ b/oh-my-zsh/themes/bureau.zsh-theme
@@ -0,0 +1,126 @@
+# 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%}"
+
+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() {
+ # 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