닉스 표현
닉스의 표현은 모든 프로그래밍 언어의 표현과 같다 : 아무것도 그 값이나 함수에 평가합니다. 이 경우 값은 목록 또는 집합 일 수도 있습니다. Nix 모듈 (확장자를 가진 파일 .nix
)은 Nix 표현식을 포함 할 수 있으므로 NixOS 구성 파일 ( /etc/nixos/configuration.nix
)은 단일 Nix 표현식을 파일 내용으로 포함 할 것으로 예상합니다 .
NixOS 구성 파일은 다음 형식의 Nix 표현식을 포함합니다.
{config, pkgs, ...}: { /* various configuration options */ }
당신이 자세히 보면, 당신은 A의 볼 수있는 기능 기능은 양식을하기 때문에 pattern: form
. 또한 집합을 수락하고 집합을 반환하는 함수임을 알 수 있습니다. 예를 들어, 함수가 f = {x, y}: {a = x + y;}
있으면로 호출 f {x=1; y=2;}
하여 세트를 다시 가져올 수 {a=3;}
있습니다.
전화 할 때 그 의미 그래서 nixos-rebuild switch
, 뭔가 속성이 포함되어야합니다 세트로 NixOS 구성 파일 내부의 함수를 호출 config
및 pkgs
.
수입
의 예에 따라 ./hardware-configuration.nix
패키지 목록을 별도의 모듈로 추출하는 간단한 방법 packages.nix
은 environment.systemPackages
옵션을 제거하고 옵션 에 ./packages.nix
넣는 imports
것입니다. 당신 /etc/nixos/configuration.nix
은 다음과 같이 보일 것입니다 :
{ config, ... }:
{
imports =
[ # Include the results of the hardware scan.
./hardware-configuration.nix
# Include the package list.
./packages.nix
];
# SOME STUFF
# SOME STUFF
}
당신 /etc/nixos/packages.nix
은 다음과 같이 보일 것입니다 :
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [ emacs gitFull ];
}
어떻게 작동합니까? 을 실행할 때 nixos-rebuild switch
Nix 표현식을 평가 configuration.nix
하고 일련의 속성이있는 호출에 패키지 등을 설치하기로 결정하는 프로세스 (및 일부는 config
및) pkgs
.
그것은 속성을 발견 imports
는 모듈의 모든 닉스 식 평가 때문에, 반환 된 세트 내부를 imports
같은 인수 (에 포함 config
, pkgs
등).
당신은 있어야합니다 pkgs
에서 함수의 (기술적, 자체 인수 인 세트의 속성을 말하기, 또는) 인수로 packages.nix
닉스 언어의 관점에서, 프로세스 또는 집합 그와 함께 함수를 호출하지 않을 수도 있습니다, 때문에, 포함 pkgs
합니다. 그렇지 않은 경우 실행할 때 어떤 속성을 참조 with pkgs
하시겠습니까?
함수가뿐만 아니라 다른 속성으로 호출 될 수 있기 때문에 줄임표가 있어야합니다 pkgs
.
왜이없는 pkgs
에서 configuration.nix
? 파일을 가질 수는 있지만 파일의 아무 곳이나 참조하지 않으면 생략 부호가 포함되므로 안전하게 생략 할 수 있습니다.
외부 함수를 호출하여 속성 업데이트
또 다른 방법은 일부 속성이있는 세트와 반환 할 해당 속성의 값을 반환하는 함수를 만드는 것 environment.systemPackages
입니다. 이것은 당신의 것입니다 configuration.nix
:
{ config, pkgs, ... }:
{
imports =
[ # Include the results of the hardware scan.
./hardware-configuration.nix
];
# SOME STUFF
environment.systemPackages = import ./packages.nix pkgs;
# SOME STUFF
}
당신의 packages.nix
:
pkgs: with pkgs; [ emacs gitFull ]
import ./packages.nix pkgs
의미 : Nix 표현식을로드하고 반환 ./packages.nix
하며 함수이므로 인수로 호출하십시오 pkgs
. with pkgs; [ emacs gitFull ]
A는 로 표현 , 그것은 세미콜론 후 표현에 세미콜론 전에 표현의 범위를 제공합니다. 그것 없이는 될 것 [ pkgs.emacs pkgs.gitFull ]
입니다.