NixOSを使い始めました。私が理解したのは、Nixは副作用を避けるために特別に構築された関数型言語です。すべてのパッケージは巨大な属性セットの一部ですが、すべてが遅く評価されるため、問題はありません。メンバーにアクセスすると、基本的に「何かが起こる」が「派生」は単なる値なので、明示的に「構築」する必要があります。
Environment.systemPackagesが正確にどのように実装され、そのソースがどこにあるのかを知りたいです。 (nixpkgsで検索しようとしましたが、誤検出が多すぎました。)
私はプロセス全体を理解し、おそらくローカルユーザーが(自動)実行コマンド方式を使用する代わりに、宣言的に(すべてのsystemPackagesと同様に)インストールされたパッケージのリストを管理できるように構成ファイルをハッキングしたいと思いますnix-env -i
。例を見て ~/.config/nixpkgs/config.nix
packageOverrides関数を実装することができました。しかし、他のメタパッケージを「含む」という新しい種類のメタパッケージを作成できますか(まだ何も自動的にインストールされません)、または私が間違っていますか?オーバーレというものがあると聞きました。この概念は写真にどのように当てはまりますか?
答え1
users.users.<名前? >.パッケージ私が探していたまさにそのこと。
私の質問の2番目の部分を変えてみましょう。 (これは非常に混乱します。申し訳ありません。)
次のようなものがあるとしましょう。
blah = [ pkgs.hello ];
私ができる関数fがありますか?
f blah
これにより、helloパッケージがシステムに表示されます。
今、私はそれがやや逆説的であることに気づきました。なぜならKnicksには副作用がないからです。したがって、Chris Stryczynskiは正しいと思います。環境・システムパッケージ一つだけど無意味な言葉いいえ。しかし、おそらくfを次のように実装できます。
environment.systemPackages ++ blah
または他のもの(コード例を構文上正しいNixではなく疑似コードと見なしてください)。
答え2
これがどのように実装されているかに関して、ここenvironment.systemPackages
で見つけることができるさまざまなスクリプト(例:nixos-install、nixos-rebuildなど)から値が取得されるとします。
https://github.com/NixOS/nixpkgs/tree/master/nixos/modules/installer/tools
しかし、それは単にリスト(Nix言語)のようです。
自分で確認したら、まずNixの仕組みを理解し、Nixosの機能を理解するのが役に立ちます。