From 84778882e8f692010487dc93e7c73af9512ef895 Mon Sep 17 00:00:00 2001 From: Quinn Date: Tue, 18 Nov 2025 17:12:01 +0100 Subject: [PATCH] rework the bash PS1 prompt --- .bashrc | 55 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/.bashrc b/.bashrc index 8ee9b22..dbcd779 100644 --- a/.bashrc +++ b/.bashrc @@ -9,20 +9,6 @@ [[ $- != *i* ]] && return [[ -z "${PS1-}" ]] && return -# wrapper for lazily loading __git_ps1 whenever it is actually needed -_lazy_git_ps1() { - if [[ -z $__GIT_PROMPT_SOURCED ]]; then - . /usr/share/bash-completion/completions/git &>/dev/null - . /usr/share/git/completion/git-prompt.sh &>/dev/null - if [ -d .git ] || git worktree list &>/dev/null; then - export __GIT_PROMPT_SOURCED=1 - __git_ps1 "$@" - fi - else - __git_ps1 "$@" - fi -} - # lazy loading of ssh agents _lazy_ssh() { if [[ -z $SSH_AUTH_SOCK ]]; then @@ -43,16 +29,37 @@ _make() { -e "s/^.*error.*$/\x1b[31m&\x1b[0m/I" >&2) } -# -# envs -# -# set PS1 -PS1='\[\033[?25h\]' # show cursor -PS1="$PS1"'\[\033[01;35m\]\u@\h' # user@host -PS1="$PS1"'\[\033[00m\]:' # separator -PS1="$PS1"'\[\033[01;34m\]\w' # working directory -PS1="$PS1"'\[\033[01;93m\]$(_lazy_git_ps1)' # github branch -PS1="$PS1"'\[\033[00m\]\$ ' # shell sign +# lazily loads the git utilities, to prevent slowdowns +__lazy_git_ps1() { + if [ -z "$__GIT_PROMPT_SOURCED__" ]; then + if [ -d .git ] || git worktree list &>/dev/null; then + . /usr/share/bash-completion/completions/git &>/dev/null + . /usr/share/git/completion/git-prompt.sh &>/dev/null + export __GIT_PROMPT_SOURCED__=1 + __git_ps1 + fi + else __git_ps1; fi + return 0 +} + +# regenerates the PS1 prompt +__regenprompt() { + local err=$? # acquire the error code of the last executed command + local git=$(__lazy_git_ps1) + + if [ $err -ne 0 ]; then + err="\033[s\033[$((COLUMNS - 4))G${err}\033[u" + else unset err; fi + + PS1="\[\033[?25h\]" # show cursor + PS1="$PS1\[\033[01;35m\]\u@\h" # user@host + PS1="$PS1\[\033[00m\]:" # separator + PS1="$PS1\[\033[01;34m\]\w" # working directory + PS1="$PS1\[\033[01;93m\]$git" # git branch + PS1="$PS1\[\033[01;31m\]\[$err\]" # error code + PS1="$PS1\[\033[00m\]\$ " # shell sign +} +PROMPT_COMMAND=__regenprompt # history settings HISTSIZE=2048