Skip to content

Instantly share code, notes, and snippets.

@ildus
Created May 11, 2014 12:12
Show Gist options
  • Save ildus/c9dd3f91d7d1014cd63f to your computer and use it in GitHub Desktop.
Save ildus/c9dd3f91d7d1014cd63f to your computer and use it in GitHub Desktop.
.bash_profile, works in OSX 10.9.2
export WORKON_HOME=~/.envs
source /usr/local/bin/virtualenvwrapper.sh
export CFLAGS=-Qunused-arguments
export CPPFLAGS=-Qunused-arguments
export GOPATH=$HOME/dev/golang
export PATH=$PATH:$GOPATH/bin
source /usr/local/git/contrib/completion/git-completion.bash
source /usr/local/git/contrib/completion/git-prompt.sh
# add local bin path
PATH=$HOME/bin:$PATH
PS1_OLD=$PS1
# setup color variables
color_is_on=
color_red=
color_green=
color_yellow=
color_blue=
color_white=
color_gray=
color_bg_red=
color_off=
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
color_is_on=true
color_red="\[$(/usr/bin/tput setaf 1)\]"
color_green="\[$(/usr/bin/tput setaf 2)\]"
color_yellow="\[$(/usr/bin/tput setaf 3)\]"
color_blue="\[$(/usr/bin/tput setaf 6)\]"
color_white="\[$(/usr/bin/tput setaf 7)\]"
color_gray="\[$(/usr/bin/tput setaf 8)\]"
color_off="\[$(/usr/bin/tput sgr0)\]"
color_error="$(/usr/bin/tput setab 1)$(/usr/bin/tput setaf 7)"
color_error_off="$(/usr/bin/tput sgr0)"
fi
function parse_git_status {
# clear git variables
GIT_BRANCH=
GIT_DIRTY=
# exit if no git found in system
local GIT_BIN=$(which git 2>/dev/null)
[[ -z $GIT_BIN ]] && return
GIT_BRANCH=$(__git_ps1 "%s")
# get git status
local GIT_STATUS=$($GIT_BIN status --porcelain 2>/dev/null)
[[ -n $GIT_STATUS ]] && GIT_DIRTY=1
}
function prompt_command {
# parse git status and get git variables
parse_git_status
local PS1_GIT=
local PS1_VENV=
local PWDNAME="${PWD}"
# beautify working firectory name
if [ "${HOME}" == "$PWD" ]; then
PWDNAME="~"
elif [ "${HOME}" == "${PWD:0:${#HOME}}" ]; then
PWDNAME="~${PWD:${#HOME}}"
fi
# build b/w prompt for git and vertial env
[[ ! -z $GIT_BRANCH ]] && PS1_GIT=" (git: ${GIT_BRANCH})"
[[ ! -z $VIRTUAL_ENV ]] && PS1_VENV=" (venv: ${VIRTUAL_ENV#$WORKON_HOME})"
# calculate fillsize
#local fillsize=$(($COLUMNS-$(printf "${USER}@${HOSTNAME}:${PWDNAME}${PS1_GIT}${PS1_VENV} " | wc -c | tr -d " ")))
# local FILL=$color_gray
# while [ $fillsize -gt 0 ]; do FILL="${FILL}─"; fillsize=$(($fillsize-1)); done
# FILL="${FILL}${color_off}"
local color_user=
if $color_is_on; then
# set user color
case `id -u` in
0) color_user=$color_red ;;
*) color_user=$color_green ;;
esac
# build git status for prompt
if [ ! -z $GIT_BRANCH ]; then
if [ -z $GIT_DIRTY ]; then
PS1_GIT=" (git: ${color_green}${GIT_BRANCH}${color_off})"
else
PS1_GIT=" (git: ${color_red}${GIT_BRANCH}${color_off})"
fi
fi
# build python venv status for prompt
[[ ! -z $VIRTUAL_ENV ]] && PS1_VENV=" (venv: ${color_blue}${VIRTUAL_ENV#$WORKON_HOME}${color_off})"
fi
# set new color prompt
PS1="${color_user}${USER}${color_off}@${color_yellow}${HOSTNAME}${color_off}:${color_white}${PWDNAME}${color_off}${PS1_GIT}${PS1_VENV} ${FILL}\n➜ "
# get cursor position and add new line if we're not in first column
# cool'n'dirty trick (http://stackoverflow.com/a/2575525/1164595)
# XXX FIXME: this hack broke ssh =(
# exec < /dev/tty
# local OLDSTTY=$(stty -g)
# stty raw -echo min 0
# echo -en "\033[6n" > /dev/tty && read -sdR CURPOS
# stty $OLDSTTY
#echo -en "\033[6n" && read -sdR CURPOS
#[[ ${CURPOS##*;} -gt 1 ]] && echo "${color_error}↵${color_error_off}"
# set title
if [ ! -z $VIRTUAL_ENV ]; then
echo -ne "\033]0;[env:${VIRTUAL_ENV#$WORKON_HOME}]"; echo -ne "\007"
else
echo -ne "\033]0;${PWDNAME}"; echo -ne "\007"
fi
}
PS1=$PS1"\n➜ "
PROMPT_COMMAND=prompt_command
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment