NixのTips
この記事はNix Advent Calendarの21日目の記事です。
もともとはコード例をまじえたチュートリアル的な記事にしようとおもったのですが、結局うまくまとまらなかったためちょっとしたTipsの記事になりました。
Tips
いろいろ書いているので、自分に関係ないなと感じたものは適当に読みとばしてください。
検索
Nixについての情報を得たい場合、何かしらで検索することになると思います。その方法です。
一般的な方法。NixOS DiscourseとかRedditとかのページがよくでてきます。
GitHub
GitHubの検索機能を使う方法です。repo:NixOS/nixpkgs をつけて検索する方法と、lang:Nix をつけて検索する方法があります。前者はパッケージングで困ったとき、後者は前者で見つからないときとその他の場合に使うと良いと思います。
さらにパッケージ関連で困っているときはパッケージ名などでIssueを検索すると良いと思います。
この方法はかなり強力なので困ったら一旦これを使っています。
パッケージとオプション
Noogle
NixにはNoogleというものがあり、HaskellのHoogleと同じような感覚でnixpkgsのライブラリと標準(builtins)の関数を検索できます。
Nixpkgs Pull Request Tracker
nixpkgsには複数のブランチがあり、それぞれどの程度安定しているのかが違います。よく使うブランチには以下のようなものがあります。
nixpkgs-unstablenixos-unstablenixos-unstable-smallrelease-<version><version>にはリリースのバージョンが入ります。yy.mmの形になっていて毎年5月と11月にリリースされます。記事投稿時の最新は24.11です。
NixOSを使い始めたにも少し書きましたが、修正はnixpkgsに対してPull Request(以下PR)が作成され、まず master にマージされます。そのあとテストやビルドが実行され nixos-unstable-small、 nixos-unstable や nixpkgs-unstable にマージされます。release-<version> にはPRがバックポートするPRに指定されないとマージされません。
テストなどを実行するため、 master にマージされてから他のブランチにマージされるまでにはラグがあります。そこでPRがどこまで進んでいるのかを確認するためにこのツールが使えます。問題を修正するPRがマージされているのに手元では修正されない場合に確認してみてください。
Nix Version
nixpkgsは基本的にパッケージごとに個別のバージョンを指定することが出来ません。しかし、複数のnixpkgsを同時に使えば(少しHackyですが)できなくはないです。そのときにNix Versionを使えばあるパッケージがどのnixpkgsに含まれているかを確認することが出来ます。
nix develop 関連
nix-your-shell で好みのシェルを使う
なにもしていない場合、 nix develop のシェルにはbashが使われます。しかし、nix-your-shellを使えば好みの別のシェルも使えるようになります。
nix-your-shellはnixpkgsに nix-your-shell としてパッケージされています。インストールできたら、シェルのプロファイルに起動するためのスクリプトを追記する必要があります。
例えばzshなら以下ですが他のシェルについては プロジェクトのREADMEを確認してください。
if command -v nix-your-shell > /dev/null; then
nix-your-shell zsh | source /dev/stdin
fi
nix-direnv で自動的に nix develop を実行する
direnvというツールのNixのための拡張です。Home Mangerを使っている場合は以下のNix式でインストールできます。
{
programs = {
direnv = {
enable = true;
nix-direnv.enable = true;
};
};
};
}
そして shell.nix を使うなら use nix を、FlakesのdevShellsを使うなら use flake を .envrc に追記します。そして direnv allow を実行すればそのディレクトリにcdすると自動で起動されるようになります。
言語ごとの話
ロックファイルが生成される言語またはパッケージマネージャーを使っているあなたは幸運です。すでにNixでのビルドをサポートするための何らかのツールが作られている可能性が高いです。awesome-nixのプログラミング言語別の章を見に行ってみましょう。
おわりに
Tipsの共有は大事なのでぜひみなさんも記事を書いてみてください!自分もいつか入門記事を書きます(多分)。
最近 nix-jaのCosense ができたのでそこにも書きます(多分)。