Share your Bash prompts!


I'm looking for inspiration for a custom Bash prompt^[1]^. I'd love to see yours! 😊 If possible, include both the prompt's PS1, and a screenshot/example of what it looks like.

::: spoiler References
1. Type: Documentation. Title: "Bash Reference Manual". Publisher: Gnu Project. Edition: 5.2. Published: 2022-09-19. Accessed: 2025-03-21T02:46Z. URI: gnu.org/software/bash/manual/h….
- Β§6.9 "Controlling the Prompt". URI: gnu.org/software/bash/manual/h….
:::


Crossposts:
- sh.itjust.works/post/34840017


Share your Bash prompts!


I'm looking for inspiration for a custom Bash prompt^[1]^. I'd love to see yours! 😊 If possible, include both the prompt's PS1, and a screenshot of what it looks like.

::: spoiler References
1. Type: Documentation. Title: "Bash Reference Manual". Publisher: Gnu Project. Edition: 5.2. Published: 2022-09-19. Accessed: 2025-03-21T02:46Z. URI: gnu.org/software/bash/manual/h….
- Β§6.9 "Controlling the Prompt". URI: gnu.org/software/bash/manual/h….
:::


Crossposts:
- sh.itjust.works/post/34840018


This entry was edited (2 months ago)
in reply to Kalcifer

I'm mainly using zsh but I have a backup bash prompt that closely mirrors it. It shows the return value of the previous command if it's non-zero and gives some information about the current git repository if there is one.
retval() {
        if [ $? -eq 0 ]; then
                printf ""
        else
                printf "\001\e[31m\002($?)\001\e[0m\002"
        fi
}

gitbranch() {
        if type git 2> /dev/null 1> /dev/null && git rev-parse 2> /dev/null 1> /dev/null ; then
                MODIFIED=""
                if [[ -n $(git status --short) ]]; then
                        MODIFIED=" M"
                fi
                BRANCH=$(git rev-parse --abbrev-ref HEAD)
                SHORTREF=$(git rev-parse --short HEAD)
                printf "\001\e[31m\002%s\001\e[0m\002(%s)\001\e[31m\002%s\001\e[0m\002" $BRANCH $SHORTREF $MODIFIED
        else
                echo -n ""
        fi
}

export PROMPT_DIRTRIM=3

PS1='$(retval)[\001\e[1;95m\002\u\001\e[0m\002@\h : \w $(gitbranch)] \$ '
PS2='> '
This entry was edited (2 months ago)
in reply to Kalcifer

Mine shows the user and host, git commit and branch, docker context and directory, color coded based on status of git:

[root@server001|G:19e526e@(master)|D:myContext|currentDir] $

## PS1 adapted from https://gist.github.com/xenji/2292341
ps1_generator() {
    # docker context inspect --format '{{ .Name }}'
    Time12h="\T"; Time12a="\@"; ShortHost="\h"; Username="\u";
    PathShort="\W"; PathFull="\w"; NewLine="\n"; Jobs="\j";
    test -f ~/.config/git-prompt.sh || \
        curl -L https://raw.github.com/git/git/master/contrib/compl
etion/git-prompt.sh \
             > ~/.config/git-prompt.sh
    source ~/.config/git-prompt.sh
    Color_Off="\[\033[0m\]"; IBlack="\[\033[0;90m\]"; BWhite="\[\03
3[1;37m\]"; BGreen="\[\033[1;32m\]";
    BIRed="\[\033[1;91m\]"; BIWhite="\[\033[1;97m\]"; BIPurple="\[\
033[1;95m\]"; BIBlue="\[\033[1;94m\]";
    GIT_PS1='$(git branch &>/dev/null;\
if [ $? -eq 0 ]; then \
  echo "$(echo `git status` | \grep "nothing to commit" > /dev/null
 2>&1; \
  DIRTY="$?"; \
  HEADREV=`git log --pretty=%h -n 1`; \
  echo -n "|G:'${BWhite}'$HEADREV"; \
  if [ "$DIRTY" -eq "0" ]; then \
    # @4 - Clean repository - nothing to commit
    echo "@'${BGreen}'"$(__git_ps1 "(%s)"); \
  else \
    # @5 - Changes to working tree
    echo "'${BIBlue}'@'${BIRed}'"$(__git_ps1 "{%s}"); \
  fi)'${Color_Off}'"; \
else \
  # @2 - Prompt when not in GIT repo
  echo ""; \
fi)'
    if docker context inspect >/dev/null 2>&1; then
        DOCKER_PS1='|D:'${BIBlue}'$(docker context inspect --format
 "{{ .Name }}")'${Color_Off}
    fi
    USER_PS1=${BIPurple}${Username}'@'${ShortHost}${Color_Off}
    PATH_PS1='|'${BWhite}${PathShort}${Color_Off}
    export PS1='['${USER_PS1}${GIT_PS1}${DOCKER_PS1}${PATH_PS1}'] $
 '
}
ps1_generator && unset -f ps1_generator
This entry was edited (2 months ago)
in reply to Kalcifer

My shit is custom and rather elaborate.

Screenshot of the prompt

From left-to-right:

  • name@server-name
  • Uptime (multiplied by 10 and rounded to the nearest integer to save space)
  • Percentage disk space available on /
  • Number on established network connections
  • Git branch : commit
  • Python virtualenv
  • [new line]
  • date and time

The code for this is on GitLab.

This entry was edited (2 months ago)
⇧