mirror of
https://github.com/ohmybash/oh-my-bash.git
synced 2024-05-11 05:55:37 +00:00
111 lines
3.8 KiB
Bash
111 lines
3.8 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
__powerline() {
|
|
|
|
# Unicode symbols
|
|
readonly PS_SYMBOL_DARWIN=''
|
|
readonly PS_SYMBOL_LINUX='$'
|
|
readonly PS_SYMBOL_OTHER='%'
|
|
readonly GIT_BRANCH_SYMBOL='⑂ '
|
|
readonly GIT_BRANCH_CHANGED_SYMBOL='+'
|
|
readonly GIT_NEED_PUSH_SYMBOL='⇡'
|
|
readonly GIT_NEED_PULL_SYMBOL='⇣'
|
|
|
|
# Solarized colorscheme
|
|
readonly FG_BASE03="\[$(tput setaf 8)\]"
|
|
readonly FG_BASE02="\[$(tput setaf 0)\]"
|
|
readonly FG_BASE01="\[$(tput setaf 10)\]"
|
|
readonly FG_BASE00="\[$(tput setaf 11)\]"
|
|
readonly FG_BASE0="\[$(tput setaf 12)\]"
|
|
readonly FG_BASE1="\[$(tput setaf 14)\]"
|
|
readonly FG_BASE2="\[$(tput setaf 7)\]"
|
|
readonly FG_BASE3="\[$(tput setaf 15)\]"
|
|
|
|
readonly BG_BASE03="\[$(tput setab 8)\]"
|
|
readonly BG_BASE02="\[$(tput setab 0)\]"
|
|
readonly BG_BASE01="\[$(tput setab 10)\]"
|
|
readonly BG_BASE00="\[$(tput setab 11)\]"
|
|
readonly BG_BASE0="\[$(tput setab 12)\]"
|
|
readonly BG_BASE1="\[$(tput setab 14)\]"
|
|
readonly BG_BASE2="\[$(tput setab 7)\]"
|
|
readonly BG_BASE3="\[$(tput setab 15)\]"
|
|
|
|
readonly FG_YELLOW="\[$(tput setaf 3)\]"
|
|
readonly FG_ORANGE="\[$(tput setaf 9)\]"
|
|
readonly FG_RED="\[$(tput setaf 1)\]"
|
|
readonly FG_MAGENTA="\[$(tput setaf 5)\]"
|
|
readonly FG_VIOLET="\[$(tput setaf 13)\]"
|
|
readonly FG_BLUE="\[$(tput setaf 4)\]"
|
|
readonly FG_CYAN="\[$(tput setaf 6)\]"
|
|
readonly FG_GREEN="\[$(tput setaf 2)\]"
|
|
|
|
readonly BG_YELLOW="\[$(tput setab 3)\]"
|
|
readonly BG_ORANGE="\[$(tput setab 9)\]"
|
|
readonly BG_RED="\[$(tput setab 1)\]"
|
|
readonly BG_MAGENTA="\[$(tput setab 5)\]"
|
|
readonly BG_VIOLET="\[$(tput setab 13)\]"
|
|
readonly BG_BLUE="\[$(tput setab 4)\]"
|
|
readonly BG_CYAN="\[$(tput setab 6)\]"
|
|
readonly BG_GREEN="\[$(tput setab 2)\]"
|
|
|
|
readonly DIM="\[$(tput dim)\]"
|
|
readonly REVERSE="\[$(tput rev)\]"
|
|
readonly RESET="\[$(tput sgr0)\]"
|
|
readonly BOLD="\[$(tput bold)\]"
|
|
|
|
# what OS?
|
|
case "$(uname)" in
|
|
Darwin)
|
|
readonly PS_SYMBOL=$PS_SYMBOL_DARWIN
|
|
;;
|
|
Linux)
|
|
readonly PS_SYMBOL=$PS_SYMBOL_LINUX
|
|
;;
|
|
*)
|
|
readonly PS_SYMBOL=$PS_SYMBOL_OTHER
|
|
esac
|
|
|
|
__git_info() {
|
|
[ -x "$(which git)" ] || return # git not found
|
|
|
|
local git_eng="env LANG=C git" # force git output in English to make our work easier
|
|
# get current branch name or short SHA1 hash for detached head
|
|
local branch="$($git_eng symbolic-ref --short HEAD 2>/dev/null || $git_eng describe --tags --always 2>/dev/null)"
|
|
[ -n "$branch" ] || return # git branch not found
|
|
|
|
local marks
|
|
|
|
# branch is modified?
|
|
[ -n "$($git_eng status --porcelain)" ] && marks+=" $GIT_BRANCH_CHANGED_SYMBOL"
|
|
|
|
# how many commits local branch is ahead/behind of remote?
|
|
local stat="$($git_eng status --porcelain --branch | grep '^##' | grep -o '\[.\+\]$')"
|
|
local aheadN="$(echo $stat | grep -o 'ahead [[:digit:]]\+' | grep -o '[[:digit:]]\+')"
|
|
local behindN="$(echo $stat | grep -o 'behind [[:digit:]]\+' | grep -o '[[:digit:]]\+')"
|
|
[ -n "$aheadN" ] && marks+=" $GIT_NEED_PUSH_SYMBOL$aheadN"
|
|
[ -n "$behindN" ] && marks+=" $GIT_NEED_PULL_SYMBOL$behindN"
|
|
|
|
# print the git branch segment without a trailing newline
|
|
printf " $GIT_BRANCH_SYMBOL$branch$marks "
|
|
}
|
|
|
|
ps1() {
|
|
# Check the exit code of the previous command and display different
|
|
# colors in the prompt accordingly.
|
|
if [ $? -eq 0 ]; then
|
|
local BG_EXIT="$BG_GREEN"
|
|
else
|
|
local BG_EXIT="$BG_RED"
|
|
fi
|
|
|
|
PS1="$BG_BASE1$FG_BASE3 \w $RESET"
|
|
PS1+="$BG_BLUE$FG_BASE3$(__git_info)$RESET"
|
|
PS1+="$BG_EXIT$FG_BASE3 $PS_SYMBOL $RESET "
|
|
}
|
|
|
|
PROMPT_COMMAND=ps1
|
|
}
|
|
|
|
__powerline
|
|
unset __powerline
|