#!if 넘어옴1 != null
''''''{{{#!if 넘어옴2 != null
, ''''''}}}{{{#!if 넘어옴3 != null
, ''''''}}}{{{#!if 넘어옴4 != null
, ''''''}}}{{{#!if 넘어옴5 != null
, ''''''}}}{{{#!if 넘어옴6 != null
, ''''''}}}{{{#!if 넘어옴7 != null
, ''''''}}}{{{#!if 넘어옴8 != null
, ''''''}}}{{{#!if 넘어옴9 != null
, ''''''}}}{{{#!if 넘어옴10 != null
, ''''''}}}은(는) 여기로 연결됩니다.
#!if 설명 == null && 리스트 == null
{{{#!if 설명1 == null
다른 뜻에 대한 내용은 아래 문서를}}}{{{#!if 설명1 != null
{{{#!html 동음이의어}}}에 대한 내용은 [[닉스(동음이의어)]] 문서{{{#!if (문단1 == null) == (앵커1 == null)
를}}}{{{#!if 문단1 != null & 앵커1 == null
의 [[닉스(동음이의어)#s-|]]번 문단을}}}{{{#!if 문단1 == null & 앵커1 != null
의 [[닉스(동음이의어)#|]] 부분을}}}}}}{{{#!if 설명2 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단2 == null) == (앵커2 == null)
를}}}{{{#!if 문단2 != null & 앵커2 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단2 == null & 앵커2 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명3 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단3 == null) == (앵커3 == null)
를}}}{{{#!if 문단3 != null & 앵커3 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단3 == null & 앵커3 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명4 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단4 == null) == (앵커4 == null)
를}}}{{{#!if 문단4 != null & 앵커4 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단4 == null & 앵커4 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명5 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단5 == null) == (앵커5 == null)
를}}}{{{#!if 문단5 != null & 앵커5 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단5 == null & 앵커5 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명6 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단6 == null) == (앵커6 == null)
를}}}{{{#!if 문단6 != null & 앵커6 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단6 == null & 앵커6 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명7 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단7 == null) == (앵커7 == null)
를}}}{{{#!if 문단7 != null & 앵커7 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단7 == null & 앵커7 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명8 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단8 == null) == (앵커8 == null)
를}}}{{{#!if 문단8 != null & 앵커8 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단8 == null & 앵커8 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명9 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단9 == null) == (앵커9 == null)
를}}}{{{#!if 문단9 != null & 앵커9 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단9 == null & 앵커9 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명10 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단10 == null) == (앵커10 == null)
를}}}{{{#!if 문단10 != null & 앵커10 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단10 == null & 앵커10 != null
의 [[#|]] 부분을}}}}}}
#!if 설명 == null
{{{#!if 리스트 != null
다른 뜻에 대한 내용은 아래 문서를}}} 참고하십시오.
#!if 리스트 != null
{{{#!if 문서명1 != null
* {{{#!if 설명1 != null
동음이의어: }}}[[닉스(동음이의어)]] {{{#!if 문단1 != null & 앵커1 == null
문서의 [[닉스(동음이의어)#s-|]]번 문단}}}{{{#!if 문단1 == null & 앵커1 != null
문서의 [[닉스(동음이의어)#|]] 부분}}}}}}{{{#!if 문서명2 != null
* {{{#!if 설명2 != null
: }}}[[]] {{{#!if 문단2 != null & 앵커2 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단2 == null & 앵커2 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명3 != null
* {{{#!if 설명3 != null
: }}}[[]] {{{#!if 문단3 != null & 앵커3 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단3 == null & 앵커3 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명4 != null
* {{{#!if 설명4 != null
: }}}[[]] {{{#!if 문단4 != null & 앵커4 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단4 == null & 앵커4 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명5 != null
* {{{#!if 설명5 != null
: }}}[[]] {{{#!if 문단5 != null & 앵커5 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단5 == null & 앵커5 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명6 != null
* {{{#!if 설명6 != null
: }}}[[]] {{{#!if 문단6 != null & 앵커6 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단6 == null & 앵커6 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명7 != null
* {{{#!if 설명7 != null
: }}}[[]] {{{#!if 문단7 != null & 앵커7 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단7 == null & 앵커7 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명8 != null
* {{{#!if 설명8 != null
: }}}[[]] {{{#!if 문단8 != null & 앵커8 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단8 == null & 앵커8 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명9 != null
* {{{#!if 설명9 != null
: }}}[[]] {{{#!if 문단9 != null & 앵커9 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단9 == null & 앵커9 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명10 != null
* {{{#!if 설명10 != null
: }}}[[]] {{{#!if 문단10 != null & 앵커10 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단10 == null & 앵커10 != null
문서의 [[#|]] 부분}}}}}}
<colbgcolor=#7eb9e3><colcolor=#fff> Nix | |
| |
종류 | 패키지 매니저, 프로그래밍 언어 |
출시 | 2003년 6월 15일 |
최초 개발자 | 엘코 돌스트라 |
개발 | NixOS Team |
언어 | C++ |
플랫폼 | Linux, Darwin, FreeBSD |
버전 | 2.25.4 |
라이선스 | GNU 약소 일반 공중 사용 허가서 2.1 |
링크 |
[clearfix]
1. 개요
리눅스 및 Darwin 운영체제용 선언적, 재현적 패키지 관리자.2. 특징
전역 설치밖에 할 수 없는 다른 리눅스 패키지 관리자들과는 다르게, 모든 패키지를/nix/store
하위의 독립된 디렉토리에 설치한다. 개별 버전의 패키지는 전부 고유한 해시 값을 가지며, 따라서 버전이 올라가면 store
하위의 폴더 이름도 바뀌어, 새로운 공간에 설치된다. 종속성 또한 이러한 해시를 가지고 있으며, 따라서 같은 이름의 서로 다른 버전의 라이브러리를 동시에 설치하거나, 여러 프로그램이 각각이 찾는 버전의 라이브러리를 링크하는 일도 가능하다.3. 문법
튜토리얼패키지를 정의하기 위해 자체적인 도메인 특화 언어를 가지고 있으며, 이를 이용해 패키지와 설정을 모두 정의한다. JSON과 매우 닯았다.
속성 집합(attribute sets)이 핵심적인 자료구조로, 다음과 같이 정의한다.
{ key1 = val1; key2 = val2; }
이 때 집합을 정의하면서 자신이 이미 가진 key의 값을 참조해 다른 key의 값을 정의하는 것도 가능한데, 이를 재귀적 정의라고 한다. 재귀적 정의를 하기 위해선 rec
키워드를 붙여야 한다.rec {
one = 1;
two = one + 1;
}
함수는 으레 함수형 언어들이 그렇듯 커링(currying) 활용을 위해 단 하나의 인자만 받는다.[1]
:
의 왼쪽에 오는 식별자가 인자, 우측에 오는 식별자가 치환(replace)될 표현식(expression)이다.x: x + 1
여러 인자를 받는다면 커링을 활용한다.x: y: x + y
4. 환경
5. 패키징
6. nixpkgs
Nix 패키지들의 중앙 레지스트리.
.nix
패키지들의 Git 저장소 형태로 구성되어 있으며, 현재 약 10만개가 넘는 패키지를 보유하고 있다. nixpkgs 저장소 자체는 패키지 정의 소스 파일들만 포함하고, 실제 각 플랫폼별로 빌드된 derivations 바이너리는 자체 CI 시스템인 hydra에 캐시된다.6.1. channel
#안정 상태 정책에 따라 nixpkgs 저장소의 특정 리비전을 가르키는 브랜치. 대표적으로 매일 업데이트되는
unstable
이 있으며, nixos기준으로 6개월마다 한번씩 관리되는 메이저 버전이 존재한다.nixpkgs가 아닌 추가(extra) 채널도 사용할 수 있는데, 대표적인 예시가 home-manager. primary채널을 설정하기 위해선 channel alias를
nixpkgs
또는 nixos
로 설정해야 한다.7. flakes
공식 위키2019년부터 개발되어 2021년부터 실험적 기능(experimental feature)으로 도입된 신기능으로, 핵심적으로 nixpkgs에서 모든 종속성의 버전을 고정하는 기능을 추가한다.
8. 파생 소프트웨어
- home-manager
- nix-search-cli
- lix - Nix 구현체
- GUIX - GNU의 Sheperd init사용# NixOS 구현체
- lazamar nix-versions - nixpkgs의 채널별 패키지를 인덱싱한 데이터베이스. 주로 호환성 이슈로 과거 패키지 버전을 찾아야 하지만 flake가 없을 때 사용된다.
8.1. NixOS
8.2. nix-darwin
Nix 패키지 매니저 및 NixOS 정의 구조를 Darwin 커널에도 적용하는 프로젝트.
[1] A function always takes exactly one argument. Argument and function body are separated by a colon