# Utilities function blue set_color blue; printf $argv; set_color normal end function normal set_color normal; printf $argv; set_color normal end function displayed_string_length string replace -ra -- '\x1b.*?[mGKH]' '' "$argv" | string length end function padding printf "%-"$argv[1]"s%s" " " "$output" end # Current working directory prompt function fish_cwd_prompt set -l cwd (pwd) switch "$cwd" case "$HOME" printf "~" case "/" printf "/" case "*" set -l parent_dir (dirname $cwd) switch "$parent_dir" case "$HOME" printf "~/%s" (basename $cwd) case "/" printf "/%s" (basename $cwd) case "/gnu/store" printf "/gnu/store/%s" (basename $cwd) case "*" printf "%s/%s" (basename $parent_dir) (basename $cwd) end end end # Guix environment prompt function fish_environment_prompt normal "(env "; blue "%s" $GUIX_ENVIRONMENT; normal ")" end # Actual prompt function fish_prompt if test -n "$GUIX_ENVIRONMENT" set -l fish_environment_prompt_length \ (displayed_string_length (fish_environment_prompt)) set -l fish_git_prompt_length \ (displayed_string_length (fish_git_prompt)) fish_environment_prompt printf (padding (math $COLUMNS - $fish_environment_prompt_length \ - $fish_git_prompt_length)) fish_git_prompt | string replace -ra ' ' '' printf '\n' else function fish_right_prompt fish_git_prompt end end set -g fish_key_bindings fish_vi_key_bindings switch "$fish_key_bindings" case fish_vi_key_bindings fish_hybrid_key_bindings test $fish_bind_mode = 'default' && normal ':' || normal '+' end blue (whoami); normal ' at '; blue (prompt_hostname) normal ' in '; blue (fish_cwd_prompt) normal ' > ' end function fish_default_mode_prompt -d "Display vi prompt mode" # Do nothing end