2022-03-01 17:32:57 +00:00
|
|
|
|
#!/bin/bash
|
|
|
|
|
# shebang for syntax highlightin purposes
|
|
|
|
|
|
2022-03-01 20:11:44 +00:00
|
|
|
|
__debug_trap() {
|
|
|
|
|
# Set necessary pre-command variables (PROMPT_COMMAND is a command
|
|
|
|
|
# so its excluded here)
|
|
|
|
|
if [[ "$BASH_COMMAND" != "$PROMPT_COMMAND" ]]; then
|
2022-03-01 20:23:03 +00:00
|
|
|
|
LAST_EPOCH="$EPOCHSECONDS"
|
|
|
|
|
LAST_REALTIME="$EPOCHREALTIME"
|
|
|
|
|
INC_TIME=1
|
2022-03-01 20:11:44 +00:00
|
|
|
|
fi
|
|
|
|
|
}
|
2022-03-01 17:32:57 +00:00
|
|
|
|
|
2022-03-01 20:11:44 +00:00
|
|
|
|
trap '__debug_trap' DEBUG
|
2022-03-01 17:32:57 +00:00
|
|
|
|
|
|
|
|
|
__get_cmd_time() {
|
2022-03-01 20:11:44 +00:00
|
|
|
|
# Set hours minutes seconds and remove preceding zeros
|
2022-03-02 04:05:19 +00:00
|
|
|
|
local YEAR=$(($((10#$(TZ=UTC printf '%(%Y)T' $CMD_TIME)))-1970))
|
|
|
|
|
local DAYS=$((10#$(TZ=UTC printf '%(%j)T' $CMD_TIME)))
|
2022-03-01 20:11:44 +00:00
|
|
|
|
local HOUR=$((10#$(TZ=UTC printf '%(%H)T' $CMD_TIME)))
|
|
|
|
|
local MINS=$((10#$(TZ=UTC printf '%(%M)T' $CMD_TIME)))
|
|
|
|
|
local SECS=$((10#$(TZ=UTC printf '%(%S)T' $CMD_TIME))) #wtf sex???
|
|
|
|
|
|
|
|
|
|
# Choose whether or not to print hours minutes and seconds
|
2022-03-02 04:05:19 +00:00
|
|
|
|
[ $CMD_TIME -ge 31536000 ] && TZ=UTC printf '%sd ' ${YEAR:-0}
|
|
|
|
|
[ $CMD_TIME -ge 86400 ] && TZ=UTC printf '%sd ' ${DAYS:-0}
|
|
|
|
|
[ $CMD_TIME -ge 3600 ] && TZ=UTC printf '%sh ' ${HOUR:-0}
|
|
|
|
|
[ $CMD_TIME -ge 60 ] && TZ=UTC printf '%sm ' ${MINS:-0}
|
|
|
|
|
[ $CMD_TIME -ge 1 ] && TZ=UTC printf '%ss ' ${SECS:-0}
|
|
|
|
|
TZ=UTC printf '%sμs ' ${CMD_US:-0}
|
2022-03-01 17:32:57 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
__sig() {
|
2022-03-01 20:11:44 +00:00
|
|
|
|
# Giant switch case for getting the name of the signal (`kill -l`)
|
2022-03-01 17:32:57 +00:00
|
|
|
|
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 ;;
|
2022-03-01 20:11:44 +00:00
|
|
|
|
16[3-9]|1[7-8][0-9]|19[0-2]) printf RT$(($1-128)) ;; # Savagery
|
|
|
|
|
*) printf $1 ;; # Print exit code if not in list
|
2022-03-01 17:32:57 +00:00
|
|
|
|
esac
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
__prompt() {
|
2022-03-01 20:11:44 +00:00
|
|
|
|
# Get exit code
|
2022-03-01 17:32:57 +00:00
|
|
|
|
PEC=$?
|
2022-03-01 20:11:44 +00:00
|
|
|
|
# Reset time when prompt was first displayed after command
|
2022-03-01 17:32:57 +00:00
|
|
|
|
if [ $INC_TIME -ne 0 ]; then
|
2022-03-01 20:23:03 +00:00
|
|
|
|
PROMPT_EPOCH="$EPOCHSECONDS"
|
|
|
|
|
PROMPT_REALTIME="$EPOCHREALTIME"
|
|
|
|
|
INC_TIME=0
|
2022-03-01 17:32:57 +00:00
|
|
|
|
fi
|
2022-03-01 20:11:44 +00:00
|
|
|
|
|
|
|
|
|
# Get relative times
|
2022-03-01 20:23:03 +00:00
|
|
|
|
CMD_TIME="$((PROMPT_EPOCH-LAST_EPOCH))"
|
2022-03-02 04:05:19 +00:00
|
|
|
|
local LAST_US="$((10#${LAST_REALTIME: -6}))"
|
|
|
|
|
CMD_US="$((1${PROMPT_REALTIME: -6}-${LAST_US:-0}))"
|
2022-03-01 20:23:03 +00:00
|
|
|
|
CMD_US="$((10#${CMD_US: -6}))"
|
2022-03-01 20:11:44 +00:00
|
|
|
|
|
2022-03-02 04:33:34 +00:00
|
|
|
|
# Set prompt sections
|
|
|
|
|
|
|
|
|
|
# [INT], [4], etc.
|
|
|
|
|
local SIG="$([ $PEC -ne 0 ] && printf "\[[34m\][\[[31m\]$(__sig $PEC)\[[34m\]] ")"
|
|
|
|
|
# [user@homeserver:~]
|
|
|
|
|
local UHD="\[[1m[34m\][\[[3\$([ $(id -u) -eq 0 ] && printf 1 || printf 3)m\]\u\[[35m\]@\[[36m\]\h\[[35m\]:\[[32m\]\w\[[34m\]]"
|
|
|
|
|
# 2y 351d 12m 43s 382969μs
|
|
|
|
|
local TIME="\[[33m\]$(__get_cmd_time)"
|
|
|
|
|
# Random colored $ or #
|
|
|
|
|
local IND="\[[38;2;$RANDOM;$RANDOM;${RANDOM}m\]\\$"
|
2022-03-02 04:36:19 +00:00
|
|
|
|
# Remove all color
|
|
|
|
|
local ZERO="\[[0m\]"
|
2022-03-02 04:33:34 +00:00
|
|
|
|
|
2022-03-01 20:11:44 +00:00
|
|
|
|
# Set the prompt
|
2022-03-02 04:36:19 +00:00
|
|
|
|
PS1="$ZERO$SIG$UHD $TIME$IND $ZERO"
|
2022-03-01 17:32:57 +00:00
|
|
|
|
}
|
2022-03-02 04:33:34 +00:00
|
|
|
|
|
2022-03-01 20:23:03 +00:00
|
|
|
|
PROMPT_COMMAND=__prompt
|