Skip to content

Instantly share code, notes, and snippets.

@mikldt
Created June 6, 2010 19:49
Show Gist options
  • Select an option

  • Save mikldt/427834 to your computer and use it in GitHub Desktop.

Select an option

Save mikldt/427834 to your computer and use it in GitHub Desktop.
# My pretty prompt:
# - Truncates the first few dirs in long paths
# - red/green prompt based on return value of previous command
# - inserts git branch name if in a repo
# Developed primarily for debian/ubunu systems
# First, some stuff from the Ubunutu .bashrc
# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
#Add git stuff to the prompt.
#We'll keep the default prompt from /etc/profile.
function parse_git_branch {
ref=$(git symbolic-ref HEAD 2> /dev/null) || return
echo "("${ref#refs/heads/}")"
}
RED="\033[0;31m"
YELLOW="\033[0;33m"
GREEN="\033[0;32m"
BLUE="\033[0;034m"
TXTRST="\e[0m"
#return value visualisation
RET_COMMAND='RET=$?'
RET_COLOR='$(if [[ $RET = 0 ]]; then echo -ne \[$GREEN\]; else echo -ne \[$RED\]; fi;)'
#Shorten first 3 dirs in prompt to first char only for length
SUBS='"s!([^/])[^/]+/!\1/!"'
DIR_COMMAND="CurDir=\`pwd|sed -re "s!$HOME!~!" -e $SUBS -e $SUBS -e $SUBS\`"
PROMPT_COMMAND="$RET_COMMAND $DIR_COMMAND"
if [ "$PS1" ]; then
if [ "$BASH" ]; then
PS1="\[$GREEN\]\u@\h:\$CurDir\[$YELLOW\]\$(parse_git_branch)$RET_COLOR\$ \[$TXTRST\]"
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
# set a fancy prompt (non-color, unless we know we "want" color)
#case "$TERM" in
#xterm-color)
# PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
# ;;
#*)
# PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
# ;;
#esac
# Comment in the above and uncomment this below for a color prompt
#PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
# If this is an xterm set the title to user@host:dir
#case "$TERM" in
#xterm*|rxvt*)
# PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\007"'
# ;;
#*)
# ;;
#esac
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# This .bashrc modified by mikldt, but based on the default Ubuntu .bashrc
# Sources fancy prompt settings to .bash_prompt if it exists.
# http://gist.github.com/427834
# Quick Install:
# cd ~; git clone git clone git://gist.github.com/427834.git conf-gist; conf-gist/install.sh
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
# don't put duplicate lines in the history. See bash(1) for more options
export HISTCONTROL=ignoredups:ignorespace
# Keep timestamp in history.
export HISTTIMEFORMAT='%F %T '
export EDITOR=vim
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(lesspipe)"
# Prompt
# I handle having a fancy prompt in a separate file, .bash_prompt
if [ -f ~/.bash_prompt ]; then
. ~/.bash_prompt
fi
# enable color support of ls and also add handy aliases
if [ "$TERM" != "dumb" ]; then
eval "`dircolors -b`"
alias ls='ls --color=auto'
#alias dir='ls --color=auto --format=vertical'
#alias vdir='ls --color=auto --format=long'
fi
# some more ls aliases
alias ll='ls -l'
alias la='ls -al'
#alias l='ls -CF'
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
export PATH=$HOME/.gem/ruby/1.8/bin:$PATH
# Easy local mods.
if [ -f ~/.bash_local ]; then
. ~/.bash_local
fi
# An alternative hardstatus to display a bar at the bottom listing the
# windownames and highlighting the current windowname in blue. (This is only
# enabled if there is no hardstatus setting for your terminal)
hardstatus on
hardstatus alwayslastline
hardstatus string "%{.bW}%-w%{.rW}%n %t%{-}%+w %=%{..G} %H %{..Y} %m/%d %C%a "
#!/bin/bash
# install.sh: Create symlinks so that user will use the
# configurations specified in this repository
# ( http://gist.github.com/427834 )
LSOF=$(lsof -p $$ | grep -E "/"$(basename $0)"$")
MY_PATH=$(echo $LSOF | sed -r s/'^([^\/]+)\/'/'\/'/1 2>/dev/null)
CONFIG_DIR=$(dirname $MY_PATH)
cd $HOME
# Save old configs for posterity
if [ -f .bashrc ]; then
mv .bashrc .bashrc.old
echo ".bashrc moved to .bashrc.old"
fi
if [ -f .bash_prompt ]; then
mv .bash_prompt .bash_prompt.old
echo ".bash_prompt moved to .bash_prompt.old"
fi
if [ -f .screenrc ]; then
mv .screenrc .screenrc.old
echo ".screenrc moved to .screenrc.old"
fi
# Link in configs from this directory
`ln -s $CONFIG_DIR/.bashrc .bashrc`
`ln -s $CONFIG_DIR/.bash_prompt .bash_prompt`
`ln -s $CONFIG_DIR/.screenrc .screenrc`
echo "links created!"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment