Enhance the prompt by calculating alignment based on the hostname and branch lengths, ensuring better visibility of git status in the terminal.
63 lines
No EOL
2.7 KiB
Bash
63 lines
No EOL
2.7 KiB
Bash
#!/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 |