-# Bash git prompt solarized
+#!/bin/bash
-if [ ! -f "${HOME}/.config/profile/rc/git-prompt.sh" ]; then
- URL="https://raw.githubusercontent.com/git/git/master/contrib/completion"
- curl "${URL}/git-prompt.sh" -L -s -o ~/.config/profile/rc/git-prompt.sh
-fi
+# bash_prompt
-[ -f ${HOME}/.config/profile/rc/git-prompt.sh ] && . ${HOME}/.config/profile/rc/git-prompt.sh
+# iTerm2 prefs: import Solarized theme (disable bright colors for bold text)
+# Color ref: http://vim.wikia.com/wiki/Xterm256_color_names_for_console_Vim
+# More tips: http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html
if [[ $COLORTERM = gnome-* && $TERM = xterm ]] && infocmp gnome-256color >/dev/null 2>&1; then
- export TERM='gnome-256color';
+ export TERM='gnome-256color';
elif infocmp xterm-256color >/dev/null 2>&1; then
- export TERM='xterm-256color';
+ export TERM='xterm-256color';
fi;
-if tput setaf 1 &> /dev/null; then
- tput sgr0; # reset colors
- bold=$(tput bold);
- reset=$(tput sgr0);
- 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);
- violet=$(tput setaf 61);
- 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";
- violet="\e[1;35m";
- white="\e[1;37m";
- yellow="\e[1;33m";
-fi;
+if [ ! -f "${HOME}/.config/profile/rc/git-prompt.sh" ]; then
+ URL="https://raw.githubusercontent.com/git/git/master/contrib/completion"
+ curl "${URL}/git-prompt.sh" -L -s -o "${HOME}/.config/profile/rc/git-prompt.sh"
+fi
-# Highlight the user name when logged in as root.
-if [[ "${USER}" == "root" ]]; then
- userStyle="${red}";
-else
- userStyle="${orange}";
-fi;
+if [ -f "${HOME}/.config/profile/rc/git-prompt.sh" ]; then
+ . ${HOME}/.config/profile/rc/git-prompt.sh
+ # Enabling any of these options will slow down the prompt
+ export GIT_PS1_SHOWDIRTYSTATE=1
+ export GIT_PS1_SHOWSTASHSTATE=1
+ export GIT_PS1_SHOWUNTRACKEDFILES=1
+ export GIT_PS1_SHOWUPSTREAM="auto"
+ export GIT_PS1_STATESEPARATOR=" ["
+
+fi
+
+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
+ 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)
+ violet=$(tput setaf 61)
+ 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"
+ violet="\e[1;35m"
+ 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\] at "
+ PS1+="\[$hostStyle\]\h" # host
+ PS1+="\[$reset$white\] in "
+ PS1+="\[$green\]\w" # working directory
+ #PS1+="\$(prompt_git \"$white on $cyan\")" # git repository details
+ PS1+="$(__git_ps1 ' \[${white}\]on \[${cyan}\]%s]')"; # on branch
+ PS1+="\n"
+ PS1+="\[$reset$white\]\$ \[$reset\]" # $ (and reset color)
+
+ export PS1
+
+ PS2="\[${yellow}\]→ " # `→`
+ PS2+="\[${reset}\]" # reset color
+
+ export PS2;
+}
-# Highlight the hostname when connected via SSH.
-if [[ "${SSH_TTY}" ]]; then
- hostStyle="${bold}${red}";
-else
- hostStyle="${yellow}";
-fi;
-# Enabling any of these options will slow down the prompt
-export GIT_PS1_SHOWDIRTYSTATE=1
-export GIT_PS1_SHOWSTASHSTATE=1
-export GIT_PS1_SHOWUNTRACKEDFILES=1
-export GIT_PS1_SHOWUPSTREAM=1
-
-# Set git prompt
-# Set the terminal title to the current working directory.
-PS1='\[\033]0;\w\007\]';
-PS1+='\[${bold}\]';
-PS1+='\r'; # newline
-PS1+='\[${userStyle}\]\u '; # username
-PS1+='\[${white}\]at ';
-PS1+='\[${hostStyle}\]\h '; # at host
-PS1+='\[${white}\]in ';
-PS1+='\[${green}\]\w '; # in working directory
-PS1+="$(__git_ps1 '\[${white}\]on \[${violet}\]%s\[${blue}\]')"; # on branch
-PS1+='\n'; # newline
-PS1+='\[${white}\]\$ '; # `$`
-PS1+='\[${reset}\]'; # reset color
-export PS1;
-
-PS2='\[${yellow}\]→ '; # `→`
-PS2+='\[${reset}\]'; # reset color
-export PS2;
+set_prompts
+unset set_prompts