summaryrefslogtreecommitdiff
path: root/src/.bashrc_ps1
blob: 48599a581b7e94929b7754560ca3487cfafff07b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# Dynamic PS1 using terminal palette colors only
function update_ps1 {
    local exit_code=$?

    # Color exit code: green if 0, red otherwise
    if [[ $exit_code -eq 0 ]]; then
        local exit_display="\[\e[1;32m\]$exit_code\[\e[0m\]"  # bright green
    else
        local exit_display="\[\e[1;31m\]$exit_code\[\e[0m\]"  # bright red
    fi

    # Symbol always bright white
    local symbol="\[\e[1;37m\]\$\[\e[0m\]"

    # Brackets in bright white
    local open_bracket="\[\e[1;37m\][\[\e[0m\]"
    local close_bracket="\[\e[1;37m\]]\[\e[0m\]"

    # User: red for root, cyan otherwise
    if [ $(id -u) -eq 0 ]; then
        local user="\[\e[1;31m\]\u\[\e[0m\]"
    else
        local user="\[\e[1;36m\]\u\[\e[0m\]"
    fi

    # Current folder: yellow
    local folder="\[\e[1;33m\]\W\[\e[0m\]"

    # Git status: green if up to date, red if ahead, yellow if dirty
    local git_status=""
    if git rev-parse --is-inside-work-tree &>/dev/null; then
        if [[ -z $(git status --porcelain 2>/dev/null) ]]; then
            git_status="\[\e[1;32m\](git)\[\e[0m\]"  # clean
        else
            git_status="\[\e[1;31m\](git)\[\e[0m\]"  # dirty
        fi
    fi

    # Build the prompt
    PS1="${open_bracket}${exit_display} ${user} ${folder}${git_status}${close_bracket}${symbol} "
}

# Update PS1 after every command
PROMPT_COMMAND='update_ps1'