Skip to content

Instantly share code, notes, and snippets.

@mikldt
Created June 6, 2010 19:49
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save mikldt/427834 to your computer and use it in GitHub Desktop.
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
# See bash(1) for more options
# Could add ignoredups to remove duplicate lines
HISTCONTROL=ignorespace
# append to the history file, don't overwrite it
shopt -s histappend
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000
# Keep timestamp in history.
HISTTIMEFORMAT='%F %T '
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 [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
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 "
Linux configs by mikldt
This gist contains a couple of configs that I use. They're a combination of default config files, things I've found online, and my own work. They're mostly set up for my own use, but should be generic enough that you can adapt them as needed.
Feel free to download, use, modify, redistribute. If you redistribute any of my contributions to these files, attribution would be nice.
Included are a .bashrc and .screenrc. The .bashrc uses a .bash_prompt config file where a fance prompt is set up. There is also install.sh which creates links to all these files from the repository so you can pull updates.
Quick install:
cd ~; git clone git://gist.github.com/427834.git conf-gist; conf-gist/install.sh
#!/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