Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

I've seen others add all this information to their PS1 prompt.

I like the approaches that colorize the elements and also do a carriage return at the end

share|improve this question
    
Please don't create tags for the sake of creating tags. Tags are how people see your questions, so you should try to use popular tags, not ultra-specialized tags. For example, for questions about a prompt, use prompt, don't invent a ps1 tag. But use only relevant tags: this question has nothing to do with colorize, so don't use colorize — and colors are only a sideline, so there's no call for colors either. –  Gilles May 9 at 1:57

2 Answers 2

up vote 1 down vote accepted

For:

enter image description here

Add this to the .bashrc file

HOST='\033[02;36m\]\h'
HOST=' '$HOST
parse_git_branch () { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'; }
TIME='\033[01;31m\]\t \033[01;32m\]'
LOCATION=' \033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`'
BRANCH=' \033[00;33m\]$(parse_git_branch)\[\033[00m\]\n\$ '
PS1=$TIME$USER$HOST$LOCATION$BRANCH
PS2='\[\033[01;36m\]>'

This will work on both Ubuntu and OSX. Note that I have to have the HOST 'built' on two lines to show the same way in both Linux and OSX. Didn't figure out the reason why but it works.

Note the use of the "_" directory which helps prevent long directory nesting from pushing the prompt to 2 lines by only showing top 3 and bottom 3 directories. less than 7 it just shows them all.

share|improve this answer
1  
Note that this won't work on a stock OSX unless you add the lines to .profile or .bash_profile instead of .bashrc or you source .bashrc from .profile. –  terdon May 4 at 13:40
    
Good point. I source it from .bash_profile so it's the same on both. In .bash_profile I put anything that is mac or work specific. –  Michael Durrant May 4 at 14:03

I use quite a complex PS1 line on my machine. The following set of code creates my PS1 line. Place it in your bashrc file if you wish to use it. I'm not sure if it works on OSX systems, but my guess would be no.

source "/usr/share/git/completion/git-prompt.sh"

GIT_PS1_SHOWDIRTYSTATE=1;
GIT_PS1_SHOWCOLORHINTS=1;
GIT_PS1_SHOWUNTRACKEDFILES=1;

SH_WHITE="\[\033[1;37m\]"
SH_BLUE="\[\033[1;34m\]"
SH_RED="\[\033[1;31m\]"
SH_GREEN="\[\033[1;32m\]"
SH_YELLOW="\[\033[1;33m\]"

BL_ANGLE="\342\224\224"
TL_ANGLE="\342\224\214"
HORIZ_LINE="\342\224\200"

BATT="\$(acpi -b | awk '{print \$4}' | cut -b1-3)"
FILES_STAT="\$(ls -1 | wc -l | sed 's: ::g')"
FILES_SIZE="\$(ls -lah | grep -m 1 total | sed 's/1:total //')b"
GIT_PS1='$(__git_ps1 "(%s)")'

if [ $UID -eq 0 ]; then
PS1='\[\e[0;31m\]\u\[\e[m\]\[\e[1;37m\]@\h\[\e[m\] \[\e[1;34m\]\W\[\e[m\] \[\e[1;32m\]\$\[\e[m\] \[\e[1;32m\]'
elif [ -n "$SSH_CLIENT" ]; then
    PS1='\[\e[0;31m\](SSH)\[\e[m\]\[\e[1;37m\]\u@\h\[\e[m\] \[\e[1;34m\]\W\[\e[m\] \[\e[1;32m\]$(acpi -b | awk "{print \$4}" | cut -b1-3) $(__git_ps1 "(%s) ")\$\[\e[m\] \[\e[1;32m\]'
else
PS1="\n"${SH_WHITE}${TL_ANGLE}"("${SH_BLUE}"\u"${SH_WHITE}"@"${SH_RED}"\h"${SH_WHITE}")"${HORIZ_LINE}"("${SH_GREEN}"\$?"${SH_WHITE}")"${HORIZ_LINE}"("${SH_GREEN}${BATT}${SH_WHITE}")"${HORIZ_LINE}"("${SH_GREEN}"\@ \d"${SH_WHITE}")\n"${BL_ANGLE}${HORIZ_LINE}"("${SH_GREEN}"\w"${SH_WHITE}")"${HORIZ_LINE}"("${SH_YELLOW}${FILES_STAT}" files, "${FILES_SIZE}${SH_WHITE}")"${HORIZ_LINE}${SH_BLUE}${GIT_PS1}${SH_WHITE}"> "${SH_GREEN}
fi
trap 'echo -ne "\e[0m"' DEBUG

I'm currently at work and do not have the above PS1 line set on this machine. I'll update this answer with a screenshot of how it looks once I get back. But till then let me try to explain what this does:

  1. We source git's completion script. They have a similar one for zsh in the same location. This gives us the important __git_ps1 function for use in the PS1 line. This script outputs nothing if you're not in a git repository.
  2. Set some variables to define what kind of information about the git branches is shown on the PS1 line.
  3. I set a few variables to make it easy to manage the huge PS1 line I have. Those escape characters I have draw angluar lines on the console. The SH_* variables are shortvuts for colours. They are ANSI sequences which will cause the terminal to display coloured output. Finally we set some variables which are perform some actions, like get battery status and number of files in current directory.
  4. Here we define the actual PS1 lines. Since I use this setup globally, I first check to see if the current user is root or not. For root, I have a very simple PS1 line which displays the username in red. If you're connecting via SSH, you don't want such a complex line and hence, we again display something simpler. Else, display the complete PS1 line. It can take a while to understand this line. It's a 2-line PS1 which displays a whole lot of information.
  5. The last line, trap ... is required so that the colour settings don't bleed out into all the output. The last ${SH_GREEN} causes my input to be in green colour. However, I don't want all the output from all the programs to be coloured green too. Hence, the trap statement.
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.