Skip to content

Instantly share code, notes, and snippets.

@btd
Created July 15, 2013 12:45
Show Gist options
  • Save btd/5999664 to your computer and use it in GitHub Desktop.
Save btd/5999664 to your computer and use it in GitHub Desktop.
export PATH=/usr/local/bin:$PATH:/usr/local/share/npm/bin
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*
bind "set completion-ignore-case on"
#export PS1="\[\e[1;32m\]\u\[\e[m\]\[\e[0;36m\]@\[\e[m\]\[\e[1;31m\]\h\[\e[m\]\[\e[0;36m\]:\[\e[m\]\[\e[1;33m\]\w\[\e[m\]\n\[\e[1;37m\] \$ \[\e[m\]"
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
# =============
# = Functions =
# =============
## Archives
# Extract about anything
extract ()
{
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xvjf $1 ;;
*.tar.gz) tar xvzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xvf $1 ;;
*.tbz2) tar xvjf $1 ;;
*.tgz) tar xvzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*) echo "'$1' cannot be extracted via >extract<" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
# List the most recent files in a directory
lsnew()
{
ls -lt ${1+"$@"} | head -20;
}
# Open a manpage in Preview, which can be saved to PDF
pman()
{
man -t "${1}" | open -f -a /Applications/Preview.app
}
# setup color variables
color_is_on=
color_red=
color_green=
color_yellow=
color_blue=
color_white=
color_gray=
color_bg_red=
color_off=
color_user=
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)"
# set user color
case `id -u` in
0) color_user=$color_red ;;
*) color_user=$color_green ;;
esac
fi
# some kind of optimization - check if git installed only on config load
PS1_GIT_BIN=$(which git 2>/dev/null)
function prompt_command {
local PS1_GIT=
local PS1_VENV=
local GIT_BRANCH=
local GIT_DIRTY=
local PWDNAME=$PWD
# beautify working directory name
if [[ "${HOME}" == "${PWD}" ]]; then
PWDNAME="~"
elif [[ "${HOME}" == "${PWD:0:${#HOME}}" ]]; then
PWDNAME="~${PWD:${#HOME}}"
fi
# parse git status and get git variables
if [[ ! -z $PS1_GIT_BIN ]]; then
# check we are in git repo
local CUR_DIR=$PWD
while [[ ! -d "${CUR_DIR}/.git" ]] && [[ ! "${CUR_DIR}" == "/" ]] && [[ ! "${CUR_DIR}" == "~" ]] && [[ ! "${CUR_DIR}" == "" ]]; do CUR_DIR=${CUR_DIR%/*}; done
if [[ -d "${CUR_DIR}/.git" ]]; then
# 'git repo for dotfiles' fix: show git status only in home dir and other git repos
if [[ "${CUR_DIR}" != "${HOME}" ]] || [[ "${PWD}" == "${HOME}" ]]; then
# get git branch
GIT_BRANCH=$($PS1_GIT_BIN symbolic-ref HEAD 2>/dev/null)
if [[ ! -z $GIT_BRANCH ]]; then
GIT_BRANCH=${GIT_BRANCH#refs/heads/}
# get git status
local GIT_STATUS=$($PS1_GIT_BIN status --porcelain 2>/dev/null)
[[ -n $GIT_STATUS ]] && GIT_DIRTY=1
fi
fi
fi
fi
# build b/w prompt for git and virtual env
[[ ! -z $GIT_BRANCH ]] && PS1_GIT=" (git: ${GIT_BRANCH})"
if $color_is_on; then
# 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
fi
# set new color prompt
PS1="${color_user}${USER}${color_off}${color_blue}@${color_off}${color_yellow}${HOSTNAME}${color_off} ${color_white}${PWDNAME}${color_off}${PS1_GIT} \n ${color_white}➜${color_off} "
# 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
echo -ne "\033]0;${USER}@${HOSTNAME}:${PWDNAME}"; echo -ne "\007"
}
# set prompt command (title update and color prompt)
PROMPT_COMMAND=prompt_command
# set new b/w prompt (will be overwritten in 'prompt_command' later for color prompt)
PS1='\u@\h:\w\$ '
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment