summaryrefslogtreecommitdiff
path: root/config/fish/functions/fish_prompt.fish
diff options
context:
space:
mode:
authorKjetil Orbekk <kjetil.orbekk@gmail.com>2016-05-13 13:04:38 -0400
committerKjetil Orbekk <kjetil.orbekk@gmail.com>2016-05-13 13:10:20 -0400
commit6aa10f9bb6e2bebb39ad67ac7a0748b2b923eb8a (patch)
treee82efbdc9710bcfd1df6aad532570fd22f4bc2ad /config/fish/functions/fish_prompt.fish
parent6f4e3136db7b5fb80f84abff16837d78a0319a01 (diff)
Add fish configuration.
Diffstat (limited to 'config/fish/functions/fish_prompt.fish')
-rw-r--r--config/fish/functions/fish_prompt.fish110
1 files changed, 110 insertions, 0 deletions
diff --git a/config/fish/functions/fish_prompt.fish b/config/fish/functions/fish_prompt.fish
new file mode 100644
index 0000000..c45066c
--- /dev/null
+++ b/config/fish/functions/fish_prompt.fish
@@ -0,0 +1,110 @@
+# vim: set ft=sh:
+
+# Pure
+# by Rafael Rinaldi
+# https://github.com/rafaelrinaldi/pure
+# MIT License
+
+# Whether or not is a fresh session
+set -g fresh_session 1
+
+# Symbols
+
+set -g symbol_prompt "❯"
+set -g symbol_git_down_arrow "⇣"
+set -g symbol_git_up_arrow "⇡"
+set -g symbol_git_dirty "*"
+set -g symbol_horizontal_bar "—"
+
+# Colors
+
+set -g color_red (set_color red)
+set -g color_green (set_color green)
+set -g color_blue (set_color blue)
+set -g color_yellow (set_color yellow)
+set -g color_cyan (set_color cyan)
+set -g color_gray (set_color 93A1A1)
+set -g color_normal (set_color normal)
+
+function fish_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 $color_green
+
+ # Template
+
+ 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 prompt ""
+
+ # Do not add a line break to a brand new session
+ if test $fresh_session -eq 0
+ set prompt $prompt "\n"
+ end
+
+ # Prompt failed command execution duration
+ set command_duration (__format_time $CMD_DURATION)
+
+ # Format current folder on prompt output
+ set prompt $prompt "$color_yellow$command_duration$color_blue$current_folder$color_normal "
+
+ # Handle previous failed command
+ if test $exit_code -ne 0
+ # Symbol color is red when previous command fails
+ set color_symbol $color_red
+
+ set prompt $prompt "$color_yellow$command_duration$color_normal"
+ end
+
+ # Exit with code 1 if git is not available
+ if not which git >/dev/null
+ 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 $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
+ set -l git_status (command git rev-list --left-right --count 'HEAD...@{upstream}' | sed "s/[[:blank:]]/ /" ^/dev/null)
+
+ # Resolve Git arrows by treating `git_status` as an array
+ set -l git_arrow_left (command echo $git_status | cut -c 1 ^/dev/null)
+ set -l git_arrow_right (command echo $git_status | cut -c 3 ^/dev/null)
+
+ # If arrow is not "0", it means it's dirty
+ if test $git_arrow_left -ne "0"
+ set git_arrows $symbol_git_up_arrow
+ end
+
+ if test $git_arrow_right -ne "0"
+ set git_arrows $git_arrows$symbol_git_down_arrow
+ end
+ end
+
+ # Format Git prompt output
+ set prompt $prompt "$color_gray$git_branch_name$git_dirty$color_normal\t$color_cyan$git_arrows$color_normal"
+ end
+
+ set prompt $prompt "\n$color_symbol$symbol_prompt$color_normal "
+
+ echo -e -s $prompt
+
+ set fresh_session 0
+end