Configuration.nix에서 Nix 패키지 이름을 찾아 설치하려면 어떻게 해야 합니까?

Configuration.nix에서 Nix 패키지 이름을 찾아 설치하려면 어떻게 해야 합니까?

다음을 사용하여 설치할 패키지를 검색한다고 가정해 보겠습니다.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 switchNixOS 명령을 실행하면구성 업데이트다음으로 지정된 모든 시스템 전체 패키지를 설치합니다.선언적으로, 오류와 함께 중단됩니다.

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

많은 패키지(전부는 아니지만)에서 반환된 이름 nix-env과 구성 옵션에 지정해야 하는 이름이 environment.systemPackages다르다는 것을 알고 있지만 논리를 이해하지 못합니다. 를 통해 찾은 패키지를 설치하는 방법은 무엇입니까 nix-env?

답변1

NixOS 커뮤니티에는 세 가지 매뉴얼이 있습니다. 문제가 있는 경우 먼저 확인하세요.

Nix의 모든 패키지는 Nix 표현식으로 지정됩니다. Nix 표현식은 Nix 언어로 작성된 텍스트로, 일반적으로 확장자가 .nix.

모든 표현식에는 "기호 이름"이라는 것이 있으며 nix-env.see 를 사용할 때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.

답변2

다음 웹사이트를 사용하여 패키지를 검색할 수 있습니다.


데이터 과학을 위해 NixOS를 사용하는 경우:

파이썬기준 치수:

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

또는 예를 들어 npm 패키지를 얻을 수 있습니다.

nix-env -qaPA 'nixos.nodePackages'

답변3

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

nix-env -v -qaP '*'결과를 파일에 저장하겠습니다 (보통 돌아오는 데 시간이 걸리기 때문).


haskellPackagesnix-env는 다음 사항 (및 다른 사항도 가능)을 무시하는 것 같습니다 . 다음을 통해 haskellPackages와 같은 하위 카테고리의 패키지를 검색할 수 있습니다. nix-env -f '<nixpkgs>' -qaPA haskellPackages


nix-env 검색은 현재 5초 이상 걸리다가 다시 반환되기 때문에 매우 실망스럽습니다 error: regex error.

답변4

nix-search () {
    local cache_file=~/.cache/nix/nix-env-qaP

    if [[ "$1" =~ ^--?c(ache)?$ ]]; then
        mkdir -p $(dirname $cache_file)
        echo -n "Caching packages.."
        nix-env -qaP '*' >$cache_file
        echo " 

관련 정보