function fish_prompt set -l user $USER set -l cwd $PWD set -l home $HOME set -l pr_prefix "" set -l at_sym "∈" set -l on_sym "⊢" set -l prompt_sym "λ" set -l root_dir_sym "" # git integration set -l branch_sym "" set -l branch "" set -l in_git false set -l detached false if test "$user" = "root" set prompt_sym "#" end if test "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = true set in_git true end if test "$in_git" = true if git status --porcelain=2 --branch | string match -q "*detached*" set detached true end end if test "$in_git" = true; and test "$detached" = true set on_sym "⊬" end if test "$in_git" = true set branch (git branch --show-current 2>/dev/null); or set branch (git rev-parse --short HEAD 2>/dev/null) set branch "$branch_sym"(set_color red)"$branch" end if test "$cwd" = "$home" set colored "~" echo -e (set_color white)"$pr_prefix"(set_color red)"$user"(set_color white)" $at_sym "(set_color red)"$colored"(set_color white)"\n"\ (set_color white)"$prompt_sym "(set_color normal) else if string match -q "$home/*" $cwd set -l relative (string replace "$home/" (set_color red)"~/" $cwd) set -l parts (string split "/" $relative) set -l colored "" for p in $parts if test -n "$p" set colored $colored(set_color white)$p(set_color red)"/" end end set colored (string trim -r -c "/" $colored) # if in a ~ subdir if test "$in_git" = true echo -e (set_color white)"$pr_prefix"(set_color red)"$user"(set_color white)" $at_sym "(set_color red)"$colored"\ (set_color white)"$on_sym ""$branch"(set_color white)"\n" \ (set_color white)"$prompt_sym "(set_color normal) else echo -e (set_color white)"$pr_prefix"(set_color red)"$user"(set_color white)" $at_sym "(set_color red)"$colored"(set_color white)"\n"\ (set_color white)"$prompt_sym "(set_color normal) end else set -l parts (string split "/" $cwd) set -l colored "" for p in $parts if test -n "$p" set colored $colored(set_color white)$p(set_color red)"/" end end set colored (string trim -r -c "/" $colored) set colored (set_color red)"$root_dir_sym""$colored" # if in any other dir if test "$in_git" = true echo -e (set_color white)"$pr_prefix"(set_color red)"$user"(set_color white)" $at_sym "(set_color red)"$colored"\ (set_color white)"$on_sym ""$branch"(set_color white)"\n" \ (set_color white)"$prompt_sym "(set_color normal) else echo -e (set_color white)"$pr_prefix"(set_color red)"$user"(set_color white)" $at_sym "(set_color red)"$colored"(set_color white)"\n"\ (set_color white)"$prompt_sym "(set_color normal) end end end