_bold=$(tput bold)
_normal=$(tput sgr0)

__vcs_dir() {
    local vcs base_dir sub_dir ref

    vcs="none"

    sub_dir() {
      local sub_dir
      sub_dir=$(readlink -f "${PWD}")
      sub_dir=${sub_dir#$1}
      echo ${sub_dir#/}
    }

    git_dir() {
      base_dir=$(git-rev-parse --show-cdup 2>/dev/null) || return 1
      base_dir=$(readlink -f "$base_dir/..")
      sub_dir=$(git-rev-parse --show-prefix)
      sub_dir=${sub_dir%/}
      ref=$(git-symbolic-ref -q HEAD || git-name-rev --name-only HEAD 2>/dev/null)
      ref=${ref#refs/heads/}
      vcs="git"
    }

    svn_dir() {
      [ -d ".svn" ] || return 1
      base_dir="."
      while [ -d "$base_dir/../.svn" ]; do base_dir="$base_dir/.."; done
      base_dir=$(readlink -f "$base_dir")
      sub_dir=$(sub_dir "${base_dir}")
      ref=$(svn info "$base_dir" | awk '/^URL/ { sub(".*/","",$0); r=$0 } /^Revision/ { sub("[^0-9]*","",$0); print r":"$0 }')
      vcs="svn"
    }

    git_dir ||
    svn_dir

    if [ $vcs != "none" ]; then
      __vcs_prefix="($vcs)"
      __vcs_ref="[$ref]"
    else
      __vcs_prefix=''
      __vcs_ref=''
      unset __vcs_prefix
      unset __vcs_ref
    fi

    __vcs_info=$__vcs_prefix${_bold}${__vcs_ref}${_normal}
}


LGREY='\[\033[0;37m\]'
DGREY='\[\033[1;30m\]'
LCYAN='\[\033[1;36m\]'
DCYAN='\[\033[0;36m\]'
NONE='\[\033[0m\]'
TTY=$(tty | cut -d / -f3,4)

if [ "$UID" = "0" ]; then
	LCYAN='\[\033[0;36m\]'
	DCYAN='\[\033[1;31m\]'
	LGREY='\[\033[1;34m\]'
	DGREY='\[\033[0;37m\]'
fi

PROMPT_COMMAND=__vcs_dir
PS1=$DGREY╭$LGREY──$DGREY──$LGREY╮$NONE' '$DCYAN'\u'$LCYAN'@'$DCYAN'\h'$NONE' '$LGREY─$DGREY──$NONE' '$DGREY[$LCYAN'\d \T'$DGREY]$NONE' '$DGREY[$DCYAN'$TTY'$DGREY]$NONE' '$DGREY──$LGREY──$DGREY─$LGREY─$DGREY─$NONE' '$DGREY─$NONE' \n'$LGREY╰$DGREY─[$LGREY'\w'$DGREY]'${__vcs_info}'╯' \n '$LGREY▻$NONE' '
PS2=$DGREY'\H'$LGREY'>'$NONE' '

