しました
github.com
OSごとにbrewだとかaptだとかpacmanだとか、その都度使い分けるのはいいんですが、インストールスクリプトを書くのが難しすぎるんですよね。
というわけでzinit
に任せられるところは任せました。
使い心地は結構いいなぁという印象です。
zinit ice
zinit ice
は zinit
でプラグインをロードするzinit load
かzinit light
を修飾する機能を持ちます。ここではcdxをzinit
で管理することを例にします。
zinit ice has"go" atclone"go install" atpull"%atclone" atload'eval "$(go-cdx --init)"'
zinit light xztaityozx/go-cdx
has
- あとに続くコマンドが実行できるときのみロードする。
atclone
atpull
- pullした後に実行するコマンドを指定できる。
%atclone
と書くとatclone
で書いたコマンドが実行できる。
atload
- プラグインを読み込んだ後に実行するコマンドを指定できる。
というわけで、上記のzinit
は、「xztaityozx/go-cdxはgo
が使えるときにのみロードする。これをcloneとpullしたときにはgo install
を実行して、ロード時にはeval "$(go-cdx --init)"
を実行する。」という意味になるわけです。
github releaseから拾ってくる
zinit
のいいなぁポイントの一つにzinit ice
のfrom
に"gh-r"
を指定すると、GitHub ReleasesからLatestを拾ってこられるというのがあります。
例としてchoosenim
をGitHub Releasesから拾ってくるようにしてみます。
ENV_OS="linux"
zinit ice as"program" from"gh-r" bpick"*$ENV_OS*_amd64"
zinit light dom96/choosenim
from
にgh-r
を指定して、GitHub Releasesから拾ってくるようにします。このとき、Releasesにアップロードされているアーカイブからどれかを選ばないといけません。ここでbpick
を使うと、引数に渡したパターンに最初にマッチしたものをダウンロードしてきます。ここでは*linux*_amd64
にマッチするものですね。
.zinit以下以外に配置したい
vim-plugもzinit
で管理したいのですが、配置場所はドキュメント通りに~/.local/share/nvim/site/autoload/plug.vim
にしたいとします。こういうときはcloneonly
とcp/mv
を使えばうまくできそうです。
zinit ice cloneonly cp"plug.vim -> ~/.local/share/nvim/site/autoload/plug.vim"
zinit light junegunn/vim-plug
cloneonly
はそのままダウンロードのみを行うオプションです。cp"{src} -> {dst}"
はsrc
をdst
にcp
する…。そのままなんですけどこれ以外に何も説明できない
最終的なzshrc
ENV_OS="linux"
ENV_FONT_DIR="$HOME/.local/share/fonts"
ENV_DOT_CONFIG="$HOME/.config"
which sw_vers &> /dev/null && {
ENV_OS="(macos|darwin)"
ENV_FONT_DIR="$HOME/Library/Fonts"
}
true
source "$ZDOTDIR/.zinit/bin/zplugin.zsh"
autoload -Uz _zinit
(( ${+_comps} )) && _comps[zinit]=_zinit
zinit for \
light-mode zsh-users/zsh-autosuggestions \
light-mode zdharma/fast-syntax-highlighting \
light-mode zsh-users/zsh-completions
zinit ice from"gh-r" as"program"
zinit load junegunn/fzf-bin
zinit ice as"program" pick"bin/plenv" atload'eval "$(plenv init - zsh)"' \
atclone"git clone git://github.com/tokuhirom/Perl-Build.git ./plugins/perl-build/" atpull"%atclone"
zinit load tokuhirom/plenv
zinit ice from"gh-r" cloneonly bpick"*_with_emoji.zip" atclone" \
mkdir -p $ENV_FONT_DIR/Cica &> /dev/null
cp ./* $ENV_FONT_DIR/Cica
" atpull"%atclone"
zinit load miiton/Cica
zinit ice cloneonly cp"plug.vim -> ~/.local/share/nvim/site/autoload/plug.vim"
zinit light junegunn/vim-plug
zinit ice as"program" from"gh-r" bpick"*$ENV_OS*_amd64"
zinit light dom96/choosenim
zinit ice has"go" atclone"go install" atpull"%atclone" atload'eval "$(go-cdx --init)"' pick"/dev/null"
zinit light xztaityozx/go-cdx
zinit ice has"go" atclone"go install" atpull"%atclone" atload"source $ZDOTDIR/powerline.zsh" pick"/dev/null"
zinit light justjanne/powerline-go
zinit ice has"tilix" cloneonly atclone"mkdir -p $ENV_DOT_CONFIG/tilix/schemes; cp ./*/*.json $ENV_DOT_CONFIG/tilix/schemes" pick"/dev/null"
zinit light storm119/Tilix-Themes
zinit ice from"gh-r" as"program" bpick"*$ENV_OS*" cp"exa* -> exa" atclone" \
curl -fLo $ZDOTDIR/.zinit/completions/_exa https://raw.githubusercontent.com/ogham/exa/master/contrib/completions.zsh" \
atpull"%atclone"
zinit light ogham/exa
zinit ice has"go" atclone"go install" atpull'%atclone' pick"/dev/null"
zinit light x-motemen/ghq
zinit ice has"pip3" atclone"pip3 install ." atpull"%atclone" pick"/dev/null"
zinit light neovim/pynvim
zinit ice from"gh-r" bpick"*$ENV_OS*" pick"./*/*/nvim" as"program"
zinit light neovim/neovim
zinit ice from"gh-r" bpick"*$ENV_OS*" pick"./*/*/hub" cp"./*/etc/hub.zsh_completion -> $ZDOTDIR/.zinit/completions/_hub" as"program"
zinit load github/hub
zinit ice from"gh-r" bpick"*x86_64*$ENV_OS*" as"program" pick"./*/bat"
zinit light sharkdp/bat
autoload -U compinit && compinit
ls $ZDOTDIR/*.zsh | while read L; do source $L; done
zinit ice
をこねくり回すことで、neovimやpynvimなんかもzinit
で管理できるようになりました。できればpython3やgoなんかも管理させたいですね。goenvとかpyenv使えば行けるかなぁ。
おわり
どうでもいいけど、こういう文章書くの久しぶりすぎてどうやって書くのか忘れたよね。