NixOS - Environment.systemPackagesの実装方法

NixOS - Environment.systemPackagesの実装方法

NixOSを使い始めました。私が理解したのは、Nixは副作用を避けるために特別に構築された関数型言語です。すべてのパッケージは巨大な属性セットの一部ですが、すべてが遅く評価されるため、問題はありません。メンバーにアクセスすると、基本的に「何かが起こる」が「派生」は単なる値なので、明示的に「構築」する必要があります。

Environment.systemPackagesが正確にどのように実装され、そのソースがどこにあるのかを知りたいです。 (nixpkgsで検索しようとしましたが、誤検出が多すぎました。)

私はプロセス全体を理解し、おそらくローカルユーザーが(自動)実行コマンド方式を使用する代わりに、宣言的に(すべてのsystemPackagesと同様に)インストールされたパッケージのリストを管理できるように構成ファイルをハッキングしたいと思いますnix-env -i。例を見て ~/.config/nixpkgs/config.nixpackageOverrides関数を実装することができました。しかし、他のメタパッケージを「含む」という新しい種類のメタパッケージを作成できますか(まだ何も自動的にインストールされません)、または私が間違っていますか?オーバーレというものがあると聞きました。この概念は写真にどのように当てはまりますか?

ベストアンサー1

users.users.<名前? >.パッケージ私が探していたまさにそのこと。

私の質問の2番目の部分を変えてみましょう。 (これは非常に混乱します。申し訳ありません。)

次のようなものがあるとしましょう。

blah = [ pkgs.hello ];

私ができる関数fがありますか?

f blah

これにより、helloパッケージがシステムに表示されます。

今、私はそれがやや逆説的であることに気づきました。なぜならKnicksには副作用がないからです。したがって、Chris Stryczynskiは正しいと思います。環境・システムパッケージ一つだけど無意味な言葉いいえ。しかし、おそらくfを次のように実装できます。

environment.systemPackages ++ blah

または他のもの(コード例を構文上正しいNixではなく疑似コードと見なしてください)。

おすすめ記事