forked from pure-fish/pure
-
Notifications
You must be signed in to change notification settings - Fork 0
/
fish_prompt.fish
171 lines (131 loc) Β· 5.19 KB
/
fish_prompt.fish
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# Pure
# by Rafael Rinaldi
# https://github.com/rafaelrinaldi/pure
# MIT License
# Whether or not is a fresh session
set -g __pure_fresh_session 1
# Deactivate the default virtualenv prompt so that we can add our own
set -gx VIRTUAL_ENV_DISABLE_PROMPT 1
# Symbols
__pure_set_default pure_symbol_prompt "β―"
__pure_set_default pure_symbol_git_down_arrow "β£"
__pure_set_default pure_symbol_git_up_arrow "β‘"
__pure_set_default pure_symbol_git_dirty "*"
__pure_set_default pure_symbol_horizontal_bar "β"
# Colors
__pure_set_default pure_color_red (set_color red)
__pure_set_default pure_color_green (set_color green)
__pure_set_default pure_color_blue (set_color blue)
__pure_set_default pure_color_yellow (set_color yellow)
__pure_set_default pure_color_cyan (set_color cyan)
__pure_set_default pure_color_gray (set_color 93A1A1)
__pure_set_default pure_color_normal (set_color normal)
__pure_set_default pure_username_color $pure_color_gray
__pure_set_default pure_host_color $pure_color_gray
__pure_set_default pure_root_color $pure_color_normal
# Determines whether the username and host are shown at the begining or end
# 0 - end of prompt, default
# 1 - start of prompt
# Any other value defaults to the default behaviour
__pure_set_default pure_user_host_location 0
# Show exit code of last command as a separate prompt character. As described here: https://github.com/sindresorhus/pure/wiki#show-exit-code-of-last-command-as-a-separate-prompt-character
# 0 - single prompt character, default
# 1 - separate prompt character
# Any other value defaults to the default behaviour
__pure_set_default pure_separate_prompt_on_error 0
# Max execution time of a process before its run time is shown when it exits
__pure_set_default pure_command_max_exec_time 5
function pre_prompt --on-event fish_prompt
# Template
set -l user_and_host ""
set -l current_folder (__parse_current_folder)
set -l git_branch_name ""
set -l git_dirty ""
set -l git_arrows ""
set -l command_duration ""
set -l pre_prompt ""
# Do not add a line break to a brand new session
if test $__pure_fresh_session -eq 0
set pre_prompt $pre_prompt "\n"
end
# Check if user is in an SSH session
if [ "$SSH_CONNECTION" != "" ]
set -l host (hostname -s)
set -l user (whoami)
if [ "$user" = "root" ]
set user "$pure_root_color$user"
else
set user "$pure_username_color$user"
end
# Format user and host part of prompt
set user_and_host "$user$pure_color_gray@$pure_host_color$host$pure_color_normal "
end
if test $pure_user_host_location -eq 1
set pre_prompt $pre_prompt $user_and_host
end
# Format current folder on prompt output
set pre_prompt $pre_prompt "$pure_color_blue$current_folder$pure_color_normal "
# Exit with code 1 if git is not available
if not type -fq git
return 1
end
# Check if is on a Git repository
set -l is_git_repository (command git rev-parse --is-inside-work-tree ^/dev/null)
if test -n "$is_git_repository"
set git_branch_name (__parse_git_branch)
# Check if there are files to commit
set -l is_git_dirty (command git status --porcelain --ignore-submodules ^/dev/null)
if test -n "$is_git_dirty"
set git_dirty $pure_symbol_git_dirty
end
# Check if there is an upstream configured
command git rev-parse --abbrev-ref '@{upstream}' >/dev/null ^&1; and set -l has_upstream
if set -q has_upstream
command git rev-list --left-right --count 'HEAD...@{upstream}' | read -la git_status
set -l git_arrow_left $git_status[1]
set -l git_arrow_right $git_status[2]
# If arrow is not "0", it means it's dirty
if test $git_arrow_left != 0
set git_arrows " $pure_symbol_git_up_arrow"
end
if test $git_arrow_right != 0
set git_arrows " $git_arrows$pure_symbol_git_down_arrow"
end
end
# Format Git prompt output
set pre_prompt $pre_prompt "$pure_color_gray$git_branch_name$git_dirty$pure_color_normal$pure_color_cyan$git_arrows$pure_color_normal "
end
if test $pure_user_host_location -ne 1
set pre_prompt $pre_prompt $user_and_host
end
# Prompt command execution duration
if test -n "$CMD_DURATION"
set command_duration (__format_time $CMD_DURATION $pure_command_max_exec_time)
end
set pre_prompt $pre_prompt "$pure_color_yellow$command_duration$pure_color_normal"
echo -e -s $pre_prompt
end
function fish_prompt
set -l prompt ""
# Save previous exit code
set -l exit_code $status
# Set default color symbol to green meaning it's all good!
set -l color_symbol $pure_color_green
# Handle previous failed command
if test $exit_code -ne 0
# Symbol color is red when previous command fails
set color_symbol $pure_color_red
if test $pure_separate_prompt_on_error -eq 1
set color_symbol $pure_color_red$pure_symbol_prompt$pure_color_green
end
end
# Show python virtualenv name (if activated)
if test -n "$VIRTUAL_ENV"
set prompt $prompt $pure_color_gray(basename "$VIRTUAL_ENV")"$pure_color_normal "
end
# vi-mode indicator
set mode_indicator (fish_default_mode_prompt)
set prompt $prompt "$mode_indicator$color_symbol$pure_symbol_prompt$pure_color_normal "
echo -e -s $prompt
set __pure_fresh_session 0
end