bash/bashrc.d/10-prompt.bash
2026-10-27 13:13:29 +00:00

43 lines
1.5 KiB
Bash

# shellcheck shell=bash
draw_prompt_divider() {
local timestamp prefix prefix_length line_length i
printf -v timestamp '%(%H:%M:%S)T' -1
prefix="$timestamp ├"
prefix_length=${#prefix}
line_length=$(( ${COLUMNS:-80} - prefix_length ))
printf '%s' "$prefix"
for ((i = 0; i < line_length; i++)); do printf '─'; done
echo
}
_CACHED_USER_HOST="$USER@$HOSTNAME"
_CACHED_USER_HOST_LENGTH=${#_CACHED_USER_HOST}
calculate_git_alignment() {
[[ -z "$GITSTATUS_PROMPT" ]] && { GIT_ALIGNMENT_PADDING=""; return; }
local cleaned branch_name needed_padding
cleaned=$(echo "$GITSTATUS_PROMPT" | sed -e 's/\x01//g' -e 's/\x02//g' -e 's/\x1b\[[0-9;]*m//g')
branch_name="${cleaned%% *}"
needed_padding=$((_CACHED_USER_HOST_LENGTH - ${#branch_name}))
[[ $needed_padding -lt 8 ]] && needed_padding=8
printf -v GIT_ALIGNMENT_PADDING '%*s' "$needed_padding" ''
}
append_new_history() {
history -a
}
[ -r "$HOME/.config/bash/gitstatus-custom.sh" ] && . "$HOME/.config/bash/gitstatus-custom.sh"
PROMPT_COMMAND="append_new_history; draw_prompt_divider; my_gitstatus_prompt_update; calculate_git_alignment"
command_not_found_handle() {
printf '\033[01;31mbash: %s: command not found\033[00m\n' "$1" >&2
return 127
}
_error_block='██████'
PS1='\[\033[01;32m\]\u@\h\[\033[00m\] \[\033[1;34m\]\w\[\033[00m\]\n${GITSTATUS_PROMPT:+$GIT_ALIGNMENT_PADDING$GITSTATUS_PROMPT\n}$([ "$?" -eq 0 ] && echo "" || echo "\[\033[01;31m\]$_error_block\[\033[00m\] ")\$ \[\e]0;\u@\h: \w\a\]'