diff --git a/home/features/cli/fish.nix b/home/features/cli/fish.nix index 37a8a2c..4b4b1ad 100644 --- a/home/features/cli/fish.nix +++ b/home/features/cli/fish.nix @@ -36,13 +36,6 @@ set -q fish_color_status or set -g fish_color_status red - # Detect if we're in a nix-shell - set -l nix_shell_info ( - if test -n "$IN_NIX_SHELL" - echo -n "[nix-shell] " - end - ) - # Color the prompt differently when we're root set -l color_cwd $fish_color_cwd set -l suffix '>' @@ -65,7 +58,47 @@ set -l statusb_color (set_color $bold_flag $fish_color_status) set -l prompt_status (__fish_print_pipestatus "[" "]" "|" "$status_color" "$statusb_color" $last_pipestatus) - echo -n -s (prompt_login)' ' (set_color $color_cwd) (prompt_pwd) $normal (fish_vcs_prompt) $normal " "$nix_shell_info $prompt_status $suffix " " + echo -n -s (prompt_login)' ' (set_color $color_cwd) (prompt_pwd) $normal " "$nix_shell_info $prompt_status $suffix " " + ''; + fish_right_prompt = '' + set -l normal (set_color normal) + # vcs + set -g __fish_git_prompt_showdirtystate 1 + set -g __fish_git_prompt_showuntrackedfiles 1 + set -g __fish_git_prompt_showstashstate 1 + set -g __fish_git_prompt_showupstream informative + set -g __fish_git_prompt_showcolorhints 1 + set -g __fish_git_prompt_use_informative_chars 1 + string match -qi "*.utf-8" -- $LANG $LC_CTYPE $LC_ALL + and set -g __fish_git_prompt_char_dirtystate \U1F4a9 + set -g __fish_git_prompt_char_untrackedfiles "?" + set -l vcs (fish_vcs_prompt '(%s)' 2>/dev/null) + + # timestamp + set -l d (set_color brgrey)(date "+%R")$normal + + # execution duration + set -l duration "$cmd_duration$CMD_DURATION" + if test $duration -gt 100 + set duration (math $duration / 1000)s + else + set duration + end + + # virtual env + set -q VIRTUAL_ENV_DISABLE_PROMPT + or set -g VIRTUAL_ENV_DISABLE_PROMPT true + set -q VIRTUAL_ENV + and set -l venv (string replace -r '.*/' "" -- "$VIRTUAL_ENV") + + # nix-shell + set -l nix ( + if test -n "$IN_NIX_SHELL" + echo -n "[nix]" + end + ) + + string join " " -- $duration $venv $nix $vcs $d ''; get-local-ip = "ip addr show $(ip route | grep default | awk '{print $5}') | grep 'inet ' | awk '{print $2}' | cut -d/ -f1";