- Optimize startup path #494
- Cuts fisher-related startup time to roughly 25ms
- Reduce legacy fish support (~~>=2.0~~ >=2.1)
- Read fishfile from `$fisher_path` instead of `$fish_config` #480, #479
- Don't add invalid packages to fishfile / validate fishfile #478#484#492
- Rewrite tar expansion logic / don't use `--strip-components` #489#496
- Better OpenBSD support
- Better msys2 on Windows 10 support
- Create symbolic links of original files when adding local packages #502
* With the addition of keybinding support for fish 2.x, fisher greatly
increases shell startup time (50-100ms in my testing). This is due to a
number of reasons, including using less-than-ideal builtins,
unconditionally running mkdir, unconditionally recreating
conf.d/fisher.fish, and checking for curl on startup (instead of when
curl is used).
* This patch cuts fisher-related startup time to roughly 25ms, simplifying
the code paths as much as I am able.
* The source function is removed as a compromise for speed. Fish 2.1 and
greater support `source`, and supporting fish 2.0 is not worth a hefty
speed penalty in my opinion.
* Remove curl checks, invert version logic.
* Update README to reflect fish 2.1+ requirement
Packages add key bindings via configuration snippets. As it turns out,
configuration snippets are not available in legacy fish and only fish
3.0 or newer can use the bind builtin on shell startup.
To support packages that add key bindings in legacy fish, we make a
copy of the user's fish_user_key_bindings function (if there it
exists) and create a new one that when called, will source every
*_key_bindings.fish inside \$fisher_path/conf.d and finally run our
copy of the user's fish_user_key_bindings, if it exists, to preserve
any user defined key bindings.
To be able to run code on shell startup we create a fisher.fish file
inside \$fisher_path/conf.d if running an older version of fish. When
the user upgrades to a supported fish version, we'll automatically
remove this file.
Command line usage help now tells you that running fisher will
update installed packages. Running fisher also commits fishfile
changes, but I couldn't fit all the words on the same line.
Supporting nested directories is an anti-feature. It exists only
so that we can install certain packages that are structured that
way. All functions will share the same scope and location.