Files
fish/functions/fish_prompt.fish
2025-04-12 23:13:12 +08:00

34 lines
1.4 KiB
Fish

function fish_prompt --description 'Informative prompt'
#Save the return status of the previous command
set -l last_pipestatus $pipestatus
set -lx __fish_last_status $status # Export for __fish_print_pipestatus.
if functions -q fish_is_root_user; and fish_is_root_user
printf '%s@%s %s%s%s# ' $USER (prompt_hostname) (set -q fish_color_cwd_root
and set_color $fish_color_cwd_root
or set_color $fish_color_cwd) \
(prompt_pwd) (set_color normal)
else
set -l status_color (set_color $fish_color_status)
set -l statusb_color (set_color --bold $fish_color_status)
set -l pipestatus_string (__fish_print_pipestatus "[" "]" "|" "$status_color" "$statusb_color" $last_pipestatus)
set -l cwd (pwd)
if git rev-parse --is-inside-work-tree >/dev/null 2>&1
set -l git_root (git rev-parse --show-toplevel)
set -l git_root_basename (basename "$git_root")
set cwd (string replace --regex "^$git_root" "($git_root_basename)" "$cwd")
end
set -l hostname_color (set_color brblue)
if test -n "$SSH_CLIENT"
set hostname_color (set_color magenta)
end
printf '[%s] %s%s@%s%s %s%s%s%s %s %s\n> ' (date "+%H:%M:%S") \
(set_color brblue) "$USER" "$hostname_color" (prompt_hostname) \
(set_color $fish_color_cwd) "$cwd" \
(set_color yellow) "$(fish_git_prompt)" \
"$pipestatus_string" \
(set_color normal)
end
end