aboutsummaryrefslogtreecommitdiff
path: root/config/zsh/theme.zsh
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'