`allowUnfreePredicate`でパッケージを直接使用するには?

`allowUnfreePredicate`でパッケージを直接使用するには?

手動提案パッケージを名前で指定できます。

{
  allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
    "roon-server"
    "vscode"
  ];
}

パッケージを使用して直接実行できますか?私は以下を試しました:

{
  allowUnfreePredicate = pkg:
    builtins.elem pkg [
      pkgs.hplip
    ];
}

これはうまくいかないようです:

エラー:/nix/store/lh7i6yw570nkw49byrgjbrna9az3ryy7-nixos-22.05/nixos/pkgs/misc/drivers/hplip/default.nix:268の 'hplip-3.22.6'パッケージに非フリーライセンス(「unfree拒否します。 。

オブジェクトpkgがの項目と異なるのか、pkgs複合builtins.elemオブジェクトが同じように扱われませんか、それとも別のことが進んでいますか?

ベストアンサー1

コードが失敗する理由は次のとおりです。いいえなぜならbuiltins.elem(これは厳密に同等のパッケージを良い比較にするからです)allowInfreePredicateプロパティもちろん包装(内部)です。stdenv.mkDerivation {…}stdenv.mkDerivation {…} != …

自分を確認/検索するには:

ちなみに、この簡単な方法を使用して素晴らしいコンテンツを閲覧すると、実際に直接確認することができます(質問をするまでこれを実現していませんでした)。nixpkgs リポジトリ(これは教育目的なので、効果的にnixコードをナビゲートする方法を見つけるのに少し時間がかかりました...わずか数命令でオペレーティングシステム全体のコードを簡単に読むことができるのは本当に素晴らしいことです!私が愛しているnix!):

これを行うには、まずnixpkgsのコード。提案:ダウンロード

git clone https://github.com/NixOS/nixpkgs

これをホームフォルダに横に置くことは非常に便利です!

その後、rg allowUnfreePredicate -C 5rgより良いgrepを使用してください。実際にインストールする必要があります。-C 5上/下に5行が表示され、周囲のテキストを表示するのに非常に便利です)(config.allowUnfreePredicateで直接確認できます。nixpkgs/pkgs/stdenv/generic/check-meta.nixここallowUnfreePredicate)はそれ自体で呼び出される新しい関数を定義します。ここでは、hasDeniedUnfreeLicenseそれ自体がcheckValidity同じファイル)自体はassertValidity同じファイル)… (はい、単純なゲームです。rg現在の関数の名前を入力すると、次の関数が見つかります^^)。この機能がついに実装されました出力ファイルからcheck-meta.nix。友達を再利用すると、rg check-meta.nixこのファイルを見るのは難しくありません。輸入山です。pkgs/stdenv/generic/make-derivation.nixas.Finally checkMeta(もちろんこれはかなり長い旅であり、一般的には高速です^^') この関数は次のように呼び出されます。ここ関数への入力でargsあるパラメータを取ります(mkDerivationここ)。完璧;-)

おすすめ記事