A Zsh-Zinit annex (i.e. an extension) that provides functionality, which allows to:
- Run programs and scripts without adding anything to
$PATH
via the automatic creation of links in$ZPFX/bin
Simply load like a regular plugin, i.e.:
zinit light zdharma-continuum/zinit-annex-binary-symlink
After executing this command you can then use the new ice-mods provided by the annex.
Exposing a binary program without modifying $PATH
– zinit-annex-binary-symlink
will automatically create a hard or
soft link to the binary in $ZPFX/bin
exposing the program to the command line as if it were being placed in $PATH
.
The command can then be accessed normally – not only in the live Zsh session, but also from any Zsh script.
There is 1 ice-modifier provided and handled by this annex. They are:
lbin''
– createslinks
for binaries and scripts.
The ice-modifier in detail:
It creates the link
that calls the actual binary. The link is created always under the same, standard and single
$PATH
entry: $ZPFX/bin
(which is ~/.zinit/polaris/bin
by default).
The optional preceding !
flag means create a soft link instead of a hard link.
Example:
% zinit ice from"gh-r" lbin"!fzf"
% zinit load junegunn/fzf-bin
…installation messages…
% ls -l $ZPFX/bin/ | awk '{print $(NF-2),$(NF-1),$NF}'
fzf -> /home/sg/.zinit/plugins/junegunn---fzf-bin/fzf
% fzf --version
0.23.1 (fc7630a)
The ice can contain globs. It will expand these when searching for the binary.
Example:
% zinit ice from"gh-r" lbin"**fzf -> myfzf"
% zinit load junegunn/fzf-bin
…installation messages…
% ls $ZPFX/bin/
myfzf
% myfzf --version
0.23.1 (fc7630a)
The ice can be empty. It will then try to create the link for:
- trailing component of the
id_as
ice, e.g.:id_as'exts/git-my'
→ it'll check if a filegit-my
exists and if yes, create the linkgit-my
, - the plugin name, e.g.: for
paulirish/git-open
it'll check if a filegit-open
exists and if yes, create the linkgit-open
, - trailing component of the snippet URL,
- for any alphabetically first executable file.
Note: The above also applies if only
!
is passed.