はじめに
home-manager で ni コマンドを使おうとしたら少しハマったのでメモ。
TL;DL
ni とは?
ni は npm、yarn、pnpm、bun といった JavaScript のパッケージを管理するためのコマンドラッパーの一つ。これらのコマンドはそれぞれサブコマンドやオプションに差違があるため、コマンドごとに使い方を覚えないといけない。 ni はこれらのコマンドを統一的に扱うためのコマンドを提供していくれる。
例えば、npm install、yarn、pnpm install、bun install は ni というコマンドで統一的に扱うことができる。その他にも npm install、npm install xxx、npm ci、npm run、npx、npm upgrade、npm uninstall といったコマンドを ni で統一的に扱うことができる。
home-manager で ni を使う
home-manager で管理したいのであれば home.packages に ni を追加すれば良いと思いきや、次のように記述しても ni コマンドはインストールできない。
NixOS Search で検索をかけるとわかるが、ni は登録されていない。
しかし、nodePackages で扱えることが GitHub のリポジトリを見るとわかる。パッケージ名が @antfu/ni であるため、次のように記述すれば ni コマンドをインストールすることができるかと思いきや、これでは上手くいかない。
Nix の文法を理解していないため、文法として制約があるかわからないが、@ から始まる変数は使えないようだ。しかし、@antfu/ni を "@antfu/ni" と記述すると文字列として認識されてしまい、これも上手くいかない。
最終的に with nodePackages; を使わずに、次のように記述することで ni コマンドをインストールすることができた。
nushell と衝突
これで解決かと思いきや、もう一つ問題が発生した。
npm upgrade 相当のコマンドである nu が nushell と衝突してしまう。
nushell は常用しているわけではないので nushell の方をインストールしないように設定することで回避した。
nu コマンドとは別に nlx コマンド (npx 相当) はもともと nix コマンドであったが、Nix のコマンドと衝突してしまうため名前が変更された過去がある。
nushell が今より普及したら nu コマンドも変更されるかもしれない。多少長くなってもいいから ni、nu、nr みたいな n に一文字を追加するような命名ではなく、ni add、ni run みたいな命名にして欲しい…
