refactor gitstatus prompt colors for clarity

Updated color usage in the gitstatus prompt to minimize distractions
by removing color from remote tracking and push status indicators.
This commit is contained in:
Ray Elliott 2025-09-30 20:16:39 +01:00
parent 64c600f71e
commit 37dce8fa0b
2 changed files with 67 additions and 45 deletions

88
bashrc
View File

@ -1,5 +1,29 @@
# Color definitions
_WHITE='\033[1;37m' # White _WHITE='\033[1;37m' # White
_NC='\033[0m' # No Color _NC='\033[0m' # Get the current day of the week, day of the month, and year
day_of_week=$(date "+%A")
day_of_month=$(date "+%d")
month_name=$(date "+%B")
year=$(date "+%Y")
# Determine the day suffix (th, nd, rd)
case "$day_of_month" in
1[0-9]) day_suffix="th";;
*1) day_suffix="st";;
*2) day_suffix="nd";;
*3) day_suffix="rd";;
*) day_suffix="th";;
esac
# Determine the color based on the classification # No Color / Reset
_RED='\033[0;31m' # Red
_GREEN='\033[01;32m' # Bright Green
_YELLOW='\033[0;33m' # Yellow
_BLUE='\033[1;34m' # Bright Blue
_BRIGHT_GREEN='\033[1;32m' # Bright Green (for positive)
_BRIGHT_RED='\033[1;31m' # Bright Red (for negative)
_BRIGHT_WHITE='\033[1;37m' # Bright White
_DIM_RED='\033[91m' # Bright Red (for TODO files)
export SHELL_CONFIG="$SHELL_CONFIG:.bashrc" export SHELL_CONFIG="$SHELL_CONFIG:.bashrc"
# #
@ -62,17 +86,6 @@ function show_date() {
# Split the selected adjective into the adjective and classification parts # Split the selected adjective into the adjective and classification parts
IFS=':' read -r adjective classification <<< "$selected_adjective" IFS=':' read -r adjective classification <<< "$selected_adjective"
# Determine the color code based on the classification
case "$classification" in
"positive") text_color="\033[1;32m";;
"negative") text_color="\033[1;31m";;
*) text_color="";; # Default to no colour
esac
# ANSI escape codes for reset
reset_color='\033[0m'
hl_color='\033[1;34m'
# Get the current day of the week, day of the month, and year # Get the current day of the week, day of the month, and year
day_of_week=$(date "+%A") day_of_week=$(date "+%A")
day_of_month=$(date "+%d") day_of_month=$(date "+%d")
@ -88,8 +101,15 @@ function show_date() {
*) day_suffix="th";; *) day_suffix="th";;
esac esac
# Determine the color based on the classification
case "$classification" in
"positive") text_color="$_BRIGHT_GREEN";;
"negative") text_color="$_BRIGHT_RED";;
*) text_color="";;
esac
# Create the full date format with colored parts and the selected adjective # Create the full date format with colored parts and the selected adjective
full_date="Pray, be informed, on this ${text_color}${adjective}${reset_color} day,\n${hl_color}${day_of_week}${reset_color} the ${hl_color}${day_of_month}${day_suffix}${reset_color} day of ${hl_color}${month_name}${reset_color}, in the year of our Lord ${hl_color}${year}${reset_color}!" full_date="Pray, be informed, on this ${text_color}${adjective}${_NC} day,\n${_BLUE}${day_of_week}${_NC} the ${_BLUE}${day_of_month}${day_suffix}${_NC} day of ${_BLUE}${month_name}${_NC}, in the year of our Lord ${_BLUE}${year}${_NC}!"
# Print the full date # Print the full date
echo -e "$full_date" echo -e "$full_date"
@ -100,13 +120,17 @@ function show_date() {
# If not running interactively, don't do anything # If not running interactively, don't do anything
[[ $- != *i* ]] && return [[ $- != *i* ]] && return
# ============================================================================
# SHELL CONFIGURATION
# ============================================================================
export HISTCONTROL=ignoreboth:erasedups export HISTCONTROL=ignoreboth:erasedups
# Load custom gitstatus configuration # Load custom gitstatus configuration
[ -f "$HOME/.config/bash/gitstatus-custom.sh" ] && . "$HOME/.config/bash/gitstatus-custom.sh" [ -f "$HOME/.config/bash/gitstatus-custom.sh" ] && . "$HOME/.config/bash/gitstatus-custom.sh"
# Set PS1 with time, user@host, directory on first line, git status on second line, prompt on third line # Set PS1 with time, user@host, directory on first line, git status on second line, prompt on third line
PS1='\t \[\033[01;32m\]\u@\h\[\033[00m\] \[\033[01;34m\]\w\[\033[00m\]\n${GITSTATUS_PROMPT:+ $GITSTATUS_PROMPT\n}\[\033[01;$((31+!$?))m\]\$\[\033[00m\] \[\e]0;\u@\h: \w\a\]' PS1='\t \[\033[01;32m\]\u@\h\[\033[00m\] \[\033[1;34m\]\w\[\033[00m\]\n${GITSTATUS_PROMPT:+ $GITSTATUS_PROMPT\n}\[\033[01;$((31+!$?))m\]\$\[\033[00m\] \[\e]0;\u@\h: \w\a\]'
# If there are multiple matches for completion, Tab should cycle through them # If there are multiple matches for completion, Tab should cycle through them
bind TAB:menu-complete bind TAB:menu-complete
@ -138,45 +162,45 @@ echo -e " ${_WHITE}lftp cheat vimv 'flameshot gui' rclone mid3v2 zathura tessera
echo "" echo ""
if [ ${_mem_available%.*} -lt 5 ] ; then if [ ${_mem_available%.*} -lt 5 ] ; then
echo -ne "Memory available: \033[0;33m" echo -ne "Memory available: ${_YELLOW}"
[ ${_mem_available%.*} -lt 3 ] && echo -ne "\033[0;31m" [ ${_mem_available%.*} -lt 3 ] && echo -ne "${_RED}"
echo -n "${_mem_available}" echo -n "${_mem_available}"
echo -e "GB\033[0m" echo -e "GB${_NC}"
fi fi
if [ $_updates_available -gt 0 ] ; then if [ $_updates_available -gt 0 ] ; then
update_color="\033[1;37m" # default white update_color="$_BRIGHT_WHITE" # default white
if [ $_updates_available -gt 29 ] ; then if [ $_updates_available -gt 29 ] ; then
update_color="\033[0;31m" # red update_color="$_RED" # red
elif [ $_updates_available -gt 15 ] ; then elif [ $_updates_available -gt 15 ] ; then
update_color="\033[0;33m" # yellow update_color="$_YELLOW" # yellow
fi fi
echo -ne "Updates available: ${update_color}${_updates_available}\033[0m" echo -ne "Updates available: ${update_color}${_updates_available}${_NC}"
echo -ne " [ update with: ${update_color}update\033[0m ]" echo -ne " [ update with: ${update_color}update${_NC} ]"
echo "" echo ""
fi fi
_orphans_available="$(pacman -Qdtq 2>/dev/null | wc -l)" _orphans_available="$(pacman -Qdtq 2>/dev/null | wc -l)"
if [ $_orphans_available -gt 0 ] ; then if [ $_orphans_available -gt 0 ] ; then
echo -ne "Orphaned packages: \033[1;37m" echo -ne "Orphaned packages: $_BRIGHT_WHITE"
orphan_color="\033[1;37m" orphan_color="$_BRIGHT_WHITE"
if [ $_orphans_available -gt 9 ] ; then if [ $_orphans_available -gt 9 ] ; then
orphan_color="\033[0;31m" orphan_color="$_RED"
elif [ $_orphans_available -gt 4 ] ; then elif [ $_orphans_available -gt 4 ] ; then
orphan_color="\033[0;33m" orphan_color="$_YELLOW"
fi fi
echo -ne "${orphan_color}${_orphans_available}\033[0m" echo -ne "${orphan_color}${_orphans_available}${_NC}"
echo -ne " [ remove with: ${orphan_color}sudo pacman -Rns \$(pacman -Qdtq)\033[0m ]" echo -ne " [ remove with: ${orphan_color}sudo pacman -Rns \$(pacman -Qdtq)${_NC} ]"
echo "" echo ""
fi fi
echo "" echo ""
echo -e "Remember \"\033[1;34mTODO.md\033[0m\" and \"\033[1;34mautonote.md\033[0m\" files have content automatically displayed." echo -e "Remember \"${_BLUE}TODO.md${_NC}\" and \"${_BLUE}autonote.md${_NC}\" files have content automatically displayed."
echo -e "Edit these with \033[1;34met\033[0m and \033[1;34mea\033[0m" echo -e "Edit these with ${_BLUE}et${_NC} and ${_BLUE}ea${_NC}"
echo "" echo ""
. "$HOME/.config/bash/cheat.bash" . "$HOME/.config/bash/cheat.bash"
@ -193,7 +217,7 @@ alias backup='sudo borgmatic create --verbosity 1 --files'
function check_todo() { function check_todo() {
if [ -f "TODO.md" ]; then if [ -f "TODO.md" ]; then
echo echo
echo -e "\e[91mTODO.md\e[0m" echo -e "${_DIM_RED}TODO.md${_NC}"
echo "---------------------------" echo "---------------------------"
mdcat TODO.md mdcat TODO.md
echo "---------------------------" echo "---------------------------"
@ -204,7 +228,7 @@ fi
function check_autonote() { function check_autonote() {
if [ -f ".autonote.md" ]; then if [ -f ".autonote.md" ]; then
echo echo
echo -e "\e[91mautonote.md\e[0m" echo -e "${_DIM_RED}autonote.md${_NC}"
echo "---------------------------" echo "---------------------------"
mdcat .autonote.md mdcat .autonote.md
echo "---------------------------" echo "---------------------------"

View File

@ -13,9 +13,7 @@ function my_gitstatus_prompt_update() {
[[ "$VCS_STATUS_RESULT" == ok-sync ]] || return 0 # not a git repo [[ "$VCS_STATUS_RESULT" == ok-sync ]] || return 0 # not a git repo
local reset=$'\001\e[0m\002' # no color local reset=$'\001\e[0m\002' # no color
local green=$'\001\e[38;5;076m\002' # green - clean branch name local green=$'\001\e[38;5;076m\002' # green - clean branch name only
local blue=$'\001\e[38;5;014m\002' # blue - informational (untracked)
local yellow=$'\001\e[38;5;011m\002' # yellow - action pending (staged, behind/ahead)
local red=$'\001\e[38;5;196m\002' # red - urgent attention (conflicts, merge) local red=$'\001\e[38;5;196m\002' # red - urgent attention (conflicts, merge)
local p local p
@ -36,25 +34,25 @@ function my_gitstatus_prompt_update() {
(( ${#where} > 32 )) && where="${where:0:12}${where: -12}" (( ${#where} > 32 )) && where="${where:0:12}${where: -12}"
p+="${green}${where}" p+="${green}${where}"
# Remote tracking status (yellow - action pending) # Remote tracking status (no color - less distracting)
(( VCS_STATUS_COMMITS_BEHIND )) && p+=" ${yellow}behind:${VCS_STATUS_COMMITS_BEHIND}" (( VCS_STATUS_COMMITS_BEHIND )) && p+=" ${reset}behind:${VCS_STATUS_COMMITS_BEHIND}"
(( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && p+=" " (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && p+=" "
(( VCS_STATUS_COMMITS_AHEAD )) && p+="${yellow}ahead:${VCS_STATUS_COMMITS_AHEAD}" (( VCS_STATUS_COMMITS_AHEAD )) && p+="${reset}ahead:${VCS_STATUS_COMMITS_AHEAD}"
# Push remote status (yellow - action pending) # Push remote status (no color - less distracting)
(( VCS_STATUS_PUSH_COMMITS_BEHIND )) && p+=" ${yellow}push-behind:${VCS_STATUS_PUSH_COMMITS_BEHIND}" (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && p+=" ${reset}push-behind:${VCS_STATUS_PUSH_COMMITS_BEHIND}"
(( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && p+=" " (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && p+=" "
(( VCS_STATUS_PUSH_COMMITS_AHEAD )) && p+="${yellow}push-ahead:${VCS_STATUS_PUSH_COMMITS_AHEAD}" (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && p+="${reset}push-ahead:${VCS_STATUS_PUSH_COMMITS_AHEAD}"
# CUSTOM: Stashes with "stash:" prefix instead of "*" # CUSTOM: Stashes with "stash:" prefix instead of "*"
(( VCS_STATUS_STASHES )) && p+=" ${reset}stashed:${VCS_STATUS_STASHES}" (( VCS_STATUS_STASHES )) && p+=" ${reset}stashed:${VCS_STATUS_STASHES}"
# Repository state and file counts (descriptive labels) # Repository state and file counts (minimal colors)
[[ -n "$VCS_STATUS_ACTION" ]] && p+=" ${red}${VCS_STATUS_ACTION}" [[ -n "$VCS_STATUS_ACTION" ]] && p+=" ${red}${VCS_STATUS_ACTION}"
(( VCS_STATUS_NUM_CONFLICTED )) && p+=" ${red}conflicts:${VCS_STATUS_NUM_CONFLICTED}" (( VCS_STATUS_NUM_CONFLICTED )) && p+=" ${red}conflicts:${VCS_STATUS_NUM_CONFLICTED}"
(( VCS_STATUS_NUM_STAGED )) && p+=" ${yellow}staged:${VCS_STATUS_NUM_STAGED}" (( VCS_STATUS_NUM_STAGED )) && p+=" ${reset}staged:${VCS_STATUS_NUM_STAGED}"
(( VCS_STATUS_NUM_UNSTAGED )) && p+=" ${yellow}modified:${VCS_STATUS_NUM_UNSTAGED}" (( VCS_STATUS_NUM_UNSTAGED )) && p+=" ${reset}modified:${VCS_STATUS_NUM_UNSTAGED}"
(( VCS_STATUS_NUM_UNTRACKED )) && p+=" ${blue}untracked:${VCS_STATUS_NUM_UNTRACKED}" (( VCS_STATUS_NUM_UNTRACKED )) && p+=" ${reset}untracked:${VCS_STATUS_NUM_UNTRACKED}"
GITSTATUS_PROMPT="${p}${reset}" GITSTATUS_PROMPT="${p}${reset}"
} }