zsh plugin manager written in rust
<img src=”zrat.png” alt=”zrat” title=”zrat” align=”right” width=200 />
Quick, simple zsh plugin manager
zr 0.9.0
by Jonathan Dahan <hi@jonathan.is>
zr [[http://example.com]plugin/name[.git/path/to/file.zsh]] fetch or update plugins and output sourceable zsh
zr help show help
You can use crates.io and cargo to just cargo install zr
Add this to your ~/.zshrc:
# Generate new ~/.zr/init.zsh if it does not exist or ~/.zshrc is newer
if [[ ! -f ~/.config/zr.zsh ]] || [[ ~/.zshrc -nt ~/.config/zr.zsh ]]; then
zr load \
frmendes/geometry \
jedahan/geometry-hydrate \
junegunn/fzf/shell/key-bindings.zsh \
> ~/.config/zr.zsh
fi
source ~/.config/zr.zsh
zr supports four identifier formats, note that the last format requires .git
as a delimeter.
format | resolves to |
---|---|
author/name |
*.zsh from https://github.com/author/name |
author/name/file.zsh |
file.zsh from https://github.com/author/name |
https://gitlab.com/a/plugin |
*.zsh from https://gitlab.com/a/plugin |
https://gitlab.com/a/plugin.git/file.zsh |
file.zsh from https://gitlab.com/a/plugin.git. The .git is used as a delimeter, and is required. |
The following benchmark.zsh takes 171ms total, with 26ms spent in zr load
for my 2012 13” retina macbook pro.
# install hyperfine for benchmarking
cargo install hyperfine
# benchmark zr init time
hyperfine --warmup 3 'zsh -d -f -l -c "source benchmark.zsh && zrinit && exit"' | grep Time
Time (mean ± σ): 26.0 ms ± 1.6 ms
# benchmark total zsh load time
hyperfine --warmup 3 'zsh -d -f -l -c "source benchmark.zsh && zrinit && source ~/.zr/init.zsh && exit"' | grep Time
Time (mean ± σ): 171.6 ms ± 4.4 ms
# benchmark.zsh
function zrinit {
zr load sorin-ionescu/prezto/modules/git/alias.zsh \
sorin-ionescu/prezto/modules/history/init.zsh \
junegunn/fzf/shell/key-bindings.zsh \
zsh-users/zsh-autosuggestions \
zdharma/fast-syntax-highlighting \
molovo/tipz \
geometry-zsh/geometry \
jedahan/geometry-hydrate \
jedahan/geometry-todo \
geometry-zsh/geometry \
ael-code/zsh-colored-man-pages \
momo-lab/zsh-abbrev-alias \
jedahan/alacritty-completions \
zpm-zsh/ssh
}