blob: baeae3e483148d88241cf4a896c8713f60755222 (
plain) (
blame)
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
|
setopt prompt_subst
# Theme
COL_ACCENT=13;
COL_DIR=$COL_ACCENT;
COL_STATUS_ERROR=red;
COL_STATUS_BG=cyan;
COL_GIT_DIRTY=yellow;
COL_GIT_NORMAL=green;
segment() { echo -n "%K{$2}%F{$3} $1 %f%k"; }
git_changes() { git status --porcelain 2> /dev/null | wc -l; }
# Prompt dir
p_dir() {
segment "%2~" $COL_DIR white;
}
# Prompt terminal status
p_status() {
[[ ! -z "$WITH_NIX_PREFIX" ]] && echo -n "$(segment "[NIX:$WITH_NIX_PREFIX] " black $COL_ACCENT)";
echo -n "%(?..$(segment 'x' black $COL_STATUS_ERROR))"
echo -n "%(1j.$(segment '(jobs: %j)' black $COL_STATUS_BG).)"
}
p_git() {
local ref dirty mode repo_path color;
if $(git rev-parse --is-inside-work-tree >/dev/null 2>&1); then
repo_path=$(git rev-parse --git-dir 2>/dev/null);
ref=$(git symbolic-ref HEAD 2> /dev/null) || ref="➦ $(git rev-parse --short HEAD 2> /dev/null)";
changes=$(git_changes);
color=$([[ ! $changes = "0" ]] && echo $COL_GIT_DIRTY || echo $COL_GIT_NORMAL);
dirty=$([[ ! $changes = "0" ]] && echo " ($changes)");
segment "${ref/refs\/heads\//}$dirty" $color black;
fi
}
prompt() {
RETVAL=$?;
p_status;
p_dir;
echo -n '$(p_git)';
segment "λ" black white;
}
export PROMPT="$(prompt) ";
#export RPROMPT='wow'
|