summaryrefslogtreecommitdiffstats
path: root/conf.d/c_star.fish
blob: 64f647a7fc2276981c6c3d0b46975644c95d1c6d (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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
set -q c_star_date_format || set -g c_star_date_format "%Y-%m-%dT%H:%M:%S%z"
set -g c_star_default_bg 333333
set -g c_star_default_fg a9b7c6
set -q c_star_user_bg || set -g c_star_user_bg $c_star_default_fg
set -q c_star_user_fg || set -g c_star_user_fg $c_star_default_bg
set -q c_star_pwd_bg || set -g c_star_pwd_bg $c_star_default_bg
set -q c_star_pwd_fg || set -g c_star_pwd_fg $c_star_default_fg
set -q c_star_git_bg || set -g c_star_git_bg $c_star_default_fg
set -q c_star_git_fg || set -g c_star_git_fg $c_star_default_bg
set -q c_star_user_marker_default_bg || set -g c_star_user_marker_default_bg $c_star_default_bg
set -q c_star_user_marker_fg || set -g c_star_user_marker_fg $c_star_default_fg
set -q c_star_datetime_bg || set -g c_star_datetime_bg $c_star_default_bg
set -q c_star_datetime_fg || set -g c_star_datetime_fg $c_star_default_fg
set -q c_star_command_time_bg || set -g c_star_command_time_bg $c_star_default_fg
set -q c_star_command_time_fg || set -g c_star_command_time_fg $c_star_default_bg

set -g _c_star_git_async _c_star_git_async_$fish_pid
set -g _c_star_git_cached_pwd _c_star_git_cached_pwd_$fish_pid

function c_star_colorize
  set -l bg $argv[3]
  set -l fg $argv[4]
  set -g "$argv[1]" "$(set_color -b $bg $fg) $argv[2] $(set_color normal)"
end

function c_star_command_time --on-event fish_postexec --on-variable c_star_command_time_bg --on-variable c_star_command_time_fg
  c_star_colorize c_star_command_time $CMD_DURATION'ms' $c_star_command_time_bg $c_star_command_time_fg
end

function c_star_datetime --on-event fish_prompt --on-event fish_postexec --on-variable c_star_date_format  --on-variable c_star_datetime_bg --on-variable c_star_datetime_fg
  c_star_colorize c_star_datetime (date "+$c_star_date_format") $c_star_datetime_bg $c_star_datetime_fg
end

function c_star_git_query_async --on-event fish_prompt --on-variable PWD --on-variable c_star_git_bg --on-variable c_star_git_fg
  if test "$(git rev-parse --is-inside-work-tree 2> /dev/null)" != "true"
    set -Ue $_c_star_git_async
    set -Ue $_c_star_git_cached_pwd
  end

  set -l cached_pwd $$_c_star_git_cached_pwd

  if test "$PWD" != "$cached_pwd"
    set -Ue $_c_star_git_async
  end

  fish --private --command "set -x __fish_git_prompt_show_informative_status 1 && \
      set -U $_c_star_git_async (fish_git_prompt '%s') && \
      set -q $_c_star_git_async || set -Ue $_c_star_git_async $git_status && \
      set -U $_c_star_git_cached_pwd \"$PWD\"
  "&
end

function c_star_git --on-variable $_c_star_git_async
  set git_status $$_c_star_git_async
  if test -n "$git_status"
    c_star_colorize c_star_git $git_status $c_star_git_bg $c_star_git_fg
  else
    set -ge c_star_git
  end
  commandline --function repaint
end

function c_star_user --on-event fish_prompt --on-variable c_star_user_bg --on-variable c_star_user_fg --on-variable SSH_CONNECTION
  set -l user_string (whoami)
  if test -n "$SSH_CONNECTION"
    set -f user_string "$user_string@$(hostname)"
  end
  c_star_colorize c_star_user "$user_string" $c_star_user_bg $c_star_user_fg
end

function c_star_user_marker --on-event fish_prompt  --on-variable c_star_user_marker_default_bg --on-variable c_star_user_marker_fg
  switch (whoami)
    case "root"
      set -g c_star_user_marker_bg red
      set -f char "#"
    case '*'
      set -g c_star_user_marker_bg $c_star_user_marker_default_bg
      set -f char "\$"
  end
  c_star_colorize c_star_user_marker $char $c_star_user_marker_bg $c_star_user_marker_fg
end

function c_star_pwd --on-variable PWD --on-event fish_prompt --on-variable c_star_pwd_bg --on-variable c_star_pwd_fg
  c_star_colorize c_star_pwd (prompt_pwd) $c_star_pwd_bg $c_star_pwd_fg
end

function c_star_cleanup --on-event fish_exit
    set -Ue $_c_star_git_async
    set -Ue $_c_star_git_cached_pwd
end