Share your Bash prompts!
from Kalcifer@sh.itjust.works to linux@lemmy.ml on 22 Mar 02:48
https://sh.itjust.works/post/34840018

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.

References

1. Type: Documentation. Title: “Bash Reference Manual”. Publisher: Gnu Project. Edition: 5.2. Published: 2022-09-19. Accessed: 2025-03-21T02:46Z. URI: www.gnu.org/software/bash/manual/…/index.html. - §6.9 “Controlling the Prompt”. URI: www.gnu.org/…/Controlling-the-Prompt.html.


Crossposts:

#linux

threaded - newest

mike_wooskey@lemmy.thewooskeys.com on 22 Mar 03:05 next collapse

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
Goun@lemmy.ml on 22 Mar 06:41 collapse

Are you dowloading and sourcing a file from the internet on your prompt? That sounds a bit scary!

mike_wooskey@lemmy.thewooskeys.com on 22 Mar 11:52 collapse

Well, yeah, but it’s git: raw.github.com/git/git/master/…/git-prompt.sh

My thinking is that I trust git on my computer, so I trust downloading from their repo.

But you’re right. I should revisit this and see if it’s even necessary.

teawrecks@sopuli.xyz on 22 Mar 17:17 collapse

Is this running in your rc (i.e. every single time you open a terminal)? Even if it’s safe, I’d be annoyed by any delay.

mike_wooskey@lemmy.thewooskeys.com on 22 Mar 19:26 next collapse

It is in my .bashrc, but any delay is not noticeable.

teawrecks@sopuli.xyz on 22 Mar 21:23 collapse

Ah that’s fair, I didn’t look closely

Goun@lemmy.ml on 22 Mar 21:02 collapse

Yeah, its checking if the file exists first, so it’s not doing it all the time.

My worry is more related to repos takeovers or hacks. This is pretty hidden, so it could be easy to even forget it’s there, probably not the worst, but still…

Xanza@lemm.ee on 22 Mar 03:08 next collapse

export PS1="\[\e[31m\][\[\e[m\]\[\e[38;5;172m\]\u\[\e[m\]@\[\e[38;5;153m\]\h\[\e[m\] \[\e[38;5;214m\]\W\[\e[m\]\[\e[31m\]]\[\e[m\]\\$ "
ikidd@lemmy.world on 22 Mar 03:43 collapse

That’s a warcrime.

PlutoniumAcid@lemmy.world on 22 Mar 16:01 collapse

How so? What does this do?

billwashere@lemmy.world on 22 Mar 18:52 collapse

Best I can tell is it’s a normal `username@hostname current_directory$ sorta prompt with some coloring: • Red for the square brackets • Orange (color 172) for the username • Light blue (color 153) for the hostname • Amber (color 214) for the current working directory

Other than being hard to read from the embedded coloring I’m not sure why this is a war crime.

MadMadBunny@lemmy.ca on 22 Mar 03:12 next collapse

C:\>

/s

Kalcifer@sh.itjust.works on 22 Mar 03:28 next collapse

HA, that’s so cursed. I love it.

hallettj@leminal.space on 22 Mar 03:48 next collapse

Do you have anything to check whether the current directory is under /media/ or /mnt/ so that you can change the drive letter according to a deterministic assignment?

/s

jcg@halubilo.social on 24 Mar 10:32 collapse

Convert the PWD value to use backslashes, too, for extra cursedness.

MadMadBunny@lemmy.ca on 24 Mar 13:02 collapse

c/FoundSatan

wwwgem@lemmy.ml on 22 Mar 03:23 next collapse

Maybe you can find some inspiration here.

hallettj@leminal.space on 22 Mar 03:52 next collapse

I use Starship

Ephera@lemmy.ml on 22 Mar 06:11 next collapse

Same. I guess, this is the Starship thread now. My config:
<img alt="" src="https://lemmy.ml/pictrs/image/09ef9c4d-bd4e-4baa-b69d-fbc6c1b6ad93.png">

I adapted it from the Gruvbox Rainbow theme.
I can post my config, if anyone wants specifically that. (It does kind of assume a light background, though.)

fluckx@lemmy.world on 22 Mar 08:41 collapse

I like the timer and the error icon on a fail. I can’t recall how often I think: damn this is taking too long. I should’ve timed the command

mike_wooskey@lemmy.thewooskeys.com on 22 Mar 12:09 next collapse

Starships looks very interesting! I’m going to check it out. Thanks!

billwashere@lemmy.world on 22 Mar 17:11 next collapse

Yeah I’m gonna check this out at work next week for sure.

tankplanker@lemmy.world on 22 Mar 17:57 collapse

<img alt="" src="https://lemmy.world/pictrs/image/691c40fc-3b01-4e92-95ce-3dd53da6ed78.png">

Another starship user. Mostly want it to summarise useful stuff for folders pulled from git or whatever so it’s pretty plain rest of the time. I use the same on all my boxes

catloaf@lemm.ee on 22 Mar 04:04 next collapse

export PS1="\[\e]0;\u@\h:\w\a\]\[\e[1;34m\]\u@\h:\w\[\e[0m\]\$ "

I am a simple man.

golden_zealot@lemmy.ml on 22 Mar 05:00 next collapse

Prompt is pretty simple, mainly just adjusted coloring and added a timestamp.

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;36;01m\]\t \[\033[01;32m\]\u@\[\033[01;37;01m\]\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$ ’

<img alt="" src="https://lemmy.ml/pictrs/image/7b310a8e-9e6f-4519-b604-fdaaf597d4c9.png">

DeuxChevaux@lemmy.world on 22 Mar 05:34 next collapse

Mine is simple (inspired by Kali Linux, if that’s even correct)
PS1=‘\[\033[0;32m\]┌──[\t] (\u@\h)-[\w]\n└─$ \[\033[0m\]’

Rivalarrival@lemmy.today on 22 Mar 06:29 next collapse

I didn’t even know I needed to edit my prompt, but now I don’t know how I have lived with it for so long.

z3rOR0ne@lemmy.ml on 22 Mar 07:35 next collapse

I use zsh, but my old Bash prompt looks almost the same as my Zsh prompt. Sorry, no screenshot, but here’s the code:

export PS1='\[\033[01;34m\][\[\033[01;37m\] \W\[\033[01;34m\]]\$\033[01;34m\] $(git branch 2>/dev/null | grep '^*' | colrm 1 2)\n\033[01;34m└─>\033[37m '
nore@sh.itjust.works on 22 Mar 07:49 next collapse

Mine’s pretty simple:

<img alt="" src="https://sh.itjust.works/pictrs/image/979ce20e-320f-45b3-9ae3-617a5105f849.png">

## .bashrc
export BLA=$(tput setaf 0) # Black
export RED=$(tput setaf 1) # Red
export GRE=$(tput setaf 2) # Green
export YEL=$(tput setaf 3) # Yellow
export BLU=$(tput setaf 4) # Blue
export MAG=$(tput setaf 5) # Magenta
export CYA=$(tput setaf 6) # Cyan
export WHI=$(tput setaf 7) # White

export BOL=$(tput bold)    # Bold
export ITA=$(tput sitm)    # Italic
export UL=$(tput smul)     # Underline
export NC=$(tput sgr0)     # No color & format

_branch() {
    local branch=$(__git_ps1 "%s")
    if [[ -
mbirth@lemmy.ml on 22 Mar 08:34 next collapse

I’m using fish and the default is enough for anybody. 😁

Azzk1kr@feddit.nl on 22 Mar 10:35 next collapse

Fish is a really great shell for daily use. There’s so much built in, its scripting language is better (not portable though if someone else does not have fish).

mbirth@lemmy.ml on 22 Mar 11:07 collapse

By now, enough people have fish that you can basically assume those scripts being “portable”. Far better than nushell or xonsh - which are both pretty advanced shells but other tools lack support for them, e.g. Midnight Commander.

marauding_gibberish142@lemmy.dbzer0.com on 23 Mar 01:10 collapse

Am I a loser if I stick to POSIX?

crmsnbleyd@sopuli.xyz on 22 Mar 12:31 next collapse

I love it! You get git and virtual env integration for free :)

PlutoniumAcid@lemmy.world on 22 Mar 15:56 collapse

I recently started with fish and dislike that I can’t drop bash commands into it because it parses differently. That is enough to annoy me to uninstall.

mbirth@lemmy.ml on 22 Mar 18:17 collapse

You shouldn’t just “drop bash commands into it” anyways. And if you really need it, bash is only one bash away.

winety@lemmy.zip on 22 Mar 10:16 next collapse

Mine’s really simple; I just make the path bold and yellow:

<img alt="My Bash prompt" src="https://lemmy.zip/api/v3/image_proxy?url=https%3A%2F%2Fi.imgur.com%2FrLkjTZY.png">

What I like to do is change the colour depending on the machine I ssh into, e.g. make the path red on my Raspberry Pi.

djehuti@programming.dev on 22 Mar 13:27 next collapse

$ or # , depending on whether I’m root.

Termight@lemmy.ml on 22 Mar 14:27 next collapse

I like Liquid Prompt[1] (A useful adaptive prompt for Bash & Zsh) Examples:

θ70° 2z termight@zone51:~ $ vi .bashrc

θ71° 2z termight@zone51:~/docker/invidious master(+34/-17)* ±

[1] github.com/liquidprompt/liquidprompt

Asparagus0098@sh.itjust.works on 22 Mar 17:44 next collapse

My bash prompt is just me copying the prompt I have set on fish.

# Prompt
green=$'\e[38;5;2m'
bright_red=$'\e[38;5;9m'
bright_green=$'\e[38;5;10m'
reset=$'\e[0m'

prompt_command()
{
    local exit_status=$?

    if [[ $exit_status != 0 ]]; then
        exit_color=$bright_red
        exit_prompt=" [$exit_status]"
    else
        exit_color=$bright_green
        exit_prompt=""
    fi
}

PROMPT_COMMAND=prompt_command
PS1='\[$green\]\w\[$exit_color\]$exit_prompt\n❯ \[$reset\]'

<img alt="" src="https://sh.itjust.works/pictrs/image/d0a05391-48e3-4537-afc3-77879d39eb45.jpeg">

I have a small issue with this prompt though. Sometimes the ❯ ends up turning white for some reason.

<img alt="" src="https://sh.itjust.works/pictrs/image/e54ebe75-f83a-40a5-a8c2-6e50fbd22aba.jpeg">

TheFadingOne@feddit.org on 22 Mar 21:38 next collapse

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
richardisaguy@lemmy.world on 23 Mar 09:54 next collapse

computer /usr/share/ $>

SinkingLotus@lemmy.world on 23 Mar 11:12 next collapse

PS1='\[\e[1m\][\[\e[92m\]\u\[\e[0m\]@\[\e[96;1;3m\]\h\[\e[0;1m\]]\[\e[0m\] \[\e[1m\][\[\e[38;5;226m\]\w\[\e[39m\]]\[\e[0m\] \[\e[97;1m\]~\[\e[92;5m\]\$\[\e[0m\] ’

<img alt="image" src="https://i.imgur.com/85JqSa1.png">

Note: The “$” prompt flashes like a typical cursor.

beirdobaggins@lemmy.world on 23 Mar 21:34 next collapse

Mine shows the full path and a new line for commands.

It will also print the exit code of the last command in red above the prompt, if the exit code is not 0.

PS1='$(ec=“$?”; if [ $ec -gt 0 ]; then echo -e “\n”[\e[91m]"exit code: $ec"[\e[0m]; fi)\n[\e[92m]\u[\e[38;5;213m]@[\e[38;5;39m]\h[\e[0m]:$PWD\n$ ’

<img alt="" src="https://lemmy.world/pictrs/image/3a76ba1a-fe30-4cbb-bc90-39823b48c152.jpeg">

Tiger_Man_@lemmy.blahaj.zone on 24 Mar 09:54 next collapse

Mine is just status(if not zero) and wd

questionAsker@lemmy.ml on 24 Mar 18:09 next collapse

[username@host ~]$ >

danielquinn@lemmy.ca on 24 Mar 19:09 next collapse

My shit is custom and rather elaborate.

<img alt="Screenshot of the prompt" src="https://lemmy.ca/pictrs/image/f6d2819e-ec10-42ef-a224-e3772e728637.png">

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.

pewpew@feddit.it on 26 Mar 13:00 collapse

<img alt="" src="https://feddit.it/pictrs/image/01636566-911d-44ee-a13d-fbd82f2c6526.png"> Ok after viewing your prompts I noticed that mine is kinda lame