Subject: Fish: figure out a solution for the vendor path extension to fish

From: Meiyo Peng <[email-masked]>
Date: Mon, 07 Jan 2019 11:45:50 +0800

Hi,

> Fish doesn't pick up stuff like 'fish-guix' from store
> without modifications to the path where fish searches
> for vendor or sysadmin installed systemwide 'things'
> for fish.

I found this old thread after submitting patch #34003.  I think that
patch has probably solved your problem.

I submitted patch #34003 to update fish to 3.0.0.  In that patch, I
enabled fish to add user's and system's profiles to __extra_* variables.
So now fish can load completions and functions from user's and system's
profiles.

$fish_complete_path and $fish_function_path become this on my computer:

#+begin_example
   ~  echo $fish_complete_path | tr ' ' '\n'
  /home/meiyo/.config/fish/completions
  /gnu/store/nd3lkiyz144rwvlhvx9adxhngd5xy16f-fish-3.0.0/etc/fish/completions
  /home/meiyo/.guix-profile/etc/fish/completions
  /run/current-system/profile/etc/fish/completions
  /home/meiyo/.guix-profile/share/fish/vendor_completions.d
  /run/current-system/profile/share/fish/vendor_completions.d
  /gnu/store/nd3lkiyz144rwvlhvx9adxhngd5xy16f-fish-3.0.0/share/fish/vendor_completions.d
  /gnu/store/nd3lkiyz144rwvlhvx9adxhngd5xy16f-fish-3.0.0/share/fish/completions
  /home/meiyo/.local/share/fish/generated_completions

   ~  echo $fish_function_path | tr ' ' '\n'
  /home/meiyo/.config/fish/functions
  /gnu/store/nd3lkiyz144rwvlhvx9adxhngd5xy16f-fish-3.0.0/etc/fish/functions
  /home/meiyo/.guix-profile/etc/fish/functions
  /run/current-system/profile/etc/fish/functions
  /home/meiyo/.guix-profile/share/fish/vendor_functions.d
  /run/current-system/profile/share/fish/vendor_functions.d
  /gnu/store/nd3lkiyz144rwvlhvx9adxhngd5xy16f-fish-3.0.0/share/fish/vendor_functions.d
  /gnu/store/nd3lkiyz144rwvlhvx9adxhngd5xy16f-fish-3.0.0/share/fish/functions
#+end_example

We can then install fish completions and functions into either user's or
system's profile.  And fish will happily load them.

For example, youtube-dl provides a fish completion:

#+begin_example
  /gnu/store/3sv0ckhpyrxcssrk21s70klw14dz7x1b-youtube-dl-2018.12.17/etc/fish
  └── completions
      └── youtube-dl.fish
#+end_example

After installing youtube-dl into my user profile, youtube-dl command
completion works in fish:

#+begin_example
   ~  youtube-dl --<Hit TAB>
  --abort-on-error  (Abort downloading of further videos…)
  --abort-on-unavailable-fragment  (Abort downloading wh…)
  --add-header  (Specify a custom HTTP header and its va…)
  --add-metadata        (Write metadata to the video file)
  …and 159 more rows
#+end_example

youtube-dl is now in my user profile:

#+begin_example
  /home/meiyo/.guix-profile/etc/fish/
  └── completions
      └── youtube-dl.fish
#+end_example

> I have many more fish packages in a branch which
> I want to get into guix, but they are stuck because
> of this. Help welcome, otherwise I'll promise to
> fix it one day.

You can share your packages with us now!

--
Meiyo Peng
https://www.pengmeiyu.com/