#!/bin/bash # Custom gitstatus configuration with API-based prompt # Source this file from bashrc for git status in prompt # Load gitstatus plugin for low-level API access [ -f "$HOME/.config/bash/gitstatus/gitstatus.plugin.sh" ] && . "$HOME/.config/bash/gitstatus/gitstatus.plugin.sh" # Custom gitstatus prompt function (replicates default behavior with customizations) function my_gitstatus_prompt_update() { GITSTATUS_PROMPT="" gitstatus_query || return 1 # error [[ "$VCS_STATUS_RESULT" == ok-sync ]] || return 0 # not a git repo local reset=$'\001\e[0m\002' # no color local bright_green=$'\001\e[01;32m\002' # bright green - branch name (matches hostname) local bright_white=$'\001\e[1;37m\002' # bright white - modified/untracked local red=$'\001\e[38;5;196m\002' # red - urgent attention (conflicts, merge) local p # Branch name, tag or commit local where if [[ -n "$VCS_STATUS_LOCAL_BRANCH" ]]; then where="$VCS_STATUS_LOCAL_BRANCH" elif [[ -n "$VCS_STATUS_TAG" ]]; then p+="${reset}#" where="$VCS_STATUS_TAG" else p+="${reset}@" where="${VCS_STATUS_COMMIT:0:8}" fi # Truncate long branch names and tags (( ${#where} > 32 )) && where="${where:0:12}…${where: -12}" p+="${bright_green}${where}" # Remote tracking status (bright white - important sync info) (( VCS_STATUS_COMMITS_BEHIND )) && p+=" ${bright_white}behind:${VCS_STATUS_COMMITS_BEHIND}" (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && p+=" " (( VCS_STATUS_COMMITS_AHEAD )) && p+="${bright_white}ahead:${VCS_STATUS_COMMITS_AHEAD}" # Push remote status (bright white - important sync info) (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && p+=" ${bright_white}push-behind:${VCS_STATUS_PUSH_COMMITS_BEHIND}" (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && p+=" " (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && p+="${bright_white}push-ahead:${VCS_STATUS_PUSH_COMMITS_AHEAD}" # CUSTOM: Stashes with "stash:" prefix instead of "*" (( VCS_STATUS_STASHES )) && p+=" ${reset}stashed:${VCS_STATUS_STASHES}" # Repository state and file counts (minimal colors) [[ -n "$VCS_STATUS_ACTION" ]] && p+=" ${red}${VCS_STATUS_ACTION}" (( VCS_STATUS_NUM_CONFLICTED )) && p+=" ${red}conflicts:${VCS_STATUS_NUM_CONFLICTED}" (( VCS_STATUS_NUM_STAGED )) && p+=" ${reset}staged:${VCS_STATUS_NUM_STAGED}" (( VCS_STATUS_NUM_UNSTAGED )) && p+=" ${bright_white}modified:${VCS_STATUS_NUM_UNSTAGED}" (( VCS_STATUS_NUM_UNTRACKED )) && p+=" ${bright_white}untracked:${VCS_STATUS_NUM_UNTRACKED}" GITSTATUS_PROMPT="${p}${reset}" } # Start gitstatusd and set up prompt command gitstatus_stop && gitstatus_start -s -1 -u -1 -c -1 -d -1 shopt -s promptvars