this post was submitted on 22 Mar 2025
15 points (89.5% liked)

Linux

6620 readers
184 users here now

A community for everything relating to the GNU/Linux operating system

Also check out:

Original icon base courtesy of lewing@isc.tamu.edu and The GIMP

founded 2 years ago
MODERATORS
 

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: https://www.gnu.org/software/bash/manual/html_node/index.html.

Crossposts:

top 8 comments
sorted by: hot top controversial new old
[โ€“] muntedcrocodile@lemm.ee 3 points 1 day ago (2 children)
[โ€“] quincunx@lemm.ee 3 points 1 day ago (1 children)
[โ€“] muntedcrocodile@lemm.ee 2 points 1 day ago

U can fish on any Linux distro. Most major distros have binaries but those that don't u can easily build it with cargo.

Tldr yes.

[โ€“] DmMacniel@feddit.org 2 points 1 day ago

Same, it's just more friendly:)

[โ€“] Kissaki@programming.dev 2 points 1 day ago

I'm usually not using bash locally, and remotely don't change the prompt, but Starship works in bash too.

I use Nushell with Starship (cross platform prompt) in Windows Terminal.

~
nu โฏ                                  took 52ms

Path above prompt, prompt with shell name and a character, and on the right side how long the previous command took. The Character changes color from green to red when the last command exited with a non-0/-success exit code.

In a git repo folder it shows git info too - the branch symbol won't show here because here is not a nerd font with symbols; I'll add a screenshot:

C:\dev\dotnet\meercat-monitor on ๏˜ main [?]
nu โฏ                                                                took 1ms 

collapsed inline media

Starship can show a bunch of status/state information for various tools, package managers, docker, etc.

I wouldn't show my PROMPT_COMMAND, but it's a nu closure so not really comparable to bash. But as I said, Starship works with Bash too.

[โ€“] sxan@midwest.social 2 points 1 day ago

Not Bash, but zsh.

collapsed inline media

The host is there only because I'm usually logged in to 7 machines at once. The right prompt is the bare minimum path context, and the command # for easier !-re-execute; it disappears if the command gets long enough.

There's a bare minimum of cruft; no 2-line prompts, minimum verbosity in the prompt itself, because it's otherwise just noise that interferes with the output of whatever I'm doing and takes up space. It's especially important if I'm logged in via termux on my phone or something, where space is at a premium. What am I saying? Space is always at a premium.

$PS1 is

%{$fg[green]%}%m %{$fg[blue]%}ยป%{$reset_color%}

$RPROMPT is

%{$fg[green]%}%(5~|%-1~/โ€ฆ/%3~|%4~) %{$fg[yellow]%}%h%{$reset_color%}
[โ€“] chris@lemmy.grey.fail 1 points 1 day ago
[โ€“] NostraDavid@programming.dev 1 points 1 day ago* (last edited 1 day ago)

You can see here my theme with autodetect of Python (I work a lot in Python). The orange bit is the error code returned by the previous command. Git is supported as well, and looks pretty much like powerline-gitstatus, as you'll read about below.

collapsed inline mediaNostraDavid's Starship theme, based on powerline-status + powerline-gitstatus

First, lets make Bash a little better:

# throw this in your `~/.bashrc`, and then `source ~/.bashrc` for it to take effect, or just restart your terminal.

# == shopts ==
# https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html
shopt -s autocd         # cd into folder without cd, so 'dotfiles' will cd into the folder
shopt -s cdspell        # attempt spelling correcting on folders
shopt -s direxpand      # expand a partial dir name
shopt -s checkjobs      # stop shell from exit when there's jobs running
shopt -s dirspell       # attempt spelling correcting on folders
shopt -s expand_aliases # aliases are expanded
shopt -s histappend     # append to the history file, don't overwrite it
shopt -s histreedit     # lets your re-edit old executed command
shopt -s histverify     # I'm confused.
shopt -s hostcomplete   # performs completion when a word contains an '@'
shopt -s cmdhist        # save multiple-line command in single history entry
shopt -u lithist        # multi-lines are saved with embedded newlines rather than semicolons; explictly unset
shopt -s checkwinsize # update LINES and COLUMNS to fit output

Autocd is a big one here, cdspell and direxpand as well. Ensures I don't need Zsh for the same experience. With Zsh I'd just get annoyed by small stuff like having to wrap things in quotes (I think pip install some_lib[some_extra] works in Bash, but not in Zsh And Ohmyzsh just felt it kept slowing things down, so I actually dislike Zsh ^(please don't kill me) >_>

Anyway, I based this on powerline-status + powerline-gitstatus (if you want to use that instead (no, my config doesn't work), just sudo apt install powerline-status powerline-gitstatus - DO NOT USE THE PYPI VERSION (it's too outdated, and a pain to install)) because I had issues with finding the right combination of my configuration and which libraries to install for bash - there are too damn many: powerline-bash, powerline-status, powerline-rs, powerline-go, etc, etc. And they all do things just that little bit different.

Anyway, here is my ~/.config/starship.toml (archive1, archive2). It's a little long, and can probably be shortered, but that might break something again, and I'm not willing to risk anything right now.

https://gist.github.com/NostraDavid/675a0706716b98816fd2809560ffe42c