diff --git a/.config/guix/cobra/home.scm b/.config/guix/cobra/home.scm index 404b801..edc9729 100644 --- a/.config/guix/cobra/home.scm +++ b/.config/guix/cobra/home.scm @@ -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\\]\" diff --git a/.prompt b/.prompt index 60d577d..251e4c4 100644 --- a/.prompt +++ b/.prompt @@ -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\]"