Nixパッケージマネージャの使用方法を学習するときに遭遇するNix式の最初のタイプの1つは、default.nix
です。素晴らしいNixOSでIRCチャンネルでShell.nix
とrelease.nix
の存在も知った。
大体-default.nix
はnix-build
と一緒に使用してパッケージを単純に構築し、Shell.nix
はnix-Shell
と一緒に使用してパッケージでインタラクティブな環境を作成するという印象を受けましたrelease.nix
は、パッケージの展開時にnixops
とともに使用されます。
これは不完全であり、部分的に不正確である可能性が高いため、またこれは明確に文書化されていないため、これらの種類の「標準ファイル」について明確で正確な説明が必要です。特に、これらのファイルタイプのそれぞれについて(および私が欠落している他の標準ファイルも同様)、私は知りたい:
追加のボーナスの質問として、パッケージをNixOSモジュールにインストールするときにこれらの標準ファイルのどれを使用する必要があるかを知りたいですか?それはどのように行われますか?
@danbstだけが言ったように、default.nix
およびShell.nix
は、nixツールに対して特別な意味を持ちます。そのため、実際の標準は存在せず、誰もが最もニーズに合ったものを自由に使用できます。
とはいえ、個人的には、次の方法でnixファイルを整理したい1つの派生プロジェクトに対して、独自のルールセットを設定できないわけではありません。
default.nix
:callpackage
を使用してインポートderivation.nix
。derivation.nix
:nixpkgsスタイルの派生ファイル。Shell.nix
:nix-Shellファイル。module.nix
:NixOSモジュールファイル、インポートdefault.nix
。test.nix
:NixOSテストファイル。release.nix
:Hydraジョブセット宣言。Tokyo NixOSミートアップでこのトピックに関する講演を行いました。そのようなコード編成の例は here にあります。
まず、default.nix
とShell.nix
はNixツールで特別な意味を持ちますが、release.nix
は便利なものです。
次に、default.nix
はnix-build
の実行時にデフォルトのファイルとして使用され、Shell.nix
はnix-Shell
の実行時にデフォルトのファイルとして使用されます。あなたが言ったように。
次に、default.nix
はnix-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
引数もサポートしています。