इसे कॉन्फ़िगरेशन.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, तो निक्सोस कॉन्फ़िगरेशन को अपडेट करने के लिए आदेश देता है और घोषित रूप से निर्दिष्ट सभी सिस्टम-वाइड पैकेज स्थापित करता है , यह एक त्रुटि को समाप्त करता है :

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--installaspellaspell-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
सुजैन डुपरॉन

4

यदि आप डेटा विज्ञान के लिए निक्स का उपयोग कर रहे हैं:

पायथन मॉड्यूल:

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.\*

वैकल्पिक रूप से आपको ig npm पैकेज मिलते हैं:

nix-env -qaPA 'nixos.nodePackages'

pkgs की खोज के लिए एक वेबसाइट भी है


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

मैं nix-env -v -qaP '*'एक फ़ाइल के परिणाम को बचाऊंगा (क्योंकि आमतौर पर इसे लौटने में थोड़ा समय लगता है)।


ध्यान में रखते हुए, निक्स-एनवी haskellPackages(और संभवतः अन्य) के तहत चीजों को अनदेखा करता है ।


nix-env की खोज वर्तमान में काफी निराशाजनक है क्योंकि इसमें 5+ सेकंड का समय लगेगा और फिर वापस आ जाएगा error: regex error...


0

मिर्ज़हंस विकल्पों के लिए अतिरिक्त : आप की /nix/storeतरह देख सकते हैं grep -irw "programm-name" /nix/store। लेकिन यह थोड़ा भ्रमित करने वाला हो सकता है। इसके अलावा अपने घर निर्देशिका में आप .local/shareस्थापित प्रोग्राम / एप्लिकेशन के लिए निर्देशिका की जांच कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.