Sanchayan Maity
e541b2d745
- Drop starship. This also helps us to get rid of ttf-font-nerd install which is a dependency of starship. - Source fnm env only once on login. This makes fish shell/terminal load much much faster. Add an alias to invoke fnm use easily. - Set path or environment variables only when required path or binary exists. - Introduce a function to profile fish easily. - Borrow the fish prompt logic from Alexis King's configuration. - Factor out key binding related settings. - Make su launch fish. Prompt and other ideas for clean up taken from https://github.com/lexi-lambda/dotfiles/tree/master/fish
78 lines
2.3 KiB
Fish
78 lines
2.3 KiB
Fish
set --path -a NESTED_FISH_LABELS
|
|
|
|
function fish_prompt
|
|
set -l command_status $status
|
|
set -l question_mark_in_circle '?'\u20dd
|
|
set_color red; echo -n '# '
|
|
|
|
# Print nesting
|
|
if test (count $NESTED_FISH_LABELS) -gt 0
|
|
echo -ns '[' (set_color yellow) \
|
|
(string join (set_color red)/(set_color yellow) $NESTED_FISH_LABELS) \
|
|
(set_color red) '] '
|
|
end
|
|
|
|
# Print current location
|
|
if [ "$PWD" = "$HOME" ]
|
|
set_color green; echo -n '~'
|
|
else
|
|
set -l parent_dir (dirname "$PWD")
|
|
set_color blue
|
|
if [ "$parent_dir" = "$HOME" ]
|
|
echo -n '~'
|
|
else
|
|
echo -n (basename "$parent_dir")
|
|
end
|
|
echo -n ' → '
|
|
set_color green; echo -n (basename "$PWD")
|
|
end
|
|
echo -n ' '
|
|
|
|
# Show some pretty git information if we're in a git repo
|
|
set -l is_git_worktree (git rev-parse --is-inside-work-tree 2>/dev/null)
|
|
if test "$is_git_worktree" = true
|
|
if git rev-parse '@{u}' >/dev/null 2>&1
|
|
# If an upstream is set, check how far ahead/behind the branch is
|
|
set -l git_commits_ahead (git rev-list '@{u}..HEAD' | wc -l | awk '{print $1}')
|
|
set -l git_commits_behind (git rev-list 'HEAD..@{u}' | wc -l | awk '{print $1}')
|
|
if [ \( "$git_commits_ahead" -eq 0 \) -a \( "$git_commits_behind" -eq 0 \) ]
|
|
set_color blue; echo -n '⦿'
|
|
else
|
|
if [ "$git_commits_behind" -gt 0 ]
|
|
set_color red; echo -n "↓$git_commits_behind"
|
|
end
|
|
if [ "$git_commits_ahead" -gt 0 ]
|
|
set_color brred; echo -n "↑$git_commits_ahead"
|
|
end
|
|
end
|
|
else
|
|
# Otherwise, indicate that an upstream is unknown
|
|
set_color brred; echo -n "$question_mark_in_circle"
|
|
end
|
|
|
|
set -l git_branch (git branch 2>/dev/null | sed -n '/\* /s///p')
|
|
if test -n "$git_branch"
|
|
set_color blue; echo -n ' ['
|
|
# Color the branch name differently if the working tree is dirty
|
|
if [ (count (git status --porcelain)) -gt 0 ]
|
|
set_color brred
|
|
else
|
|
set_color yellow
|
|
end
|
|
echo -n "$git_branch"
|
|
set_color blue; echo -n '] '
|
|
end
|
|
end
|
|
|
|
if [ "$command_status" -eq 0 ]
|
|
set_color brcyan; echo -n 'λ: '
|
|
else
|
|
set_color red; echo -n 'λ! '
|
|
end
|
|
set_color normal
|
|
|
|
# Color the hostname in the prompt dynamically whenever connected through SSH
|
|
if set -q SSH_TTY
|
|
set -g fish_color_host brred
|
|
end
|
|
end
|