Share your Bash prompts!
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.
Crossposts:
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.
Crossposts:
My shit is custom and rather elaborate.
From left-to-right:
/
:
commitThe code for this is on GitLab.
[username@host ~]$ >
Mine is just status(if not zero) and wd
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 '
C:>
/s
Convert the PWD value to use backslashes, too, for extra cursedness.
c/FoundSatan
HA, that's so cursed. I love it.
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
I use Starship
Same. I guess, this is the Starship thread now. My config:
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.)
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
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
Starships looks very interesting! I'm going to check it out. Thanks!
Yeah Iâm gonna check this out at work next week for sure.
Iâm using fish and the default is enough for anybody. đ
I love it! You get git and virtual env integration for free :)
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).
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.
You shouldnât just âdrop bash commands into itâ anyways. And if you really need it, bash is only one bash
away.
$
or #
, depending on whether I'm root.
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\]\$ '
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\] '
Note: The "$" prompt flashes like a typical cursor.
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.
computer /usr/share/ $>
My bash prompt is just me copying the prompt I have set on fish.
bash
# 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\]'
I have a small issue with this prompt though. Sometimes the ⯠ends up turning white for some reason.
Mine's pretty simple:
bash
## .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 [[ -z $branch ]]; then printf "${BLA}null${NC}" else printf "${CYA}$branch" fi } PS1='.\[$(_pwd)\] \[$BLA\]ă \[$MAG\]git\[$BLA\]:\[$(_branch)\] \n \[$NC$CYA\]\! \[$MAG\]\$ \[$NC\]' ## .inputrc set vi-ins-mode-string \1\e[34m\2.INS set vi-cmd-mode-string \1\e[33m\2.CMD
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
Are you dowloading and sourcing a file from the internet on your prompt? That sounds a bit scary!
Well, yeah, but it's git: https://raw.github.com/git/git/master/contrib/completion/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.
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.
bash
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='> '
Maybe you can find some inspiration here.
Mine is simple (inspired by Kali Linux, if that's even correct)
PS1='\[\033[0;32m\]âââ[\t] (\u@\h)-[\w]\nââ$ \[\033[0m\]'
export PS1="\[\e]0;\u@\h:\w\a\]\[\e[1;34m\]\u@\h:\w\[\e[0m\]\$ "
I am a simple man.
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 '
Mine's really simple; I just make the path bold and yellow:
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.
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)* ±