#!/bin/bash # shebang for syntax highlightin purposes export TIME_TOGGLE=0 trap '[[ $BASH_COMMAND != "$PROMPT_COMMAND" ]] && export LAST_EPOCH="$EPOCHSECONDS" && export INC_TIME=1' DEBUG export TIME_TOGGLE=0 __get_cmd_time() { if [ $COMMAND_TIME -ge 3600 ]; then TZ=UTC printf 'took %(%Hh%Mm%Ss)T ' $COMMAND_TIME elif [ $COMMAND_TIME -ge 60 ]; then TZ=UTC printf 'took %(%Mm%Ss)T ' $COMMAND_TIME elif [ $COMMAND_TIME -ge 1 ]; then TZ=UTC printf 'took %(%Ss)T ' $COMMAND_TIME fi } __sig() { case $1 in 126) printf ACCES ;; 127) printf NOENT ;; 129) printf HUP ;; 130) printf INT ;; 131) printf QUIT ;; 132) printf ILL ;; 133) printf TRAP ;; 134) printf ABRT ;; 135) printf BUS ;; 136) printf FPE ;; 137) printf KILL ;; 138) printf USR1 ;; 139) printf SEGV ;; 140) printf USR2 ;; 141) printf PIPE ;; 142) printf ALRM ;; 143) printf TERM ;; 144) printf STKFLT ;; 145) printf CHLD ;; 146) printf CONT ;; 147) printf STOP ;; 148) printf TSTP ;; 149) printf TTIN ;; 150) printf TTOU ;; 151) printf URG ;; 152) printf XCPU ;; 153) printf XFSZ ;; 154) printf VTALRM ;; 155) printf PROF ;; 156) printf WINCH ;; 157) printf IO ;; 158) printf PWR ;; 159) printf SYS ;; 16[3-9]|1[7-8][0-9]|19[0-2]) printf RT$(($1-128)) ;; *) printf $1 ;; esac } __prompt() { PEC=$? if [ $INC_TIME -ne 0 ]; then export PROMPT_EPOCH="$EPOCHSECONDS" export INC_TIME=0 fi export COMMAND_TIME="$((PROMPT_EPOCH-LAST_EPOCH))" export PS1="$([ $PEC -ne 0 ] && printf "\[\][\[\]$(__sig $PEC)\[\]] ")\[\][\[[3\$([ $(id -u) -eq 0 ] && printf 1 || printf 3)m\]\u\[\]@\[\]\h\[\]:\[\]\w\[\]] \[\]$(__get_cmd_time)\[[38;2;\$RANDOM;\$RANDOM;\${RANDOM}m\]\\$ \[\]" } export PROMPT_COMMAND=__prompt