I fixed the prompt

Signed-off-by: Skylar "The Cobra" Widulski <cobra@vern.cc>
This commit is contained in:
Skylar "The Cobra" Widulski 2023-12-11 13:36:31 -05:00
parent 7061b1caa6
commit ef6c0a7795
Signed by: cobra
GPG Key ID: 4FD8F812083FF6F9
2 changed files with 162 additions and 32 deletions

View File

@ -56,6 +56,30 @@ _BLU=\"\\[\\033[34m\\]\"
_PRP=\"\\[\\033[35m\\]\"
_CYN=\"\\[\\033[36m\\]\"
_WHT=\"\\[\\033[37m\\]\"
_BACK_BLK=\"\\[\\033[40m\\]\"
_BACK_RED=\"\\[\\033[41m\\]\"
_BACK_GRN=\"\\[\\033[42m\\]\"
_BACK_YLW=\"\\[\\033[43m\\]\"
_BACK_BLU=\"\\[\\033[44m\\]\"
_BACK_PRP=\"\\[\\033[45m\\]\"
_BACK_CYN=\"\\[\\033[46m\\]\"
_BACK_WHT=\"\\[\\033[47m\\]\"
_BRIGHT_BLK=\"\\[\\033[90m\\]\"
_BRIGHT_RED=\"\\[\\033[91m\\]\"
_BRIGHT_GRN=\"\\[\\033[92m\\]\"
_BRIGHT_YLW=\"\\[\\033[93m\\]\"
_BRIGHT_BLU=\"\\[\\033[94m\\]\"
_BRIGHT_PRP=\"\\[\\033[95m\\]\"
_BRIGHT_CYN=\"\\[\\033[96m\\]\"
_BRIGHT_WHT=\"\\[\\033[97m\\]\"
_BRIGHT_BACK_BLK=\"\\[\\033[100m\\]\"
_BRIGHT_BACK_RED=\"\\[\\033[101m\\]\"
_BRIGHT_BACK_GRN=\"\\[\\033[102m\\]\"
_BRIGHT_BACK_YLW=\"\\[\\033[103m\\]\"
_BRIGHT_BACK_BLU=\"\\[\\033[104m\\]\"
_BRIGHT_BACK_PRP=\"\\[\\033[105m\\]\"
_BRIGHT_BACK_CYN=\"\\[\\033[106m\\]\"
_BRIGHT_BACK_WHT=\"\\[\\033[107m\\]\"
# Number of guix packages to show before truncating in `guix shell`
_GUIX_MAXLIST=1
@ -67,6 +91,32 @@ _MIN_US=0
_SSH_LIMIT_START=4
_SSH_LIMIT_END=4
# Colors (higher level)
_COLOR_SSH_IP=\"${_CYN}\"
_COLOR_SSH_PORT=\"${_CYN}\"
_COLOR_SSH_PORT_SEP=\"${_PRP}${_BLD}\"
_COLOR_SSH_ASTRSK=\"${_WHT}\"
_COLOR_SSH_BRACKS=\"${_BLU}\"
_COLOR_GUIX_BRACKS=\"${_BLD}${_BLU}\"
_COLOR_GUIX_GUIX=\"${_YLW}\"
_COLOR_GUIX_SEP=\"\"
_COLOR_GUIX_PKGS=\"${_WHT}\"
_COLOR_GUIX_OUT=\"${_WHT}\"
_COLOR_GUIX_PLUS=\"\"
_COLOR_GUIX_PKGNUM=\"${_PRP}\"
_COLOR_GUIX_PKG=\"\"
_COLOR_UHD_BRACKS=\"${_BLD}${_BLU}\"
_COLOR_UHD_ROOT=\"${_BLD}${_RED}\"
_COLOR_UHD_NONROOT=\"${_BLD}${_YLW}\"
_COLOR_UHD_AT=\"${_BLD}${_PRP}\"
_COLOR_UHD_HOST=\"${_BLD}${_CYN}\"
_COLOR_UHD_SEP=\"${_BLD}${_PRP}\"
_COLOR_UHD_DIR=\"${_BLD}${_GRN}\"
_COLOR_CMDTIME=\"${_YLW}\"
__debug_trap() {
# Set necessary pre-command variables (PROMPT_COMMAND is a
# command so its excluded here)
@ -156,15 +206,14 @@ __sig() {
__ssh() {
local CON=($SSH_CONNECTION)
local SRV_IP=\"${CON[2]}\"
[[ $_SSH_LIMIT_START -lt 0 ]] && _SSH_LIMIT_START=0
[[ $_SSH_LIMIT_END -lt 0 ]] && _SSH_LIMIT_END=0
[[ $_SSH_LIMIT_START -lt 0 ]] && _SSH_LIMIT_START=0
[[ $_SSH_LIMIT_END -lt 0 ]] && _SSH_LIMIT_END=0
[[ -z \"$SRV_IP\" ]] && return
local SRV_PORT=\"${CON[3]}\"
# 4 chars from startand 4 chars from end
local SRV_IP_CUT=\"${_CYN}${SRV_IP}\"
[[ ${#SRV_IP} -gt $((_SSH_LIMIT_START+_SSH_LIMIT_END)) ]] && local SRV_IP_CUT=\"${_CYN}${SRV_IP:0:$_SSH_LIMIT_START}${_WHT}*${_CYN}${SRV_IP: -$_SSH_LIMIT_END}\"
local SRV_IP_CUT=\"${_COLOR_SSH_IP}${SRV_IP}\"
[[ ${#SRV_IP} -gt $((_SSH_LIMIT_START+_SSH_LIMIT_END)) ]] && local SRV_IP_CUT=\"${_COLOR_SSH_IP}${SRV_IP:0:$_SSH_LIMIT_START}${_COLOR_SSH_ASTRSK}*${_COLOR_SSH_IP}${SRV_IP: -$_SSH_LIMIT_END}\"
printf '%s' \"${_GRN}${_BLU}[${SRV_IP_CUT}${_PRP}${_BLD}:${_NON}${_CYN}${SRV_PORT}${_BLU}]${_NON}\"
printf '%s' \"${_COLOR_SSH_BRACKS}[${_NON}${SRV_IP_CUT}${_COLOR_SSH_PORT_SEP}:${_NON}${_COLOR_SSH_PORT}${SRV_PORT}${_COLOR_SSH_BRACKS}]${_NON}\"
}
__guix_env() {
@ -175,19 +224,35 @@ __guix_env() {
local PACKAGES=($(while read -r line; do
[[ \"$line\" =~ $re ]] && printf '%s ' \"${BASH_REMATCH[1]}\"
done < $GUIX_ENVIRONMENT/manifest))
local i=0
local OUTPUTS=($(while read -r line; do
if [[ \"$line\" =~ $re1 ]]; then
local match=\"${BASH_REMATCH[1]}\"
[[ ! \"${PACKAGES[*]}\" =~ \"$match\" ]] && printf '%s ' \"$match\"
if [[ ! \"${PACKAGES[$i]}\" == \"$match\" ]]; then
printf '%s ' \"$match\"
fi
((i++))
fi
done < $GUIX_ENVIRONMENT/manifest))
if [[ ${#PACKAGES[@]} -eq $((_GUIX_MAXLIST+1)) ]]; then
printf \"${_BLD}${_BLU}[${_NON}${_YLW}Guix${_NON}: ${_WHT}%s ${_NON}+ ${_PRP}%d ${_NON}pkg${_BLD}${_BLU}] \" \"${PACKAGES[0]}$([[ ${OUTPUTS[0]} && ${OUTPUTS[0]} != \"out\" ]] && printf ':%s' \"${OUTPUTS[0]}\")\" \"$((${#PACKAGES[@]}-1))\"
elif [[ ${#PACKAGES[@]} -gt $((_GUIX_MAXLIST+1)) ]]; then
printf \"${_BLD}${_BLU}[${_NON}${_YLW}Guix${_NON}: ${_WHT}%s ${_NON}+ ${_PRP}%d ${_NON}pkgs${_BLD}${_BLU}] \" \"${PACKAGES[0]}$([[ ${OUTPUTS[0]} && ${OUTPUTS[0]} != \"out\" ]] && printf ':%s' \"${OUTPUTS[0]}\")\" \"$((${#PACKAGES[@]}-1))\"
else
printf \"${_BLD}${_BLU}[${_NON}${_YLW}Guix${_NON}: ${_WHT}%s${_BLD}${_BLU}] \" \"${PACKAGES[@]}$([[ ${OUTPUTS[0]} && ${OUTPUTS[0]} != \"out\" ]] && printf ':%s' \"${OUTPUTS[0]}\")\"
local FULL_PKGS=($(for i in $(seq 0 $((${#PACKAGES[@]}-1))); do
if [[ \"${OUTPUTS[$i]}\" == \"out\" ]]; then
printf '%s ' \"${_COLOR_GUIX_PKGS}${PACKAGES[$i]}${_NON}\"
else
printf '%s ' \"${_COLOR_GUIX_PKGS}${PACKAGES[$i]}${_NON}${_GUIX_COLOR_SEP}:${_COLOR_GUIX_OUT}${OUTPUTS[$i]}${_NON}\"
fi
done))
local FULL_PKG_STR=\"${FULL_PKGS[@]:0:$_GUIX_MAXLIST}\"
local EXTRA=\"$((${#FULL_PKGS[@]}-_GUIX_MAXLIST))\"
if [ ${_GUIX_MAXLIST} -gt 0 ] && [ $EXTRA -gt 0 ]; then
FULL_PKG_STR+=\" ${_NON}${_COLOR_GUIX_PLUS}+ \"
fi
if [ $EXTRA -gt 1 ]; then
FULL_PKG_STR+=\"${_NON}${_COLOR_GUIX_PKGNUM}$EXTRA ${_NON}${_COLOR_GUIX_PKG}pkgs\"
elif [ $EXTRA -eq 1 ]; then
FULL_PKG_STR+=\"${_NON}${_COLOR_GUIX_PKGNUM}1 ${_NON}${_COLOR_GUIX_PKG}pkg\"
fi
printf %s \"${_COLOR_GUIX_BRACKS}[${_NON}${_COLOR_GUIX_GUIX}Guix${_NON}${_COLOR_GUIX_SEP}: ${_NON}${FULL_PKG_STR}${_COLOR_GUIX_BRACKS}] \"
fi
}
@ -251,11 +316,11 @@ __prompt() {
GUIX=\"$(__guix_env)\"
# [user@homeserver:~]
COL=\"$([[ $UID == 0 ]] && printf '%s' \"$_RED\" || printf '%s' \"$_YLW\")\"
UHD=\"${_BLD}${_BLU}[${COL}\\u${_PRP}@${_CYN}\\h${_PRP}:${_GRN}\\w${_BLU}]\"
COL=\"$([[ $UID == 0 ]] && printf '%s' \"${_COLOR_UHD_ROOT}\" || printf '%s' \"${_COLOR_UHD_NONROOT}\")\"
UHD=\"${_COLOR_UHD_BRACKS}[${_NON}${COL}\\u${_NON}${_COLOR_UHD_AT}@${_NON}${_COLOR_UHD_HOST}\\h${_NON}${_COLOR_UHD_SEP}:${_NON}${_COLOR_UHD_DIR}\\w${_NON}${_COLOR_UHD_BRACKS}]\"
# 2y 351d 12m 43s 382969μs
TIME=\"${_YLW}$(__get_cmd_time)\"
TIME=\"${_COLOR_CMDTIME}$(__get_cmd_time)\"
# Random colored $ or #
_RAND256=\"\\[\\033[38;2;$((RANDOM%256));$((RANDOM%256));$((RANDOM%256))m\\]\"

97
.prompt
View File

@ -12,6 +12,30 @@ _BLU="\[\033[34m\]"
_PRP="\[\033[35m\]"
_CYN="\[\033[36m\]"
_WHT="\[\033[37m\]"
_BACK_BLK="\[\033[40m\]"
_BACK_RED="\[\033[41m\]"
_BACK_GRN="\[\033[42m\]"
_BACK_YLW="\[\033[43m\]"
_BACK_BLU="\[\033[44m\]"
_BACK_PRP="\[\033[45m\]"
_BACK_CYN="\[\033[46m\]"
_BACK_WHT="\[\033[47m\]"
_BRIGHT_BLK="\[\033[90m\]"
_BRIGHT_RED="\[\033[91m\]"
_BRIGHT_GRN="\[\033[92m\]"
_BRIGHT_YLW="\[\033[93m\]"
_BRIGHT_BLU="\[\033[94m\]"
_BRIGHT_PRP="\[\033[95m\]"
_BRIGHT_CYN="\[\033[96m\]"
_BRIGHT_WHT="\[\033[97m\]"
_BRIGHT_BACK_BLK="\[\033[100m\]"
_BRIGHT_BACK_RED="\[\033[101m\]"
_BRIGHT_BACK_GRN="\[\033[102m\]"
_BRIGHT_BACK_YLW="\[\033[103m\]"
_BRIGHT_BACK_BLU="\[\033[104m\]"
_BRIGHT_BACK_PRP="\[\033[105m\]"
_BRIGHT_BACK_CYN="\[\033[106m\]"
_BRIGHT_BACK_WHT="\[\033[107m\]"
# Number of guix packages to show before truncating in `guix shell`
_GUIX_MAXLIST=1
@ -23,6 +47,32 @@ _MIN_US=0
_SSH_LIMIT_START=4
_SSH_LIMIT_END=4
# Colors (higher level)
_COLOR_SSH_IP="${_CYN}"
_COLOR_SSH_PORT="${_CYN}"
_COLOR_SSH_PORT_SEP="${_PRP}${_BLD}"
_COLOR_SSH_ASTRSK="${_WHT}"
_COLOR_SSH_BRACKS="${_BLU}"
_COLOR_GUIX_BRACKS="${_BLD}${_BLU}"
_COLOR_GUIX_GUIX="${_YLW}"
_COLOR_GUIX_SEP=""
_COLOR_GUIX_PKGS="${_WHT}"
_COLOR_GUIX_OUT="${_WHT}"
_COLOR_GUIX_PLUS=""
_COLOR_GUIX_PKGNUM="${_PRP}"
_COLOR_GUIX_PKG=""
_COLOR_UHD_BRACKS="${_BLD}${_BLU}"
_COLOR_UHD_ROOT="${_BLD}${_RED}"
_COLOR_UHD_NONROOT="${_BLD}${_YLW}"
_COLOR_UHD_AT="${_BLD}${_PRP}"
_COLOR_UHD_HOST="${_BLD}${_CYN}"
_COLOR_UHD_SEP="${_BLD}${_PRP}"
_COLOR_UHD_DIR="${_BLD}${_GRN}"
_COLOR_CMDTIME="${_YLW}"
__debug_trap() {
# Set necessary pre-command variables (PROMPT_COMMAND is a
# command so its excluded here)
@ -112,15 +162,14 @@ __sig() {
__ssh() {
local CON=($SSH_CONNECTION)
local SRV_IP="${CON[2]}"
[[ $_SSH_LIMIT_START -lt 0 ]] && _SSH_LIMIT_START=0
[[ $_SSH_LIMIT_END -lt 0 ]] && _SSH_LIMIT_END=0
[[ $_SSH_LIMIT_START -lt 0 ]] && _SSH_LIMIT_START=0
[[ $_SSH_LIMIT_END -lt 0 ]] && _SSH_LIMIT_END=0
[[ -z "$SRV_IP" ]] && return
local SRV_PORT="${CON[3]}"
# 4 chars from startand 4 chars from end
local SRV_IP_CUT="${_CYN}${SRV_IP}"
[[ ${#SRV_IP} -gt $((_SSH_LIMIT_START+_SSH_LIMIT_END)) ]] && local SRV_IP_CUT="${_CYN}${SRV_IP:0:$_SSH_LIMIT_START}${_WHT}*${_CYN}${SRV_IP: -$_SSH_LIMIT_END}"
local SRV_IP_CUT="${_COLOR_SSH_IP}${SRV_IP}"
[[ ${#SRV_IP} -gt $((_SSH_LIMIT_START+_SSH_LIMIT_END)) ]] && local SRV_IP_CUT="${_COLOR_SSH_IP}${SRV_IP:0:$_SSH_LIMIT_START}${_COLOR_SSH_ASTRSK}*${_COLOR_SSH_IP}${SRV_IP: -$_SSH_LIMIT_END}"
printf '%s' "${_GRN}${_BLU}[${SRV_IP_CUT}${_PRP}${_BLD}:${_NON}${_CYN}${SRV_PORT}${_BLU}]${_NON}"
printf '%s' "${_COLOR_SSH_BRACKS}[${_NON}${SRV_IP_CUT}${_COLOR_SSH_PORT_SEP}:${_NON}${_COLOR_SSH_PORT}${SRV_PORT}${_COLOR_SSH_BRACKS}]${_NON}"
}
__guix_env() {
@ -131,19 +180,35 @@ __guix_env() {
local PACKAGES=($(while read -r line; do
[[ "$line" =~ $re ]] && printf '%s ' "${BASH_REMATCH[1]}"
done < $GUIX_ENVIRONMENT/manifest))
local i=0
local OUTPUTS=($(while read -r line; do
if [[ "$line" =~ $re1 ]]; then
local match="${BASH_REMATCH[1]}"
[[ ! "${PACKAGES[*]}" =~ "$match" ]] && printf '%s ' "$match"
if [[ ! "${PACKAGES[$i]}" == "$match" ]]; then
printf '%s ' "$match"
fi
((i++))
fi
done < $GUIX_ENVIRONMENT/manifest))
if [[ ${#PACKAGES[@]} -eq $((_GUIX_MAXLIST+1)) ]]; then
printf "${_BLD}${_BLU}[${_NON}${_YLW}Guix${_NON}: ${_WHT}%s ${_NON}+ ${_PRP}%d ${_NON}pkg${_BLD}${_BLU}] " "${PACKAGES[0]}$([[ ${OUTPUTS[0]} && ${OUTPUTS[0]} != "out" ]] && printf ':%s' "${OUTPUTS[0]}")" "$((${#PACKAGES[@]}-1))"
elif [[ ${#PACKAGES[@]} -gt $((_GUIX_MAXLIST+1)) ]]; then
printf "${_BLD}${_BLU}[${_NON}${_YLW}Guix${_NON}: ${_WHT}%s ${_NON}+ ${_PRP}%d ${_NON}pkgs${_BLD}${_BLU}] " "${PACKAGES[0]}$([[ ${OUTPUTS[0]} && ${OUTPUTS[0]} != "out" ]] && printf ':%s' "${OUTPUTS[0]}")" "$((${#PACKAGES[@]}-1))"
else
printf "${_BLD}${_BLU}[${_NON}${_YLW}Guix${_NON}: ${_WHT}%s${_BLD}${_BLU}] " "${PACKAGES[@]}$([[ ${OUTPUTS[0]} && ${OUTPUTS[0]} != "out" ]] && printf ':%s' "${OUTPUTS[0]}")"
local FULL_PKGS=($(for i in $(seq 0 $((${#PACKAGES[@]}-1))); do
if [[ "${OUTPUTS[$i]}" == "out" ]]; then
printf '%s ' "${_COLOR_GUIX_PKGS}${PACKAGES[$i]}${_NON}"
else
printf '%s ' "${_COLOR_GUIX_PKGS}${PACKAGES[$i]}${_NON}${_GUIX_COLOR_SEP}:${_COLOR_GUIX_OUT}${OUTPUTS[$i]}${_NON}"
fi
done))
local FULL_PKG_STR="${FULL_PKGS[@]:0:$_GUIX_MAXLIST}"
local EXTRA="$((${#FULL_PKGS[@]}-_GUIX_MAXLIST))"
if [ ${_GUIX_MAXLIST} -gt 0 ] && [ $EXTRA -gt 0 ]; then
FULL_PKG_STR+=" ${_NON}${_COLOR_GUIX_PLUS}+ "
fi
if [ $EXTRA -gt 1 ]; then
FULL_PKG_STR+="${_NON}${_COLOR_GUIX_PKGNUM}$EXTRA ${_NON}${_COLOR_GUIX_PKG}pkgs"
elif [ $EXTRA -eq 1 ]; then
FULL_PKG_STR+="${_NON}${_COLOR_GUIX_PKGNUM}1 ${_NON}${_COLOR_GUIX_PKG}pkg"
fi
printf %s "${_COLOR_GUIX_BRACKS}[${_NON}${_COLOR_GUIX_GUIX}Guix${_NON}${_COLOR_GUIX_SEP}: ${_NON}${FULL_PKG_STR}${_COLOR_GUIX_BRACKS}] "
fi
}
@ -207,11 +272,11 @@ __prompt() {
GUIX="$(__guix_env)"
# [user@homeserver:~]
COL="$([[ $UID == 0 ]] && printf '%s' "$_RED" || printf '%s' "$_YLW")"
UHD="${_BLD}${_BLU}[${COL}\u${_PRP}@${_CYN}\h${_PRP}:${_GRN}\w${_BLU}]"
COL="$([[ $UID == 0 ]] && printf '%s' "${_COLOR_UHD_ROOT}" || printf '%s' "${_COLOR_UHD_NONROOT}")"
UHD="${_COLOR_UHD_BRACKS}[${_NON}${COL}\u${_NON}${_COLOR_UHD_AT}@${_NON}${_COLOR_UHD_HOST}\h${_NON}${_COLOR_UHD_SEP}:${_NON}${_COLOR_UHD_DIR}\w${_NON}${_COLOR_UHD_BRACKS}]"
# 2y 351d 12m 43s 382969μs
TIME="${_YLW}$(__get_cmd_time)"
TIME="${_COLOR_CMDTIME}$(__get_cmd_time)"
# Random colored $ or #
_RAND256="\[\033[38;2;$((RANDOM%256));$((RANDOM%256));$((RANDOM%256))m\]"