107 lines
3.7 KiB
Bash
107 lines
3.7 KiB
Bash
#!/bin/bash
|
|
|
|
if [[ -z "${WELCOME_SCRIPT_PATH}" ]]; then
|
|
WELCOME_SCRIPT_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." &>/dev/null && pwd)"
|
|
fi
|
|
|
|
#region INCLUDES
|
|
. "${WELCOME_SCRIPT_PATH}/config/config_colors.sh"
|
|
#endregion
|
|
|
|
# Séparateur
|
|
SEP="█►"
|
|
|
|
get_git_status() {
|
|
local branch status current_bg current_color project upstream behind
|
|
branch=$(git branch --show-current 2>/dev/null)
|
|
[[ -z "$branch" ]] && return
|
|
|
|
project=$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null)
|
|
|
|
current_bg="$(color_secure "$COLOR_DARK_GREEN_BG")"
|
|
current_color="$(color_secure "$COLOR_DARK_GREEN")"
|
|
status="🆗"
|
|
|
|
if [[ -n $(git status --porcelain 2>/dev/null) ]]; then
|
|
current_bg="$(color_secure "$COLOR_LIGHT_RED_BG")"
|
|
# shellcheck disable=SC2086
|
|
current_color="$(color_secure "$COLOR_LIGHT_RED")"
|
|
status="🔄"
|
|
fi
|
|
|
|
# Affichage du premier bloc
|
|
echo -ne "$(color_secure "$COLOR_DARK_GRAY")${current_bg}${SEP}$(color_secure "$COLOR_WHITE") [${project}/${branch}]${status}"
|
|
|
|
# --- SEGMENT DYNAMIQUE (BEHIND / PULL) ---
|
|
# On vérifie si on a un upstream (une branche distante)
|
|
upstream=$(git rev-parse --abbrev-ref --symbolic-full-name "@{u}" 2>/dev/null)
|
|
if [[ -n "$upstream" ]]; then
|
|
# On compte le nombre de commits de retard
|
|
behind=$(git rev-list --count HEAD.."$upstream" 2>/dev/null)
|
|
|
|
if [[ "$behind" -gt 0 ]]; then
|
|
# Raccord entre le segment précédent et le segment orange
|
|
# On utilise la couleur de fond du précédent pour le texte du SEP
|
|
echo -ne "${current_color}$(color_secure "$COLOR_ORANGE_BG")${SEP}$(color_secure "$COLOR_WHITE") pull $behind ✨"#🆙
|
|
|
|
# On met à jour les variables pour le SEP de fin
|
|
# shellcheck disable=SC2086
|
|
current_bg="$(color_secure $COLOR_ORANGE_BG)"
|
|
current_color="$(color_secure "$COLOR_ORANGE")"
|
|
fi
|
|
fi
|
|
|
|
# --- FIN DU BLOC ---
|
|
echo -ne "${current_bg}${NONE}${current_color}${SEP}${NONE}"
|
|
}
|
|
|
|
get_git_status_OK() {
|
|
local branch status current_bg current_color project
|
|
branch=$(git branch --show-current 2>/dev/null)
|
|
[[ -z "$branch" ]] && return
|
|
|
|
project=$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null)
|
|
|
|
# Initialisation des couleurs (On utilise des variables propres)
|
|
current_bg="$(color_secure "$COLOR_DARK_GREEN_BG")"
|
|
current_color="$(color_secure "$COLOR_DARK_GREEN")"
|
|
status="🆗"
|
|
|
|
if [[ -n $(git status --porcelain 2>/dev/null) ]]; then
|
|
current_bg="$(color_secure "$COLOR_LIGHT_RED_BG")"
|
|
current_color="$(color_secure "$COLOR_LIGHT_RED")"
|
|
status="🔄"
|
|
fi
|
|
|
|
echo -ne "$(color_secure "$COLOR_DARK_GRAY")${current_bg}${SEP}$(color_secure "$COLOR_WHITE") TEST[${project}/${branch}]${status}${current_bg}${NONE}${current_color}${SEP}${NONE}"
|
|
}
|
|
|
|
set_ps1() {
|
|
local EXIT P1 P2 GIT_PART ARROW_C
|
|
EXIT="$?"
|
|
|
|
# Segment 1 : User (Bleu) - Ajout des
|
|
P1="$(color_secure "$COLOR_LIGHT_BLUE_BG")$(color_secure "$COLOR_WHITE") <\u@$(hostname -f)>${NONE}"
|
|
|
|
# Segment 2 : Chemin (Gris) avec raccord Bleu
|
|
P2="$(color_secure "$COLOR_LIGHT_BLUE")$(color_secure "$COLOR_DARK_GRAY_BG")${SEP}$(color_secure "$COLOR_WHITE") \w"
|
|
|
|
# Segment 3 : Git
|
|
GIT_PART=$(get_git_status)
|
|
|
|
if [[ -n "$GIT_PART" ]]; then
|
|
# On ne met pas d'espace avant ${GIT_PART} car le SEP s'en occupe
|
|
PS1="${P1}${P2} ${GIT_PART}"
|
|
else
|
|
PS1="${P1}${P2} ${NONE}$(color_secure "$COLOR_DARK_GRAY")${SEP}${NONE}"
|
|
fi
|
|
|
|
# Ligne 2 : Flèche de retour
|
|
ARROW_C="$(color_secure "$COLOR_GREEN")"
|
|
[[ $EXIT != 0 ]] && ARROW_C="$(color_secure "$COLOR_LIGHT_RED")"
|
|
|
|
PS1+="\n${ARROW_C}└─${NONE} "
|
|
}
|
|
|
|
PROMPT_COMMAND=set_ps1
|