たいちょーの雑記

ぼくが3日に一度くらい雑記をかくところ

パッケージマネージャをほとんどzinitにした

しました

github.com

OSごとにbrewだとかaptだとかpacmanだとか、その都度使い分けるのはいいんですが、インストールスクリプトを書くのが難しすぎるんですよね。
というわけでzinitに任せられるところは任せました。

使い心地は結構いいなぁという印象です。

zinit ice

zinit icezinitプラグインをロードするzinit loadzinit lightを修飾する機能を持ちます。ここではcdxzinitで管理することを例にします。

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で書いたコマンドが実行できる。
  • atload
    • プラグインを読み込んだ後に実行するコマンドを指定できる。

というわけで、上記のzinitは、「xztaityozx/go-cdxgoが使えるときにのみロードする。これをcloneとpullしたときにはgo installを実行して、ロード時にはeval "$(go-cdx --init)"を実行する。」という意味になるわけです。

github releaseから拾ってくる

zinitのいいなぁポイントの一つにzinit icefrom"gh-r"を指定すると、GitHub ReleasesからLatestを拾ってこられるというのがあります。
例としてchoosenimGitHub Releasesから拾ってくるようにしてみます。

ENV_OS="linux" # ENV_OS="(macos|darwin)"
zinit ice as"program" from"gh-r" bpick"*$ENV_OS*_amd64"
zinit light dom96/choosenim

fromgh-rを指定して、GitHub Releasesから拾ってくるようにします。このとき、Releasesにアップロードされているアーカイブからどれかを選ばないといけません。ここでbpickを使うと、引数に渡したパターンに最初にマッチしたものをダウンロードしてきます。ここでは*linux*_amd64にマッチするものですね。

.zinit以下以外に配置したい

vim-plugzinitで管理したいのですが、配置場所はドキュメント通りに~/.local/share/nvim/site/autoload/plug.vimにしたいとします。こういうときはcloneonlycp/mvを使えばうまくできそうです。

zinit ice cloneonly cp"plug.vim -> ~/.local/share/nvim/site/autoload/plug.vim"
zinit light junegunn/vim-plug

cloneonlyはそのままダウンロードのみを行うオプションです。cp"{src} -> {dst}"srcdstcpする…。そのままなんですけどこれ以外に何も説明できない

最終的な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使えば行けるかなぁ。

おわり

どうでもいいけど、こういう文章書くの久しぶりすぎてどうやって書くのか忘れたよね。