네 가지 개념만 알면 대부분의 Nix 출력과 flake를 읽을 수 있어. 그 밖의 개념은 실제로 필요해질 때 넓혀 가면 돼.
Nix Store(/nix/store). 모든 패키지와 버전, variant는 /nix/store/<hash>-<name>/에 저장돼. 해시는 모든 입력, 의존성, 플래그를 포함한 전체 빌드 명세에서 계산해. 입력이 다르면 해시와 경로도 달라지므로 두 빌드가 충돌하지 않아.
Generations와 rollback. 설치나 업그레이드 때마다 사용자 프로필에 번호가 붙은 새 generation이 생겨. nix-env --rollback은 활성 포인터를 바로 이전 generation으로 옮기므로 즉시, 원자적으로 되돌릴 수 있어. nix-env --list-generations로 목록을 보고 nix-env --switch-generation <n>으로 원하는 시점으로 이동해.
Flakes는 Nix 프로젝트 구조의 단위야. flake.nix는 사용할 nixpkgs 버전과 다른 flake 같은 입력, 그리고 개발 셸·패키지·NixOS 모듈·앱 같은 출력을 선언해. 나란히 있는 flake.lock은 모든 입력의 정확한 버전을 고정해. package-lock.json이나 uv.lock과 비슷하지만, 패키지 하나가 아니라 개발 환경 전체의 재현성을 보장하지.
nix-darwin은 macOS용 Nix 모듈 모음이야. 설치된 패키지, Dock 배열, Finder 설정, Homebrew cask, 서비스, 로그인 항목까지 Mac 전체를 버전 관리되는 Nix 코드로 선언할 수 있어. darwin-rebuild switch로 변경을 적용하며, 여러 Mac에서 재현할 수 있는 매우 야심찬 dotfiles 구성이 돼.