จะค้นหาชื่อของแพ็คเกจ Nix เพื่อติดตั้งใน configuration.nix ได้อย่างไร?


21

สมมติว่าฉันค้นหาสำหรับแพคเกจการติดตั้งโดยใช้nix-env's --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อย่างไร

คำตอบ:


20

ชุมชน NixOS มีสามคู่มือเสมอปรึกษาพวกเขาก่อนถ้าคุณติด:

ทุกแพ็กเกจบนห้ามถูกระบุโดยนิพจน์ห้าม .nixแสดงออกห้ามคือข้อความบางอย่างที่เขียนในภาษาระวังมักจะพำนักอยู่ในไฟล์ที่มีนามสกุล

ทุกคนมีการแสดงออกที่เรียกว่า“ชื่อสัญลักษณ์” nix-envเป็นชื่อที่มนุษย์สามารถอ่านได้ที่พิมพ์เมื่อคุณใช้ ดูการแสดงออกของตัวอย่างห้ามการแสดงออกห้ามตัวอย่างระวังตัวเองไม่ได้ใช้ชื่อสัญลักษณ์นี้ทุกที่ภายในจึงไม่สำคัญว่าชื่อแพคเกจของคุณ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ตัวเลือก แต่คุณยังสามารถเรียกดูแพคเกจและหาเส้นทางแอตทริบิวต์ออนไลน์ของพวกเขาเกี่ยวกับการห้ามแพคเกจการค้นหา พิมพ์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ตัวเลือกที่ไม่ได้ทำงานกับ--installedที่สามารถมองเห็นได้ด้วยnix-env -q --installed -P | grep terminusซึ่งพิมพ์แทนterminus-font terminus_fontวิธีแก้ปัญหาคือการใช้nix-env -qaP | grep terminus-fontแต่มันหมายความว่าคุณไม่สามารถถ่ายโอนข้อมูลการส่งออกของเข้าไปในnix-env -q --installed configuration.nix
Suzanne Dupéron

4

ในกรณีที่คุณใช้ NixOS สำหรับ Data Science:

โมดูล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


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

ฉันจะบันทึกผลลัพธ์ของnix-env -v -qaP '*'ไฟล์ (เพราะปกติจะใช้เวลาสักครู่เพื่อส่งคืน)


โปรดจำไว้ว่าระวัง -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.