bookmark_borderTerminal: Show git branch, changes, RVM ruby version, gemset.

I was looking for a way to easily print the current gemset I am in when working in the terminal. I found a stack overflow post, but it did not really satisfy me. With some googling I also found this post.

I modified the script a tiny bit (color preferences + added __git_ps1 to detect branch) and would like to share you what I’ve got.

This is the complete script I use now, copy & paste if you like.

The result looks like this:

terminal

# This shows the git branch of the current directory
function __git_ps1 () {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* (.*)/ (1)/'
}

function __git_dirty {
git diff --quiet HEAD &>/dev/null
[ $? == 1 ] && echo " (changes!)"
}

function __git_branch {
__git_ps1 " %s"
}

function __my_rvm_ruby_version {
local gemset=$(echo $GEM_HOME | awk -F'@' '{print $2}')
[ "$gemset" != "" ] && gemset="@$gemset"
local version=$(echo $MY_RUBY_HOME | awk -F'-' '{print $2}')
[ "$version" == "1.8.7" ] && version=""
local full="$version$gemset"
[ "$full" != "" ] && echo "$full "
}

bash_prompt() {
local NONE="[\033[0m]"    # unsets color to term's fg color

# regular colors
local K="[\033[0;30m]"    # black
local R="[\033[0;31m]"    # red
local G="[\033[0;32m]"    # green
local Y="[\033[0;33m]"    # yellow
local B="[\033[0;34m]"    # blue
local M="[\033[0;35m]"    # magenta
local C="[\033[0;36m]"    # cyan
local W="[\033[0;37m]"    # white

# emphasized (bolded) colors
local EMK="[\033[1;30m]"
local EMR="[\033[1;31m]"
local EMG="[\033[1;32m]"
local EMY="[\033[1;33m]"
local EMB="[\033[1;34m]"
local EMM="[\033[1;35m]"
local EMC="[\033[1;36m]"
local EMW="[\033[1;37m]"

# background colors
local BGK="[\033[40m]"
local BGR="[\033[41m]"
local BGG="[\033[42m]"
local BGY="[\033[43m]"
local BGB="[\033[44m]"
local BGM="[\033[45m]"
local BGC="[\033[46m]"
local BGW="[\033[47m]"

local UC=$W                 # user's color
[ $UID -eq "0" ] && UC=$R   # root's color

PS1="$M$(__my_rvm_ruby_version)$Wh$W:$EMGw$EMC$(__git_branch)$EMW$(__git_dirty)${NONE} $ "
}

bash_prompt
unset bash_prompt