web-dev-qa-db-ja.com

default.nix、Shell.nix、release.nixはいつ、どのように使用する必要がありますか?

Nixパッケージマネージャの使用方法を学習するときに遭遇するNix式の最初のタイプの1つは、default.nixです。素晴らしいNixOSでIRCチャンネルでShell.nixrelease.nixの存在も知った。

大体-default.nixnix-buildと一緒に使用してパッケージを単純に構築し、Shell.nixnix-Shellと一緒に使用してパッケージでインタラクティブな環境を作成するという印象を受けましたrelease.nixは、パッケージの展開時にnixopsとともに使用されます。

これは不完全であり、部分的に不正確である可能性が高いため、またこれは明確に文書化されていないため、これらの種類の「標準ファイル」について明確で正確な説明が必要です。特に、これらのファイルタイプのそれぞれについて(および私が欠落している他の標準ファイルも同様)、私は知りたい:

  1. そのようなファイルの典型的な使用例は何ですか?彼らは何のためにnotを使うべきですか?
  2. このファイルタイプは通常どのように構造化されていますか?最小要件は何ですか?
  3. このようなファイルのパラダイム例を示してくださいその使用コンテキスト内、つまり、使用手順と、シェルまたは別のNix式で使用するために必要なコード行を含めますか?

追加のボーナスの質問として、パッケージをNixOSモジュールにインストールするときにこれらの標準ファイルのどれを使用する必要があるかを知りたいですか?それはどのように行われますか?

32
Ixxie

@danbstだけが言ったように、default.nixおよびShell.nixは、nixツールに対して特別な意味を持ちます。そのため、実際の標準は存在せず、誰もが最もニーズに合ったものを自由に使用できます。

とはいえ、個人的には、次の方法でnixファイルを整理したい1つの派生プロジェクトに対して、独自のルールセットを設定できないわけではありません。

  • default.nixcallpackageを使用してインポートderivation.nix
  • derivation.nix:nixpkgsスタイルの派生ファイル。
  • Shell.nix:nix-Shellファイル。
  • module.nix:NixOSモジュールファイル、インポートdefault.nix
  • test.nix:NixOSテストファイル。
  • release.nix:Hydraジョブセット宣言。

Tokyo NixOSミートアップでこのトピックに関する講演を行いました。そのようなコード編成の例は here にあります。

25
Eric

まず、default.nixShell.nixはNixツールで特別な意味を持ちますが、release.nixは便利なものです。

次に、default.nixnix-buildの実行時にデフォルトのファイルとして使用され、Shell.nixnix-Shellの実行時にデフォルトのファイルとして使用されます。あなたが言ったように。

次に、default.nixnix-buildだけに使用されるわけではありません。たとえば、 <nixpkgs/lib/default.nix> は関数のアグリゲーターとして使用され、派生は含まれません。したがって、すべてのdefault.nixが「ビルド」されるとは限りません(ただし、default.nixが派生の属性セットである場合、ビルド可能になり、nix-buildはすべてをビルドします)。

次に、nix-Shellは、default.nixが見つからない場合にShell.nixを使用します

次に、default.nixがディレクトリのインポート時にデフォルトのファイルとして使用されます。したがって、x = import ./some/directory;と記述すると、./some/directory/default.nixがインポートされます。それは実際に"nix-build ."default.nixを使用する理由を説明するはずです。

最後に、default.nixの派生には、派生とcallPackage派生の2つの一般的な形式があります。 nix-buildはできません。 nixpkgsのほとんどすべてのパッケージはこのスタイルで記述されています。 hello を参照してください。ただし、回避策としてnix-build -E 'with import <nixpkgs> { }; callPackage ./path/to/default.nix { }'を使用できます。 nix-Shellは、この-E引数もサポートしています。

29
danbst