しました
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
- cloneした後に実行するコマンドを指定できる。
atpull
- pullした後に実行するコマンドを指定できる。
%atclone
と書くとatclone
で書いたコマンドが実行できる。
- pullした後に実行するコマンドを指定できる。
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" # ENV_OS="(macos|darwin)" 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
# set environments ENV_OS="linux" ENV_FONT_DIR="$HOME/.local/share/fonts" ENV_DOT_CONFIG="$HOME/.config" ## for macos which sw_vers &> /dev/null && { ENV_OS="(macos|darwin)" ENV_FONT_DIR="$HOME/Library/Fonts" } true # zinit 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 # fzf zinit ice from"gh-r" as"program" zinit load junegunn/fzf-bin # plenv 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 # Cica 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 # vim-plug zinit ice cloneonly cp"plug.vim -> ~/.local/share/nvim/site/autoload/plug.vim" zinit light junegunn/vim-plug # choosenim zinit ice as"program" from"gh-r" bpick"*$ENV_OS*_amd64" zinit light dom96/choosenim # cdx zinit ice has"go" atclone"go install" atpull"%atclone" atload'eval "$(go-cdx --init)"' pick"/dev/null" zinit light xztaityozx/go-cdx # powerline-go zinit ice has"go" atclone"go install" atpull"%atclone" atload"source $ZDOTDIR/powerline.zsh" pick"/dev/null" zinit light justjanne/powerline-go # tilix-theme 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 # exa 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 # ghq zinit ice has"go" atclone"go install" atpull'%atclone' pick"/dev/null" zinit light x-motemen/ghq # pynvim zinit ice has"pip3" atclone"pip3 install ." atpull"%atclone" pick"/dev/null" zinit light neovim/pynvim # neovim zinit ice from"gh-r" bpick"*$ENV_OS*" pick"./*/*/nvim" as"program" zinit light neovim/neovim # hub 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 # bat zinit ice from"gh-r" bpick"*x86_64*$ENV_OS*" as"program" pick"./*/bat" zinit light sharkdp/bat # enable completions autoload -U compinit && compinit # load ls $ZDOTDIR/*.zsh | while read L; do source $L; done
zinit ice
をこねくり回すことで、neovimやpynvimなんかもzinit
で管理できるようになりました。できればpython3やgoなんかも管理させたいですね。goenvとかpyenv使えば行けるかなぁ。
おわり
どうでもいいけど、こういう文章書くの久しぶりすぎてどうやって書くのか忘れたよね。