if status is-interactive stty -ixon set fish_greeting fish_vi_key_bindings bind \ee edit_command_buffer set fish_cursor_default block blink set fish_cursor_insert line blink set fish_cursor_replace_one underscore blink set fish_cursor_visual block abbr --add --global l ls abbr --add --global lsa ls -a abbr --add --global la ls -a abbr --add --global lsl ls -l abbr --add --global ll ls -l abbr --add --global lsla ls -la abbr --add --global lla ls -la abbr --add --global cp cp -n abbr --add --global cpr cp -rn abbr --add --global mv mv -n abbr --add --global rm rm -i abbr --add --global rmr rm -ri abbr --add --global rr rm -ri abbr --add --global v hx abbr --add --global g git abbr --add --global gc git commit abbr --add --global gco git checkout abbr --add --global gs git status abbr --add --global gd git diff abbr --add --global gdh git diff HEAD abbr --add --global ga git add abbr --add --global s sudo abbr --add --global g grep abbr --add --global gn grep -n abbr --add --global gin grep -in abbr --add --global grin grep -rin abbr --add --global df df -h abbr --add --global du du -h abbr --add --global c cd abbr --add --global cd. cd . abbr --add --global cd.. cd .. function ls; command ls --classify=auto --color=auto $argv; end function ffmpeg; command ffmpeg -hide_banner $argv; end function ffprobe; command ffprobe -hide_banner $argv; end function ffplay; command ffplay -hide_banner $argv; end function fish_prompt if test $CMD_DURATION -gt 10000 echo -ne '\a' end set -l __last_command_exit_status $status if not set -q -g __fish_arrow_functions_defined set -g __fish_arrow_functions_defined function _git_branch_name set -l branch (git symbolic-ref --quiet HEAD 2>/dev/null) if set -q branch[1] echo (string replace -r '^refs/heads/' '' $branch) else echo (git rev-parse --short HEAD 2>/dev/null) end end function _is_git_dirty not command git diff-index --cached --quiet HEAD -- &>/dev/null or not command git diff --no-ext-diff --quiet --exit-code &>/dev/null end function _is_git_repo type -q git or return 1 git rev-parse --git-dir >/dev/null 2>&1 end function _hg_branch_name echo (hg branch 2>/dev/null) end function _is_hg_dirty set -l stat (hg status -mard 2>/dev/null) test -n "$stat" end function _is_hg_repo fish_print_hg_root >/dev/null end function _repo_branch_name _$argv[1]_branch_name end function _is_repo_dirty _is_$argv[1]_dirty end function _repo_type if _is_hg_repo echo hg return 0 else if _is_git_repo echo git return 0 end return 1 end end set -l cyan (set_color -o cyan) set -l yellow (set_color -o yellow) set -l red (set_color -o red) set -l green (set_color -o green) set -l blue (set_color -o blue) set -l normal (set_color normal) set -l prompt_color "$green" if test $__last_command_exit_status != 0 set prompt_color "$red" end set -l prompt "$prompt_color\$" if fish_is_root_user set prompt "$prompt_color#" end set -l cwd $cyan(basename -- (prompt_pwd)) set -l repo_info if set -l repo_type (_repo_type) set -l repo_branch $red(_repo_branch_name $repo_type) set repo_info "$blue $repo_type:($repo_branch$blue)" if _is_repo_dirty $repo_type set -l dirty "$yellow ✗" set repo_info "$repo_info$dirty" end end echo -n -s -- $cwd $repo_info ' ' $prompt ' '$normal end direnv hook fish | source end