4개 개념이 대부분의 Nix 출력과 대부분의 Nix flake 읽기에 충분. 그 4개 너머는 필요할 때 키워.
Nix Store (/nix/store). 모든 패키지, 모든 버전, 모든 variant 가 /nix/store/<hash>-<name>/ 에 살아. hash 는 전체 빌드 레시피에서 계산 — 모든 입력, 모든 의존성, 모든 flag. 그래서 두 빌드가 절대 충돌 안 하는 이유: 다른 입력 = 다른 hash, 다른 path.
Generations 와 rollback. 모든 install 또는 업그레이드가 사용자 프로필의 새 번호 'generation' 만들어. nix-env --rollback 가 active pointer 한 generation 뒤로 — 즉시, atomic, 되돌릴 수 있음. nix-env --list-generations 로 generation 목록; nix-env --switch-generation <n> 로 특정 generation 점프.
Flakes 는 Nix 프로젝트 구조의 단위. flake.nix 가 inputs (의존하는 nixpkgs 버전, 사용하는 다른 flake) 와 outputs (dev shell, 패키지, NixOS 모듈, 앱) 선언. flake.lock 가 옆에 앉아 모든 input 의 정확한 버전 핀 — package-lock.json 이나 uv.lock 와 같은 재현성 보장, 단 전체 dev 환경에 대해.
nix-darwin 는 macOS 용 Nix 모듈 set. nix-darwin 으로 Mac 전체 선언적으로 관리 — 깐 패키지, Dock 배열, Finder 환경설정, Homebrew casks, services, 로그인 항목 — 다 버전 관리되는 Nix 코드로. darwin-rebuild switch 로 변경 적용. 상상할 수 있는 가장 야심찬 dotfiles 셋업, Mac 들 사이에 재현 가능.