본문 바로가기
C.W.K.
Stream
Lesson 04 of 05 · published

Store, generations, flakes, nix-darwin

~13 min · nix, concepts, internals

Level 0입문자
0 XP0/55 lessons0/16 achievements
0/80 XP to next level80 XP to go0% complete

네 가지 개념만 알면 대부분의 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 구성이 돼.

Code

Nix Store와 generations 살펴보기·bash
# store 봐
ls /nix/store/ | head
# 각 항목은 <hash>-<name>-<version>

# active 사용자 프로필
ls -la ~/.nix-profile
# -> /nix/var/nix/profiles/per-user/$USER/profile

# generations 목록
nix-env --list-generations
#   1   2026-04-01 ...
#   2   2026-04-15 ... (current)
#   3   2026-05-03 ... (current)

# 이전 generation 으로 rollback
nix-env --rollback

# 또는 특정으로 점프
nix-env --switch-generation 2
flake.lock으로 재현성 고정·json
// 'nix flake update' 가 자동 생성. 정확한 commit 에 핀.
{
  "nodes": {
    "nixpkgs": {
      "locked": {
        "lastModified": 1714389366,
        "rev": "6a5b8...",
        "type": "github",
        "owner": "NixOS",
        "repo": "nixpkgs"
      }
    }
  },
  "root": { "inputs": { "nixpkgs": "nixpkgs" } },
  "version": 7
}

External links

Exercise

'nix-env --list-generations'를 실행해 봐. 적어도 하나는 보일 거야. 각 타임스탬프를 읽고 언제든 돌아갈 수 있는 스냅샷이라고 생각하면 generations 개념이 훨씬 선명해져.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.