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:

    • hallettj@leminal.spaceEnglish
      102·
      4 months ago

      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
      3·
      4 months ago

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

    • Ephera@lemmy.mlEnglish
      181·
      4 months ago

      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.)

      • nelson@lemmy.world
        3·
        4 months ago

        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

    • tankplanker@lemmy.world
      2·
      4 months ago

      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

    • billwashere@lemmy.worldEnglish
      1·
      4 months ago

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

  • mbirth@lemmy.ml
    193·
    4 months ago

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

    • Azzk1kr@feddit.nlEnglish
      4·
      4 months ago

      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
        31·
        4 months ago

        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.

    • Drew@sopuli.xyz
      3·
      4 months ago

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

    • PlutoniumAcid@lemmy.world
      33·
      4 months ago

      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
        9·
        4 months ago

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

  • golden_zealot@lemmy.mlEnglish
    111·
    4 months ago

    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\]\$ '

  • Xanza@lemm.eeEnglish
    10·
    4 months ago
    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\]\\$ "
    
        • billwashere@lemmy.worldEnglish
          3·
          4 months ago

          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.

  • Rivalarrival@lemmy.todayEnglish
    81·
    4 months ago

    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.

  • Mike Wooskey@lemmy.thewooskeys.comEnglish
    6·
    4 months ago

    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
      8·
      4 months ago

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

        • teawrecks@sopuli.xyz
          2·
          4 months ago

          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.

          • Goun@lemmy.ml
            3·
            4 months ago

            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…

  • nore {she/her}@sh.itjust.worksEnglish
    6·
    4 months ago

    Mine’s pretty simple:

    ## .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
    
  • DeuxChevaux@lemmy.world
    5·
    4 months ago

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

  • catloaf@lemm.eeEnglish
    5·
    4 months ago
    export PS1="\[\e]0;\u@\h:\w\a\]\[\e[1;34m\]\u@\h:\w\[\e[0m\]\$ "
    

    I am a simple man.

  • Asparagus0098@sh.itjust.worksEnglish
    4·
    4 months ago

    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\]'
    

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

  • beirdobaggins@lemmy.world
    4·
    4 months ago

    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$ ’

  • z3rOR0ne@lemmy.ml
    4·
    4 months ago

    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 '