From 93734ca6784fd6951026cb39c35c6db153322131 Mon Sep 17 00:00:00 2001 From: Roy Dumblauskas Date: Sun, 14 Jun 2026 12:00:12 -0500 Subject: [PATCH] fish funcs --- home.nix | 133 +++++++++++++++++++++++++++---------------------------- 1 file changed, 65 insertions(+), 68 deletions(-) diff --git a/home.nix b/home.nix index 3d74254..191098c 100755 --- a/home.nix +++ b/home.nix @@ -45,91 +45,88 @@ functions.fish_greeting = ""; functions.fish_prompt = '' - function fish_prompt --description 'Write out the prompt' - set -l last_pipestatus $pipestatus - set -lx __fish_last_status $status # Export for __fish_print_pipestatus. - set -l normal (set_color normal) - set -q fish_color_status - or set -g fish_color_status red + set -l last_pipestatus $pipestatus + set -lx __fish_last_status $status # Export for __fish_print_pipestatus. + set -l normal (set_color normal) + set -q fish_color_status + or set -g fish_color_status red - # Color the prompt differently when we're root - set -l color_cwd $fish_color_cwd - set -l suffix '>' - if functions -q fish_is_root_user; and fish_is_root_user - if set -q fish_color_cwd_root - set color_cwd $fish_color_cwd_root - end - set suffix '#' + # Color the prompt differently when we're root + set -l color_cwd $fish_color_cwd + set -l suffix '>' + if functions -q fish_is_root_user; and fish_is_root_user + if set -q fish_color_cwd_root + set color_cwd $fish_color_cwd_root end - - # Write pipestatus - # If the status was carried over (if no command is issued or if `set` leaves the status untouched), don't bold it. - set -l bold_flag --bold - set -q __fish_prompt_status_generation; or set -g __fish_prompt_status_generation $status_generation - if test $__fish_prompt_status_generation = $status_generation - set bold_flag - end - set __fish_prompt_status_generation $status_generation - set -l status_color (set_color $fish_color_status) - 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 " "$prompt_status $suffix " " + set suffix '#' end - function prompt_pwd --description 'short CWD for the prompt' - set -l options h/help d/dir-length= D/full-length-dirs= - argparse -n prompt_pwd $options -- $argv - or return + # Write pipestatus + # If the status was carried over (if no command is issued or if `set` leaves the status untouched), don't bold it. + set -l bold_flag --bold + set -q __fish_prompt_status_generation; or set -g __fish_prompt_status_generation $status_generation + if test $__fish_prompt_status_generation = $status_generation + set bold_flag + end + set __fish_prompt_status_generation $status_generation + set -l status_color (set_color $fish_color_status) + set -l statusb_color (set_color $bold_flag $fish_color_status) + set -l prompt_status (__fish_print_pipestatus "[" "]" "|" "$status_color" "$statusb_color" $last_pipestatus) - if set -q _flag_help - __fish_print_help prompt_pwd - return 0 - end + echo -n -s (prompt_login)' ' (set_color $color_cwd) (prompt_pwd) $normal (fish_vcs_prompt) $normal " "$prompt_status $suffix " " + ''; - set -q argv[1] - or set argv $PWD + functions.prompt_pwd = '' + set -l options h/help d/dir-length= D/full-length-dirs= + argparse -n prompt_pwd $options -- $argv + or return - set -ql _flag_d - and set -l fish_prompt_pwd_dir_length $_flag_d + if set -q _flag_help + __fish_print_help prompt_pwd + return 0 + end - set -q fish_prompt_pwd_dir_length - or set -l fish_prompt_pwd_dir_length 1 + set -q argv[1] + or set argv $PWD - set -l fulldirs 0 - set -ql _flag_D - and set -l fish_prompt_pwd_full_dirs $_flag_D + set -ql _flag_d + and set -l fish_prompt_pwd_dir_length $_flag_d - set -q fish_prompt_pwd_full_dirs - or set -l fish_prompt_pwd_full_dirs 1 + set -q fish_prompt_pwd_dir_length + or set -l fish_prompt_pwd_dir_length 1 - for path in $argv - # Replace $HOME with "~" - set -l realhome (string escape --style=regex -- ~) - set -l tmp (string replace -r '^'"$realhome"'($|/)' '~$1' $path) + set -l fulldirs 0 + set -ql _flag_D + and set -l fish_prompt_pwd_full_dirs $_flag_D - if test "$fish_prompt_pwd_dir_length" -eq 0 - echo $tmp - else - # Shorten to at most $fish_prompt_pwd_dir_length characters per directory - # with full-length-dirs components left at full length. - set -l full - if test $fish_prompt_pwd_full_dirs -gt 0 - set -l all (string split -m (math $fish_prompt_pwd_full_dirs - 1) -r / $tmp) - set tmp $all[1] - set full $all[2..] - else if test $fish_prompt_pwd_full_dirs -eq 0 - # 0 means not even the last component is kept - string replace -ar '(\.?[^/]{'"$fish_prompt_pwd_dir_length"'})[^/]*' '$1' $tmp - continue - end + set -q fish_prompt_pwd_full_dirs + or set -l fish_prompt_pwd_full_dirs 1 - string join / -- (string replace -ar -- '(\.?[^/]{'"$fish_prompt_pwd_dir_length"'})[^/]*/' '$1/' $tmp) $full + for path in $argv + # Replace $HOME with "~" + set -l realhome (string escape --style=regex -- ~) + set -l tmp (string replace -r '^'"$realhome"'($|/)' '~$1' $path) + + if test "$fish_prompt_pwd_dir_length" -eq 0 + echo $tmp + else + # Shorten to at most $fish_prompt_pwd_dir_length characters per directory + # with full-length-dirs components left at full length. + set -l full + if test $fish_prompt_pwd_full_dirs -gt 0 + set -l all (string split -m (math $fish_prompt_pwd_full_dirs - 1) -r / $tmp) + set tmp $all[1] + set full $all[2..] + else if test $fish_prompt_pwd_full_dirs -eq 0 + # 0 means not even the last component is kept + string replace -ar '(\.?[^/]{'"$fish_prompt_pwd_dir_length"'})[^/]*' '$1' $tmp + continue end + + string join / -- (string replace -ar -- '(\.?[^/]{'"$fish_prompt_pwd_dir_length"'})[^/]*/' '$1/' $tmp) $full end end ''; - }; programs.git = {