aboutsummaryrefslogtreecommitdiff
path: root/.config/shell/git-prompts/kj_sh604.zsh
blob: 0bbe0308d04fffb7be93b88bebf9c2efb10f3839 (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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# Name: [Pure](https://github.com/sindresorhus/pure) clone
# Description:
#  This clone of the Pure prompt has support for Python virtualenvs, but none of the timing
#  features or a vi mode. If you are using [fzf](https://github.com/junegunn/fzf), source the
#  example after sourcing fzf's keybindings.
#
#  If you want to try other examples again after sourcing the Pure example, you might have to
#  restart your shell, because this prompt will always print a newline between prompts.

ZSH_GIT_PROMPT_FORCE_BLANK=1
ZSH_GIT_PROMPT_SHOW_UPSTREAM="yes"

ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg_no_bold[white]%}("
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$fg_no_bold[white]%}) "
ZSH_THEME_GIT_PROMPT_SEPARATOR=" "
ZSH_THEME_GIT_PROMPT_DETACHED="%{$fg_no_bold[cyan]%}:"
ZSH_THEME_GIT_PROMPT_BRANCH="%{$fg_no_bold[magenta]%}"
ZSH_THEME_GIT_PROMPT_UPSTREAM_SYMBOL="%{$fg_bold[yellow]%}^ "
ZSH_THEME_GIT_PROMPT_UPSTREAM_PREFIX="%{$fg[red]%}(%{$fg[yellow]%}"
ZSH_THEME_GIT_PROMPT_UPSTREAM_SUFFIX="%{$fg[red]%})"
ZSH_THEME_GIT_PROMPT_BEHIND="%{$fg_no_bold[white]%}↓"
ZSH_THEME_GIT_PROMPT_AHEAD="%{$fg_no_bold[white]%}↑"
ZSH_THEME_GIT_PROMPT_UNMERGED="%{$fg[red]%}x"
ZSH_THEME_GIT_PROMPT_STAGED="%{$fg[yellow]%}•"
ZSH_THEME_GIT_PROMPT_UNSTAGED="%{$fg[blue]%}+"
ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[blue]%}U"
ZSH_THEME_GIT_PROMPT_STASHED="%{$fg[blue]%}☐"
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg_bold[green]%}✓"

# In the second line of the prompt $psvar[12] is read
PROMPT=$'%F{cyan}%~%f %F{242}$(gitprompt)%f%(12V.%F{242}%12v%f .)%(?.%F{white}.%F{red})%%%f '

setup() {
    [[ -n $_PROMPT_INITIALIZED ]] && return
    _PROMPT_INITIALIZED=1

    # Prevent Python virtualenv from modifying the prompt
    export VIRTUAL_ENV_DISABLE_PROMPT=1

    # Set $psvar[12] to the current Python virtualenv
    function _prompt_update_venv() {
        psvar[12]=
        if [[ -n $VIRTUAL_ENV ]] && [[ -n $VIRTUAL_ENV_DISABLE_PROMPT ]]; then
            psvar[12]="${VIRTUAL_ENV:t}"
        fi
    }
    add-zsh-hook precmd _prompt_update_venv

    # Draw a newline between every prompt
    function _prompt_newline(){
        if [[ -z "$_PROMPT_NEWLINE" ]]; then
            _PROMPT_NEWLINE=1
        elif [[ -n "$_PROMPT_NEWLINE" ]]; then
            echo
        fi
    }
    add-zsh-hook precmd _prompt_newline

    # To avoid glitching with fzf's alt+c binding we override the fzf-redraw-prompt widget.
    # The widget by default reruns all precmd hooks, which prints the newline again.
    # We therefore run all precmd hooks except _prompt_newline.
    function fzf-redraw-prompt() {
        local precmd
        for precmd in ${precmd_functions:#_prompt_newline}; do
            $precmd
        done
        zle reset-prompt
    }
}
setup