As I use bash basically for everything, I wanted my prompt to be as basic as possible (No newlines, fixed format) and compatible across my PC, Laptop as well as server and Pi via SSH.
Therefore, it's a simple __prompt_command function in my .bashrc (nearly) everywhere.
It's structured as:
- Terminal/TTY number in orange
- Username in green (for roots .bashrc it's red)
- Hostname in green
- Current working dir in blue
- Current git branch in yellow (if in a git repo)
- Exit code in red (if not 0)
Looks like this:

I used some prompt generator to get the variables and colors right, and then wrapped parts in if-then where needed.
The result is:
__prompt_command() {
local EXIT="$?"
PS1="\[\033[38;5;216m\](\l)\[$(tput sgr0)\] \[$(tput sgr0)\]\[\033[38;5;85m\]\u@\H\[$(tput sgr0)\]:\[$(tput sgr0)\]\[\033[38;5;68m\][\w\[$(tput sgr0)\]"
local GIT_BRANCH="$(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/')"
if ! [[ -z "$GIT_BRANCH" ]]; then
PS1+=":\[$(tput sgr0)\]\[\033[38;5;142m\]${GIT_BRANCH}\[$(tput sgr0)\]"
fi
PS1+="\[\033[38;5;68m\]]\[$(tput sgr0)\]"
if [ $EXIT != 0 ]; then
PS1+=":\[$(tput sgr0)\]\[\033[38;5;1m\]${EXIT}\[$(tput sgr0)\]"
fi
PS1+="\\$ \[$(tput sgr0)\]"
}
In practice I use every aspect of it. The terminal number is useful for sorting, the username is needed especially when handling e.g. git or db servers with specific users, and one has a terminal as the user, one as root and one as normal user. Hostname is obviously important with multiple ssh sessions open all the time (especially without terminal emulator titles). Typing pwd all the time would be very tedious, as I only move around my system in bash, so having it in the prompt is nice. If I am in a git repo I also need to know the branch and otherwise it's not displayed anyway. Quickly identifying silently failed commands is tedious, especially because issuing one command overwrites $? again, so 'logging' it if necessary is nice.