Configuration.nixでNixパッケージ名を見つけてインストールするにはどうすればよいですか?

Configuration.nixでNixパッケージ名を見つけてインストールするにはどうすればよいですか?

以下を使用してインストールするパッケージを検索するとします。nix-env~の--queryタスク:

$ nix-env -qa 'aspell.*en'
aspell-dict-en-7.1-0

/etc/nixos/configuration.nixNixOSメインにこのパッケージ名を書きました構成ファイル:

environment.systemPackages = with pkgs; [
  aspell-dict-en
];

ただし、sudo nixos-rebuild switchNixOS コマンドを実行すると構成の更新次に、指定されたすべてのシステム全体のパッケージをインストールします。宣言的に、エラーで中断されます。

error: undefined variable ‘aspell-dict-en’ at /etc/nixos/configuration.nix:44:5

多くのパッケージ(すべてではありません)から返された名前nix-envと設定オプションで指定する必要がある名前がenvironment.systemPackages異なることがわかりますが、ロジックを理解していません。で見つけたパッケージをインストールする方法はnix-env

答え1

NixOS コミュニティには 3 つのマニュアルがあります。問題がある場合は、まず確認してください。

NixのすべてのパッケージはNix式で指定されます。 Nix式はNix言語で書かれたテキストで、通常は拡張子が.nix

すべての式には「シンボル名」というものがあり、nix-env.seeを使用するときNix 式の例。 Nix自体は内部的にこのシンボル名を使用しないため、パッケージ名が指定されているかどうかは重要ではなく、aspell-dict-en単にユーザーの便宜のためです。

本当に重要なのは「属性パス」です。したがって、シンボル名と属性パスの間に混乱があります。各パッケージには、environment.systemPackages設定オプションでシステム全体のインストールに使用できるプロパティパスがあります。宣言的パッケージ管理

パッケージのプロパティパスを見つけるには、別のフラグを追加してください。-Pあなたの質問:

$ nix-env -qaP 'aspell.*en'
nixos.aspellDicts.en  aspell-dict-en-7.1-0

nix-env毎日簡単に利用できる必要があるので、nix-env使い方--query--install通話オプションを練習してください。ただし、オンラインでパッケージを参照し、その属性パスを見つけることもできます。Nix パッケージ検索。と入力してaspellをクリックすると、aspell-dict-enインストールコマンドの一部としてプロパティパスを含むさまざまなパッケージのプロパティが表示されます。

$ nix-env -iA nixos.pkgs.aspellDicts.en

これで、このプロパティパスを次の場所に配置できます/etc/nixos/configuration.nix

environment.systemPackages = with pkgs; [
  aspellDicts.en
];

次に、を実行してシステムを更新しますsudo nixos-rebuild switch

答え2

次のWebサイトを使用してパッケージを検索できます。


データサイエンスにNixOSを使用する場合:

Python基準寸法:

nix-env -qaP .\*pylint.\*

または

py_pkgs="nix_packages_py35.txt"
nix-env -qaP | grep -i python36 > ${py_pkgs}
grep pandas ${py_pkgs}

または特別に探している場合パッケージ/ライブラリ

nix-env -f "<nixpkgs>" -qaP -A rPackages .\*tidyverse.\*

あるいは、例えば、npmパッケージを入手することができる。

nix-env -qaPA 'nixos.nodePackages'

答え3

nix-env -v -qaP '*' | grep "nvim"

nix-env -v -qaP '*'結果をファイルに保存します(通常は戻るのに時間がかかるため)。


haskellPackagesnix-envは、次のこと(および他のものも可能です)を無視しているようです。以下では、haskellPackagesなどのサブカテゴリのパッケージを検索できます。 nix-env -f '<nixpkgs>' -qaPA haskellPackages


nix-env検索は現在5秒以上かかり、再び返されるため非常に残念ですerror: regex error

答え4

nix-search () {
    local cache_file=~/.cache/nix/nix-env-qaP

    if [[ "$1" =~ ^--?c(ache)?$ ]]; then
        mkdir -p $(dirname $cache_file)
        echo -n "Caching packages.."
        nix-env -qaP '*' >$cache_file
        echo " 

関連情報