You stare at your prompt all day every day, so we might as well make it look a little nicer, right?

I recently migrated to using a PROMPT_COMMAND, which allows you to get very creative with your prompt, and wanted to share it with y’all.

Above you can see how my prompt looks like.

In order, we have,

  • a checkmark if last status was 0, x otherwise
  • date/time when the prompt was printed (useful to time things if you forget to wrap them with time)
  • hostname
  • user
  • current umask
  • current path
  • actual command prompt

The first line that includes status and date was my most recent addition, and so far I’ve been enjoying it.

How to set this up⌗

So let’s take a look at how to make your shell look like that.

Start by creating or opening your ~/.bashrc.

Then create a method that will generate your prompt. I call mine __prompt:

__prompt() {
  local EXIT="$?"

  local RESET="\[\033[00;00m\]"

  local HOST="\[\033[00;31m\]\h${RESET}"
  local USER="\[\033[00;32m\]\u${RESET}"
  local PATH="\[\033[00;33m\]\w${RESET}"
  local UMASK="\[\033[00;34m\]$(umask)${RESET}"
  local PROMPT="\[\033[01;00m\]$ ${RESET}"
  local DT="\[\033[02;37m\]$(/bin/date "+%Y-%m-%d %H:%M:%S")${RESET}"

  local STATUS=
  [[ ${EXIT} != 0 ]] &&
    STATUS="\[\033[00;31m\]x${RESET}" ||
    STATUS="\[\033[00;32m\]✓${RESET}"

  PS1="${STATUS} ${DT}\n${HOST} ${USER} ${UMASK} ${PATH}\n${PROMPT}"
}

and finally assign your custom __prompt command to PROMPT_COMMAND:

PROMPT_COMMAND=__prompt

That’s it!

Source your .bashrc or restart your terminal to test it out: . ~/.bashrc

Enjoy