summaryrefslogtreecommitdiff
path: root/src/.bashrc_ps1
blob: 7c890d3c2efe47543df6faa850e4e0881b60a1f5 (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
46
47
48
#Dynamic mic 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\]r\e[0m\]"
        else
                local user="\[\e[1;36m\]u\e[0m\]"
                        fi

        # Hostname
        local hostname="\[\e[1;33m\]\h\e[0m\]"

        # 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}-${hostname} ${folder}${git_status}${close_bracket}${symbol} "
}

# Update PS1 after every command
PROMPT_COMMAND='update_ps1'