helm/bash/prompt

137 lines
3.5 KiB
Plaintext
Raw Normal View History

2014-09-19 15:24:34 -07:00
#!/bin/bash
# inspired from: https://raw.githubusercontent.com/necolas/dotfiles/master/shell/bash_prompt
prompt_git() {
local s=""
local branchName=""
# check if the current directory is in a git repository
if [ $(git rev-parse --is-inside-work-tree &>/dev/null; printf "%s" $?) == 0 ]; then
# check if the current directory is in .git before running git checks
if [ "$(git rev-parse --is-inside-git-dir 2> /dev/null)" == "false" ]; then
# ensure index is up to date
git update-index --really-refresh -q &>/dev/null
# check for uncommitted changes in the index
if ! $(git diff --quiet --ignore-submodules --cached); then
s="$s+";
fi
# check for unstaged changes
if ! $(git diff-files --quiet --ignore-submodules --); then
s="$s!";
fi
# check for untracked files
if [ -n "$(git ls-files --others --exclude-standard)" ]; then
s="$s?";
fi
# check for stashed files
if $(git rev-parse --verify refs/stash &>/dev/null); then
s="$s$";
fi
fi
# get the short symbolic ref
# if HEAD isn't a symbolic ref, get the short SHA
# otherwise, just give up
branchName="$(git symbolic-ref --quiet --short HEAD 2> /dev/null || \
git rev-parse --short HEAD 2> /dev/null || \
printf "(unknown)")"
[ -n "$s" ] && s=" [$s]"
printf "%s" "$1$branchName$s"
else
return
fi
}
set_prompts() {
local black=""
local blue=""
local bold=""
local cyan=""
local green=""
local orange=""
local purple=""
local red=""
local reset=""
local white=""
local yellow=""
local hostStyle=""
local userStyle=""
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
tput sgr0 # reset colors
bold=$(tput bold)
reset=$(tput sgr0)
# Solarized colors
# (https://github.com/altercation/solarized/tree/master/iterm2-colors-solarized#the-values)
black=$(tput setaf 0)
blue=$(tput setaf 33)
cyan=$(tput setaf 37)
green=$(tput setaf 64)
orange=$(tput setaf 166)
purple=$(tput setaf 125)
red=$(tput setaf 124)
white=$(tput setaf 15)
yellow=$(tput setaf 136)
else
bold=""
reset="\e[0m"
black="\e[1;30m"
blue="\e[1;34m"
cyan="\e[1;36m"
green="\e[1;32m"
orange="\e[1;33m"
purple="\e[1;35m"
red="\e[1;31m"
white="\e[1;37m"
yellow="\e[1;33m"
fi
# build the prompt
# logged in as root
if [[ "$USER" == "root" ]]; then
userStyle="\[$bold$red\]"
else
userStyle="\[$orange\]"
fi
# connected via ssh
if [[ "$SSH_TTY" ]]; then
hostStyle="\[$bold$red\]"
else
hostStyle="\[$yellow\]"
fi
# set the terminal title to the current working directory
PS1="\[\033]0;\w\007\]"
PS1+="\n" # newline
PS1+="\[$userStyle\]\u" # username
PS1+="\[$reset$white\]@"
PS1+="\[$hostStyle\]\h" # host
PS1+="\[$reset$white\]: "
PS1+="\[$green\]\w" # working directory
PS1+="\$(prompt_git \"$white on $cyan\")" # git repository details
PS1+="\n"
PS1+="\[$reset$white\]\$ \[$reset\]" # $ (and reset color)
export PS1
}
set_prompts
unset set_prompts