Làm cách nào để tìm tên của gói Nix để cài đặt nó trong configure.nix?


21

Giả sử tôi tìm kiếm một gói phần mềm để cài đặt sử dụng nix-envcủa --queryhoạt động:

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

Tôi viết tên gói này vào /etc/nixos/configuration.nix, tệp cấu hình chính của NixOS :

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

Tuy nhiên, nếu tôi chạy sudo nixos-rebuild switch, lệnh NixOS để cập nhật cấu hình và cài đặt tất cả các gói trên toàn hệ thống được chỉ định theo khai báo , nó hủy bỏ với một lỗi:

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

Tôi biết rằng đối với nhiều gói, mặc dù không phải tất cả, tên nix-envtrả về và tên nên chỉ định trong environment.systemPackagestùy chọn cấu hình là khác nhau, nhưng tôi không hiểu logic. Làm thế nào để tôi cài đặt một gói mà tôi tìm thấy thông qua nix-env?

Câu trả lời:


20

Cộng đồng NixOS có ba hướng dẫn, luôn tham khảo ý kiến ​​trước, nếu bạn gặp khó khăn:

Mỗi gói trên Nix được chỉ định bởi biểu thức Nix. Biểu thức Nix là một số văn bản, được viết bằng ngôn ngữ Nix, thường nằm trong một tệp có phần mở rộng .nix.

Mỗi biểu thức đều có cái gọi là tên biểu tượng của người Hồi giáo, một tên dễ đọc được in ra khi bạn sử dụng nix-env. Xem biểu thức Nix mẫu . Bản thân Nix không sử dụng tên tượng trưng này ở bất cứ đâu trong nội bộ, vì vậy không có vấn đề gì nếu gói của bạn được đặt tên aspell-dict-en, nó chỉ nhằm mục đích thuận tiện cho con người của bạn.

Điều thực sự quan trọng là cái gọi là đường dẫn thuộc tính của Google. Vì vậy, sự nhầm lẫn của bạn là giữa tên biểu tượng và đường dẫn thuộc tính. Mỗi gói có một đường dẫn thuộc tính, mà bạn có thể sử dụng trong environment.systemPackagestùy chọn cấu hình để cài đặt toàn hệ thống bằng cách sử dụng quản lý gói khai báo .

Để tìm ra đường dẫn thuộc tính của gói của bạn, hãy thêm một cờ khác -Pvào truy vấn của bạn:

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

Bạn có thể thoải mái sử dụng nix-envtrên một cơ sở hàng ngày, vì vậy thực hành gọi nix-envvới --query--installtùy chọn. Tuy nhiên, bạn cũng có thể duyệt các gói và tìm ra đường dẫn thuộc tính của chúng trực tuyến trên tìm kiếm gói Nix . Nhập aspell, nhấp vào aspell-dict-envà bạn sẽ thấy các thuộc tính của gói khác nhau, bao gồm đường dẫn thuộc tính như một phần của lệnh cài đặt:

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

Bây giờ bạn có thể đặt đường dẫn thuộc tính này vào /etc/nixos/configuration.nix:

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

Sau đó cập nhật hệ thống bằng cách chạy sudo nixos-rebuild switch.


4
Thật không may, -Ptùy chọn không hoạt động với --installed, như có thể được nhìn thấy với nix-env -q --installed -P | grep terminusbản in terminus-fontthay vì terminus_font. Cách giải quyết là sử dụng nix-env -qaP | grep terminus-font, nhưng điều đó có nghĩa là bạn không thể dễ dàng đổ đầu ra nix-env -q --installedvào configuration.nix.
Suzanne Dupéron

4

Trong trường hợp bạn đang sử dụng NixOS cho Khoa học dữ liệu:

Mô-đun Python :

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

hoặc là

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

HOẶC nếu bạn đang tìm kiếm đặc biệt cho các gói / thư viện R

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

Ngoài ra, bạn nhận được gói ig npm với:

nix-env -qaPA 'nixos.nodePackages'

cũng có một trang web để tìm kiếm pkgs


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

Tôi sẽ lưu kết quả của nix-env -v -qaP '*'một tệp (vì thường phải mất một lúc để trả về).


Hãy nhớ rằng, nix-env dường như bỏ qua những thứ bên dưới haskellPackages(và có thể cả những thứ khác).


Tìm kiếm nix-env hiện đang khá bực bội vì sẽ mất hơn 5 giây và sau đó quay lại với một error: regex error...


0

Bổ sung cho các tùy chọn Mirzhans: bạn có thể kiểm tra /nix/storenhư thế nào grep -irw "programm-name" /nix/store. Nhưng điều này có thể hơi khó hiểu. Ngoài ra trong thư mục nhà của bạn, bạn có thể kiểm tra thư .local/sharemục để cài đặt chương trình / ứng dụng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.