fancy bash promptI have looked for this for a long time: how to have good fancy bash prompt. I found several example made in 1996 or 1998 that I had to tweak a lot.

But this was tricky and never work well, for example when I wanted to search a command back in the history using the arrows (up and down) or the CTRL-R key binding, there was a column problem.
If I wanted to change some chars or words in the command I picked in the history, they were not where I saw them, also sometimes a part of the prompt was hidden by the command. Not really useful.

Recently, I gave a try to BashStyle-ng to see how it could tweak my bash prompt. And I was surprised to see an option to have an “elite” prompt (which was the name of the old prompt I tweaked before). So I choose this one and see that it needs some tweak (again) to looks like what I wanted.
I search for the function in BashStyle code, found it and start to make some changes, and was happy to see that my history bug doesn’t come up. After a while (not so long), I find a way to have it exactly how I wanted.
So here’s the first part of my new .bashrc heavily inspired by bashstyle :
Note : As the special chars that draw the corners and line won’t appear on a web page, I have put the file in attachement at the bottom of the post.

#!/bin/bash
# based on a function found in bashtstyle-ng 5.0b1
# Original author Christopher Roy Bratusek (http://www.nanolx.org)
# Last arranged by ayoli (http://ayozone.org) 2008-02-04 17:16:43 +0100 CET 

function pre_prompt {
newPWD="${PWD}"
user="whoami"
host=$(echo -n $HOSTNAME | sed -e "s/[\.].*//”)
datenow=$(date “+%a, %d %b %y”)
let promptsize=$(echo -n “–($user@$host ddd, DD mmm YY)—(${PWD})—” \
                 | wc -c | tr -d ” “)
let fillsize=${COLUMNS}-${promptsize}
fill=”"
while [ "$fillsize" -gt "0" ]
do
    fill=”${fill}—”
	let fillsize=${fillsize}-1
done
if [ "$fillsize" -lt "0" ]
then
    let cutt=3-${fillsize}
    newPWD=”…$(echo -n $PWD | sed -e “s/\(^.\{$cutt\}\)\(.*\)/\2/”)”
fi

}

PROMPT_COMMAND=pre_prompt

export black=”\[\033[0;38;5;0m\]”
export red=”\[\033[0;38;5;1m\]”
export green=”\[\033[0;38;5;2m\]”
export yellow=”\[\033[0;38;5;3m\]”
export blue=”\[\033[0;38;5;4m\]”
export magenta=”\[\033[0;38;5;55m\]”
export cyan=”\[\033[0;38;5;6m\]”
export white=”\[\033[0;38;5;7m\]”
export coldblue=”\[\033[0;38;5;33m\]”
export smoothblue=”\[\033[0;38;5;111m\]”
export iceblue=”\[\033[0;38;5;45m\]”
export turqoise=”\[\033[0;38;5;50m\]”
export smoothgreen=”\[\033[0;38;5;42m\]”

PS1=”$green??($coldblue\u@\h \$(date \”+%a, %d %b %y\”)$green)?\${fill}?($coldblue\$newPWD\
$green)?????\n$green??($coldblue\$(date \”+%H:%M\”) \$$green)?>$white ”

Note : As the special chars that draw the corners and line won’t appear on a web page, I have put the file in attachement at the bottom of the post.

The second part is more about the aliases and other settings of my shell :

# bash_history settings: size and no duplicates and no lines w/ lead spaces
exportHISTCONTROL="ignoreboth"
export HISTSIZE=1024

# aliases #############################################

# enable color support of ls and also add handy aliases
eval `dircolors -b`
alias ls='ls --color=auto'
alias dir='ls --color=auto --format=vertical'
alias vdir='ls --color=auto --format=long'

# some more ls aliases
alias ll='ls -lhX'
alias la='ls -A'
alias ldir='ls -lhA |grep ^d'
alias lfiles='ls -lhA |grep ^-'
#alias l='ls -CF'

# To see something coming into ls output: lss
alias lss='ls -lrt | grep $1'

# To check a process is running in a box with a heavy load: pss
alias pss='ps -ef | grep $1'

# usefull alias to browse your filesystem for heavy usage quickly
alias ducks='ls -A | grep -v -e '\''^\.\.$'\'' |xargs -i du -ks {} |sort -rn |head -16 | awk '\''{print $2}'\'' | xargs -i du -hs {}'

# cool colors for manpages
alias man="TERMINFO=~/.terminfo TERM=mostlike LESS=C PAGER=less man"

##########################################################
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc).
if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi

# CDPATH initialisation
# CDPATH=.:~:/media

download bashrc.txt
(backup your ~/.bashrc, then download this using right clic and “Save link as” then put it in your home and rename it to .bashrc).