手動提案パッケージを名前で指定できます。
{
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 5
(rg
より良い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.nix
as.Finally checkMeta
(もちろんこれはかなり長い旅であり、一般的には高速です^^') この関数は次のように呼び出されます。ここ関数への入力でargs
あるパラメータを取ります(mkDerivation
ここ)。完璧;-)