nix-env
の --query
操作を使用して、インストールするパッケージを検索するとします。
$ nix-env -qa 'aspell.*en'
aspell-dict-en-7.1-0
このパッケージ名を/etc/nixos/configuration.nix
、NixOSのメイン 構成ファイル に記述します。
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
で見つけたパッケージをインストールするにはどうすればよいですか?
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
を実行してシステムを更新します。
データサイエンスに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.\*
あるいは、あなたは例えばnpmパッケージ:
nix-env -qaPA 'nixos.nodePackages'
pkgsを検索するためのWebサイトもあります
nix-env -v -qaP '*' | grep "nvim"
nix-env -v -qaP '*'
の結果をファイルに保存します(通常は戻るのに時間がかかるため)。
心に留めておいてください、nix-envはhaskellPackages
(そしておそらく他のもの)の下のものを無視するようです。
nix-env検索は、5秒以上かかり、その後error: regex error
...が返されるため、現在非常にイライラしています。
追加ミルジャンスオプション:/nix/store
お気に入り grep -irw "programm-name" /nix/store
。しかし、これは少し混乱するかもしれません。また、ホームディレクトリで.local/share
(インストールされているプログラム/アプリの場合)。