git.lirion.de

Of git, get, and gud

aboutsummaryrefslogtreecommitdiffstats
path: root/.bash/prompt.bash
diff options
context:
space:
mode:
Diffstat (limited to '.bash/prompt.bash')
-rw-r--r--.bash/prompt.bash186
1 files changed, 155 insertions, 31 deletions
diff --git a/.bash/prompt.bash b/.bash/prompt.bash
index c34e557..6ac081b 100644
--- a/.bash/prompt.bash
+++ b/.bash/prompt.bash
@@ -4,61 +4,148 @@
# ----- PROMPT COLOURS ----- #
fgcolor () {
#echo "\\[\\033[38;5;"$1"m\\]"
- echo "\033[38;5;${1}m"
+ printf '\033[38;5;%bm' "$1"
+}
+fgtcolor () {
+ printf '\033[38;2;%b;%b;%bm' "$1" "$2" "$3"
}
bgcolor () {
#echo "\\[\\033[48;5;"$1"m\\]"
- echo "\033[48;5;${1}m"
+ printf '\033[48;5;%bm' "$1"
}
# This is Solaris bash compatible, so we cannot use + here for "at least once) but instead use the
# stupid old asterisk (*). Well, here hetting "no digits" practically won't hurt.
MYUID="$(id|sed 's/.*uid=\([0-9]*\).*/\1/g')";export MYUID
# ...because "empty" will hit the "any" condition in the end :)
+if [ -r '/etc/os-release' ]; then
+ OSMAJVER="$(grep '^VERSION_ID' /etc/os-release 2>/dev/null|awk -F= '{print $NF}'|sed 's/"//g'|awk -F\. '{print $1}')"
+fi
case "$MYUID" in
0)
+ FGC1="fgcolor 88"
case "$OSNAME" in
- debian) FGC1="fgcolor 88";FGC2="fgcolor 25";FGC3="fgcolor 38";;
- arch) FGC1="fgcolor 88";FGC2="fgcolor 24";FGC3="fgcolor 240";;
- redhat|fedora) FGC1="fgcolor 160";FGC2="fgcolor 88";FGC3="fgcolor 203";;
+ debian)
+ # Debian 12 = emerald
+ if [ "$OSMAJVER" -ge 12 ];then
+ FGC3="fgcolor 36";FGC2="fgtcolor 155 15 64"
+ else
+ FGC3="fgcolor 38";FGC2="fgtcolor 155 15 64"
+ fi
+ ;;
+ arch) FGC2="fgcolor 24";FGC3="fgcolor 240";;
+ redhat|rhel) FGC1="fgcolor 23";FGC2="fgcolor 88";FGC3="fgcolor 203";;
+ fedora) FGC1="fgcolor 160";FGC2="fgcolor 88";FGC3="fgcolor 203";;
# with the advent of Rocky, we'll match the time to SUSE's blue and the hostname to
# the colour of Geeko:
- #*suse|aix) FGC1="fgcolor 88";FGC2="fgcolor 22";FGC3="fgcolor 41";;
- *sles*) FGC1="fgcolor 88";FGC2="fgcolor 22";FGC3="fgcolor 83";;
- *suse|aix) FGC1="fgcolor 88";FGC2="fgcolor 30";FGC3="fgcolor 83";;
- *centos*) FGC1="fgcolor 88";FGC2="fgcolor 25";FGC3="fgcolor 208";;
- *solaris) FGC1="fgcolor 88";FGC2="fgcolor 31";FGC3="fgcolor 124";;
- ubuntu) FGC1="fgcolor 88";FGC2="fgcolor 130";FGC3="fgcolor 215";;
- rasp*) FGC1="fgcolor 88";FGC2="fgcolor 253";FGC3="fgcolor 126";;
- rocky) FGC1="fgcolor 88";FGC2="fgcolor 22";FGC3="fgcolor 41";;
- *) FGC1="fgcolor 88";FGC2="fgcolor 240";FGC3="fgcolor 244";;
+ #*suse|aix) FGC2="fgcolor 22";FGC3="fgcolor 41";;
+ *sles*) FGC2="fgcolor 22";FGC3="fgcolor 83";;
+ *suse*)
+ case "$OSNAME" in
+ *leap) FGC2="fgcolor 214";FGC3="fgcolor 83";;
+ *) FGC2="fgcolor 30";FGC3="fgcolor 83";;
+ esac
+ ;;
+ aix) FGC2="fgcolor 238";FGC3="fgcolor 83";;
+ *centos*) FGC2="fgcolor 25";FGC3="fgcolor 208";;
+ *solaris) FGC2="fgcolor 63";FGC3="fgcolor 124";;
+ ubuntu)
+ if [ "$OSMAJVER" -ge 24 ];then
+ if printf "%b" "$TERM"|grep -E 'xterm|256' > /dev/null;then
+ FGC2="fgcolor 125";FGC3="fgcolor 202"
+ else
+ FGC2="fgcolor 53";FGC3="fgcolor 184"
+ fi
+ elif [ "$OSMAJVER" -ge 22 ];then
+ if printf "%b" "$TERM"|grep -E 'xterm|256' > /dev/null;then
+ FGC2="fgcolor 208";FGC3="fgcolor 89"
+ else
+ FGC2="fgcolor 184";FGC3="fgcolor 53"
+ fi
+ else
+ FGC2="fgcolor 130";FGC3="fgcolor 215"
+ fi
+ ;;
+ rasp*) FGC2="fgcolor 253";FGC3="fgcolor 125";;
+ rocky) FGC2="fgcolor 240";FGC3="fgcolor 41";;
+ alma*) FGC1="fgcolor 28";FGC2="fgcolor 88";FGC3="fgcolor 39";;
+ sunos) FGC2="fgcolor 75";FGC3="fgcolor 130";;
+ nobara) FGC2="fgcolor 133";FGC3="fgcolor 63";;
+ *) FGC2="fgcolor 240";FGC3="fgcolor 244";;
esac
+ if [ -n "$TERMUX_APK_RELEASE" ]; then
+ if [ "$TERMUX_APK_RELEASE" == "F_DROID" ]; then
+ FGC2="fgcolor 27";FGC3="fgcolor 35"
+ fi
+ fi
;;
*)
+ FGC2="fgcolor 253"
case "$OSNAME" in
- debian) FGC1="fgcolor 25";FGC2="fgcolor 253";FGC3="fgcolor 38";;
- arch) FGC1="fgcolor 24";FGC2="fgcolor 253";FGC3="fgcolor 239";;
- redhat|fedora) FGC1="fgcolor 88";FGC2="fgcolor 253";FGC3="fgcolor 203";;
- #*suse|aix) FGC1="fgcolor 22";FGC2="fgcolor 253";FGC3="fgcolor 41";;
- *sles*) FGC1="fgcolor 22";FGC2="fgcolor 253";FGC3="fgcolor 83";;
- *suse|aix) FGC1="fgcolor 30";FGC2="fgcolor 253";FGC3="fgcolor 83";;
- *centos*) FGC1="fgcolor 25";FGC2="fgcolor 253";FGC3="fgcolor 208";;
- *solaris) FGC1="fgcolor 31";FGC2="fgcolor 253";FGC3="fgcolor 124";;
- ubuntu) FGC1="fgcolor 130";FGC2="fgcolor 253";FGC3="fgcolor 215";;
- rasp*) FGC1="fgcolor 53";FGC2="fgcolor 253";FGC3="fgcolor 126";;
- rocky) FGC1="fgcolor 22";FGC2="fgcolor 253";FGC3="fgcolor 41";;
- *) FGC1="fgcolor 240";FGC2="fgcolor 253";FGC3="fgcolor 244";;
+ debian)
+ if [ "$OSMAJVER" -ge 12 ];then
+ FGC1="fgtcolor 155 15 64";FGC3="fgcolor 36"
+ else
+ FGC1="fgtcolor 155 15 64";FGC3="fgcolor 38"
+ fi
+ ;;
+ arch) FGC1="fgcolor 24";FGC3="fgcolor 239";;
+ redhat|rhel) FGC1="fgcolor 23";FGC3="fgcolor 88";;
+ fedora) FGC1="fgcolor 88";FGC3="fgcolor 203";;
+ #*suse|aix) FGC1="fgcolor 22";FGC3="fgcolor 41";;
+ *sles*) FGC1="fgcolor 22";FGC3="fgcolor 83";;
+ *suse*)
+ case "$OSNAME" in
+ *leap) FGC1="fgcolor 214";FGC3="fgcolor 83";;
+ *) FGC1="fgcolor 30";FGC3="fgcolor 83";;
+ esac
+ ;;
+ aix) FGC1="fgcolor 238";FGC3="fgcolor 83";;
+ *centos*) FGC1="fgcolor 25";FGC3="fgcolor 208";;
+ *solaris) FGC1="fgcolor 63";FGC3="fgcolor 124";;
+ ubuntu)
+ if [ "$OSMAJVER" -ge 24 ];then
+ if printf "%b" "$TERM"|grep -E 'xterm|256' > /dev/null;then
+ FGC1="fgcolor 125";FGC3="fgcolor 202"
+ else
+ FGC1="fgcolor 53";FGC3="fgcolor 184"
+ fi
+ elif [ "$OSMAJVER" -ge 22 ];then
+ if printf "%b" "$TERM"|grep -E 'xterm|256' > /dev/null;then
+ FGC1="fgcolor 89";FGC3="fgcolor 208"
+ else
+ FGC1="fgcolor 53";FGC3="fgcolor 184"
+ fi
+ else
+ FGC1="fgcolor 130";FGC3="fgcolor 215"
+ fi
+ ;;
+ rasp*) FGC1="fgcolor 52";FGC3="fgcolor 125";;
+ rocky) FGC1="fgcolor 240";FGC3="fgcolor 41";;
+ alma*) FGC1="fgcolor 124";FGC2="fgcolor 229";FGC3="fgcolor 39";;
+ sunos) FGC1="fgcolor 75";FGC3="fgcolor 130";;
+ nobara) FGC1="fgcolor 63";FGC3="fgcolor 133";;
+ *) FGC1="fgcolor 240";FGC3="fgcolor 244";;
esac
+ if [ -n "$TERMUX_APK_RELEASE" ]; then
+ if [ "$TERMUX_APK_RELEASE" == "F_DROID" ]; then
+ FGC1="fgcolor 27";FGC3="fgcolor 35"
+ fi
+ fi
;;
esac
+# HYPERVISOR LAYER 8 SOFTWARE
+if pveversion > /dev/null 2>&1;then
+ FGC1="fgcolor 238";FGC3="fgcolor 130"
+fi
# make it possible to draw user-defined colours
-# shellcheck disable=SC1090
+# shellcheck disable=SC1090,SC1091
[ -r "${BBD}/prompt.bash.local" ] && source "${BBD}/prompt.bash.local"
# ----- USER SEP. AND HOSTNAME ----- #
UHSEP="@"
[ -n "$TMUX_PANE" ]&&UHSEP="[T]"
[ -n "$BYOBU_WINDOW_NAME" ]&&UHSEP="[B]"
-[ "$(hostname -s)" == "monitoring" ]&&PHN="$(hostname -f)"||PHN="$(hostname -s)"
+[ "$OSNAME" != 'sunos' ]&&[ "$(hostname -s)" == "monitoring" ]&&PHN="$(hostname -f)"||PHN="$(hostname -s)"
# ----- ASSEMBLE THE PROMPT COMMAND ADDITION ----- #
__prompt_command() {
@@ -70,15 +157,52 @@ __prompt_command() {
else
local EXIT2="$EXIT"
fi
+ PS1='\[\033[2m\033[3m\]\#\[\033[0m\] '
+ if [ "$OSVER" ]; then
+ PS1+='\[\033[48;5;237m\033[\033[38;5;253m\] '
+ PS1+="$OSVER"
+ PS1+=' \[\033[0m\] '
+ fi
+ PS1+='\[\033[1m\]\['
+ PS1+="$($FGC1)"
+ PS1+='\]'
case "$MYUID" in
0)
- PS1="\\# \[$(tput bold)\]\[$($FGC1)\]\\u\[$($FGC2)\]@$PHN \[$($FGC3)\]\\w \[$(tput sgr0)\]"
+ # PS1="\[\\033[2m\\033[3m\]\\#\[\\033[0m\] \[$(tput bold)\]\[$($FGC1)\]\\u\[$($FGC2)\]@$PHN \[$($FGC3)\]\\w \[$(tput sgr0)\]\\n"
+ PS1+='\u\['
+ PS1+="($FGC2)"
+ PS1+='\]'
+ PS1+="@$PHN"
+ PS1+='\['
+ PS1+="$($FGC3)"
+ PS1+='\]\w \[\033[0m\]\n'
;;
*)
- PS1="\\# \[$(tput bold)\]\[$($FGC1)\]\t \[$($FGC2)\]\\u$UHSEP\[$($FGC3)\]$PHN \\w \[$(tput sgr0)\]"
+ # PS1="\[\\033[2m\\033[3m\]\\#\[\\033[0m\] \[$(tput bold)\]\[$($FGC1)\]\t \[$($FGC2)\]\\u$UHSEP\[$($FGC3)\]$PHN \\w \[$(tput sgr0)\]\\n"
+ PS1+='\t \['
+ PS1+="$($FGC2)"
+ PS1+='\]\u'
+ PS1+="$UHSEP"
+ PS1+='\['
+ PS1+="$($FGC3)"
+ PS1+='\]'
+ PS1+="$PHN"
+ PS1+=' \w \[\033[0m\]\n'
;;
esac
- if command -v __git_ps1 >/dev/null 2>&1;then PS1+="$(__git_ps1 "%s ")";fi
+ # git-completion. Sources:
+ # - https://github.com/git/git/tree/master/contrib/completion (main)
+ # - https://github.com/felipec/git-completion (fork)
+ # - Debian: easygit (outdated! you may want to use something like /git-prompt inside this repo)
+ # - Arch: git-completion (AUR, with functionality tests) - search for ...share/git(-completion)?/prompt.sh
+ # - Manual measure: this repository, /git-prompt
+ # Why all this fuss? magicmonty takes control over the whole prompt, __git_ps1 only serves a part
+ # of it. We don't like monoliths, we like modules; the latter is good practice.
+ # also, see postexec --> one-time sourcing of git's prompt.sh
+ if command -v __git_ps1 >/dev/null 2>&1;then
+ GIT_PS1_SHOWCOLORHINTS=1; export GIT_PS1_SHOWCOLORHINTS
+ PS1+="$(__git_ps1 "%s ")"
+ fi
if [ "$EXIT" -eq 0 ];then
PS1+="\[\033[0;32m\]# "
elif [ "$EXIT" -eq 255 ]||[ "$EXIT" -eq 127 ];then