89 lines
4.6 KiB
Bash
89 lines
4.6 KiB
Bash
# byobu's bashrc -- colorize the prompt
|
||
# Copyright (C) 2014 Dustin Kirkland
|
||
# Copyright (C) 2023, 2024 Dustin Kirkland
|
||
#
|
||
# Authors: Dustin Kirkland <kirkland@byobu.org>
|
||
#
|
||
# This program is free software: you can redistribute it and/or modify
|
||
# it under the terms of the GNU General Public License as published by
|
||
# the Free Software Foundation, version 3 of the License.
|
||
#
|
||
# This program is distributed in the hope that it will be useful,
|
||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
# GNU General Public License for more details.
|
||
#
|
||
# You should have received a copy of the GNU General Public License
|
||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
|
||
# Ensure that we're in a tmux or screen session
|
||
case "$TERM" in
|
||
xterm)
|
||
# Try to ensure we have 256 colors
|
||
export TERM="xterm-256color"
|
||
;;
|
||
esac
|
||
[ -n "$BYOBU_CHARMAP" ] || BYOBU_CHARMAP=$(locale charmap 2>/dev/null || echo)
|
||
[ -z "$USER" ] && export USER=$(whoami)
|
||
[ -d "$BYOBU_PREFIX" ] || BYOBU_PREFIX="/usr"
|
||
[ -r "$BYOBU_PREFIX/lib/byobu/include/dirs" ] && . "$BYOBU_PREFIX/lib/byobu/include/dirs"
|
||
|
||
byobu_prompt_status() { local e=$?; [ $e != 0 ] && echo -e " $e "; }
|
||
byobu_prompt_symbol() { [ "$USER" = "root" ] && printf "%s" "#" || printf "%s" "\$"; }
|
||
byobu_prompt_runtime() {
|
||
# Calculate the approximate runtime of the previous command
|
||
# Uses bash 5.0's EPOCHREALTIME
|
||
local starttime endtime duration days hours minutes seconds microseconds nanoseconds str
|
||
[ ! -r $BYOBU_RUN_DIR/timer.$$ ] && printf "[0.000s]" && return
|
||
read starttime < $BYOBU_RUN_DIR/timer.$$ 2>/dev/null || true
|
||
endtime=${EPOCHREALTIME/./}
|
||
starttime=${starttime/./}
|
||
duration=$((endtime - starttime))
|
||
days=$((duration/1000000/60/60/24))
|
||
hours=$((duration/1000000/60/60%24))
|
||
minutes=$((duration/1000000/60%60))
|
||
seconds=$((duration/1000000%60))
|
||
nanoseconds=$((duration-days*1000000*60*60*24-hours*1000000*60*60-minutes*1000000*60-seconds*1000000))
|
||
nanoseconds=$(printf "%.6d" ${nanoseconds})
|
||
microseconds=${nanoseconds:0:3}
|
||
# Shorten our string as much as possible
|
||
[ "$days" = "0" ] && days= || days="${days}d "
|
||
[ "$hours" = "0" ] && hours= || hours="${hours}h "
|
||
[ "$minutes" = "0" ] && minutes= || minutes="${minutes}m "
|
||
str="${days}${hours}${minutes}${seconds}.${microseconds}s"
|
||
printf "[%s]" "$str" 1>&2
|
||
}
|
||
# Requires Bash 4.x
|
||
export PS0='$(printf "%s" ${EPOCHREALTIME/./} >"$BYOBU_RUN_DIR/timer.$$")'
|
||
|
||
case "$BYOBU_DISTRO" in
|
||
"Ubuntu")
|
||
# Use Ubuntu colors (grey / orange / aubergine)
|
||
export PS1="${debian_chroot:+($debian_chroot)}\[\e[38;5;202m\]\$(byobu_prompt_status)\[\e[00m\]\$(byobu_prompt_runtime) \[\e[38;5;245m\]\u\[\e[00m\]@\[\e[38;5;172m\]\h\[\e[00m\]:\[\e[38;5;5m\]\w\[\e[00m\]\$(byobu_prompt_symbol) "
|
||
export GREP_COLORS="ms=01;38;5;202:mc=01;31:sl=:cx=:fn=01;38;5;132:ln=32:bn=32:se=00;38;5;242"
|
||
export LESS_TERMCAP_mb=$(printf '\e[01;31m') # enter blinking mode – red
|
||
export LESS_TERMCAP_md=$(printf '\e[01;38;5;180m') # enter double-bright mode – bold light orange
|
||
export LESS_TERMCAP_me=$(printf '\e[0m') # turn off all appearance modes (mb, md, so, us)
|
||
export LESS_TERMCAP_se=$(printf '\e[0m') # leave standout mode
|
||
export LESS_TERMCAP_so=$(printf '\e[03;38;5;202m') # enter standout mode – orange background highlight (or italics)
|
||
export LESS_TERMCAP_ue=$(printf '\e[0m') # leave underline mode
|
||
export LESS_TERMCAP_us=$(printf '\e[04;38;5;139m') # enter underline mode – underline aubergine
|
||
# Use Ubuntu themed dircolors
|
||
if [ -e "${BYOBU_PREFIX}/share/byobu/profiles/dircolors" ]; then
|
||
dircolors "${BYOBU_PREFIX}/share/byobu/profiles/dircolors" > "$BYOBU_RUN_DIR/dircolors"
|
||
. "$BYOBU_RUN_DIR/dircolors"
|
||
fi
|
||
;;
|
||
"Wolfi")
|
||
# Use Wolfi colors (pink / purple / grey)
|
||
# For reference: https://upload.wikimedia.org/wikipedia/commons/1/15/Xterm_256color_chart.svg
|
||
# Convert hex to 256: https://gist.githubusercontent.com/MicahElliott/719710/raw/73d047f0a3ffc35f0655488547e7f24fa3f04ea6/colortrans.py
|
||
# Use Wolfi colors (pink=170 / purple=98 / blue=63); flashing error code on previous command non-zero exit
|
||
PS1="\[\e[03;5;15;54m\]\$(byobu_prompt_status)\[\e[00m\]\$(byobu_prompt_runtime) \[\e[38;5;170m\]\u\[\e[00m\]@\[\e[38;5;98m\]\h\[\e[00m\]:\[\e[38;5;63m\]\w\[\e[00m\]\$(byobu_prompt_symbol) "
|
||
;;
|
||
*)
|
||
# Use Googley colors (blue / red / yellow / blue / green / red )
|
||
PS1="${debian_chroot:+($debian_chroot)}\[\e[31m\]\$(byobu_prompt_status)\[\e[38;5;69m\]\u\[\e[38;5;214m\]@\[\e[38;5;167m\]\h\[\e[38;5;214m\]:\[\e[38;5;71m\]\w\[\e[38;5;214m\]\$(byobu_prompt_symbol)\[\e[00m\] "
|
||
;;
|
||
esac
|