configuration.nixにインストールするNixパッケージの名前を見つける方法は?


21

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 switch更新し、宣言的に指定されたすべてのシステム全体のパッケージをインストールするNixOSコマンドを実行すると、エラーで中断します。

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

すべてではありませんが、多くのパッケージでは、nix-env返される名前とenvironment.systemPackages構成オプションで指定する名前が異なることを知っていますが、ロジックは理解していません。見つけたパッケージをインストールするにはどうすればよいnix-envですか?

回答:


20

NixOSコミュニティには3つのマニュアルがあります。行き詰まっている場合は、必ず最初にそれらを参照してください。

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

すべての式には、「シンボリック名」と呼ばれるものがありますnix-env。これは、を使用したときに印刷される人間が読める名前です。サンプルの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


4
残念ながら、この-Pオプションはで機能しません。これは、の代わりにwhichを印刷--installedするとわかるように。回避策はを使用することですが、その出力をに簡単にダンプできないことを意味します。nix-env -q --installed -P | grep terminusterminus-fontterminus_fontnix-env -qaP | grep terminus-fontnix-env -q --installedconfiguration.nix
スザンヌデュペロン

4

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

Pythonモジュール:

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

または

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

または、特にRパッケージ/ライブラリを検索している場合

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

または、次のコマンドでig npmパッケージを取得します。

nix-env -qaPA 'nixos.nodePackages'

pkgsを検索するためのWebサイトもあります


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

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


nix-envは、下にあるものhaskellPackages(およびおそらく他のもの)を無視するようです。


nix-env検索は現在5秒以上かかり、その後戻ってくるので非常にイライラしていますerror: regex error...


0

Mirzhansオプションの追加:の/nix/storeように確認できますgrep -irw "programm-name" /nix/store。しかし、これは少しわかりにくいかもしれません。また、ホームディレクトリで.local/share、インストールされているprogramms / appsのディレクトリを確認できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.