nixos-config: 재현 가능한 컴퓨팅 환경 구축

프로젝트 목표

선언적, 재현 가능한 컴퓨팅 환경 구축. NixOS와 home-manager를 활용하여 인간과 AI 에이전트가 협업할 수 있는 투명한 시스템 환경을 만든다.

“A computer is not a black box—it’s the blacksmith’s forge. The master controls the tools, the apprentice (agent) assists, but tool selection remains under the master’s command.”

핵심 특징

기술 스택

  • OS: NixOS 25.05+ (Flakes)
  • WM: i3wm (Regolith 3 style) + GNOME (specialisation)
  • Compositor: picom (호스트별 제어)
  • Status Bar: py3status + Emacs org-clock 통합
  • Editor: Doom Emacs (dotdoom-starter 통합)
  • Email: mu4e + mbsync
  • Development: 언어별 모듈화 (Python, Nix, C/C++, LaTeX, Shell, Elisp)

Home-Manager 모듈화

users/junghan/modules/
├── shell.nix, i3.nix, dunst.nix, picom.nix
├── emacs.nix, email.nix, fonts.nix
└── development/  # Per-language

리팩토링 성과: 341줄 → 118줄 (-65%)

철학적 기반: 재현성과 대장장이의 도구 철학

재현성의 진정한 의미

전통적 OS의 문제:

"What's installed?" → Unknown
"What version?" → Unclear
Agent: Guesses, trial-and-error

NixOS의 답:

# configuration.nix = Single source of truth
environment.systemPackages = [
  pkgs.emacs pkgs.git pkgs.python311
];

대장장이 비유: Master, Tools, Apprentice

구조:

대장장이 (Master/Human)
    ↓ 선택, 통제
도구 (Tools: Computer/NixOS)
    ↓ 확장된 신체
직원 (Apprentice: AI Agent)
    ↓ 보조, 도구 선택은 주인의 영역

핵심 통찰:

  1. Reproducibility = Trust: configuration.nix → Agent의 정확한 행동
  2. Master’s Control: 도구 선택은 인간의 영역
  3. Scale: Desktop → Server → Cluster (동일한 문법)
  4. Transparency for Agents: AI가 필요한 모든 정보 제공 (systemPackages, 버전, 도구)

문서 체계: 생각의 발전사 (14개 docs/)

1단계: 설치와 기초 (2025-10-07)

20251007T084033—nixos-base-installation
  • Oracle Cloud VM: GRUB → UEFI 진입
  • 공개키 설정, 네트워크 자동 인식
  • 핵심만 남긴 실용적 가이드
20251007T160508—regolith-i3-keybindings
  • i3wm 기본 키바인딩
  • Regolith 스타일 커스터마이제이션

2단계: 선배들로부터 배우기 (2025-10-08)

20251008T131800—hlissner-dotfiles-analysis

핵심 학습:

  • Nix 선언적 설정 + Janet 스크립트 통합 CLI (`hey`)
  • 모듈화 구조: desktop/, dev/, editors/, themes/
  • 커스텀 패키지 + overlay 활용
20251008T133112—ellenajit-nixos-config-analysis

핵심 학습:

  • home-manager 중심 구성 (i3, emacs, 개발환경 모두)
  • niv 기반 의존성 관리 (flake 없이)
  • 단순하고 명확한 모듈 구조
  • 언어별 개발환경 분리 (python.nix, rust.nix, etc.)
20251008T164727—home-manager-integration-plan

리팩토링 계획:

Before:
  home-manager.nix: 341줄 (단일 파일)
  i3 설정: builtins.readFile ./i3 (파일 참조)
 
After:
  home-manager.nix: 118줄 (imports만)
  modules/: i3.nix, dunst.nix, shell.nix, development/
  i3 설정: xsession.windowManager.i3.config (선언적)

결과: -65% 코드 감소, 명확한 모듈 분리

20251008T224707—picom-compositor-strategy
  • VM에서는 오버헤드 방지 (기본 비활성화)
  • Desktop에서는 기본 활성화
  • `Mod+c` 토글 키바인딩

3단계: 재현성의 심화 이해 (2025-10-10~11)

20251010T094310—i3에서-sway로-전환-가이드
  • i3 (X11) vs sway (Wayland) 비교
  • 전환 시 고려사항
20251010T095656—oracle-cloud-xrdp-설정-가이드
  • xrdp를 통한 원격 접속
  • NixOS 설정 방법
20251011T192649—nixos-laptop-환경-개선-작업
  • Shell 환경 개선
  • Claude AI와의 협업 작업
20251011T203742—nixos-home-manager-애플리케이션-재현성-전략

핵심 인사이트:

일반적 재현성 (부족함):

  • 시스템 패키지 목록
  • 서비스 설정

완전한 재현성 (Home-Manager):

  • 애플리케이션 자체 (선언적 패키지)
  • 애플리케이션 설정 (Nix store 심볼릭 링크)
  • 사용자 환경 전체 (dotfiles, configs, preferences)

“애플리케이션 그 자체부터 설정까지 다 재현할 수 있어야 한다.”

Stow vs Home-Manager:

Stow:        설정 파일을 복사/링크
Home-Manager: 설정을 선언하고 생성 (Nix store 관리)

4단계: 철학 정립 (2025-10-18)

20251018T184200—nixos-재현성과-대장장이의-도구철학

핵심 통찰:

재현성이 낯선 이유:

일반적 컴퓨터 사용:
  1. 프로그램 클릭-클릭 설치
  2. 설정 UI 체크박스
  3. "컴퓨터가 이상해요"
  4. 포맷 후... "아, 뭘 설치했더라?"
 
→ 컴퓨터 = 블랙박스, 재현 = 기억 의존

NixOS 패러다임:

# configuration.nix = 시스템 전체가 하나의 텍스트
{
  environment.systemPackages = [ pkgs.emacs pkgs.git ];
  services.xserver.windowManager.i3.enable = true;
}
 
 투명성 + 재현성 + 제어권

대장장이 비유:

대장장이 (Human):
  - 도구 선택 (nixos-config)
  - 환경 통제
  - 최종 판단
 
도구 (Computer):
  - 키보드, 에디터, 언어
  - 확장된 신체
 
직원 (AI Agent):
  - 보조, 도구는 선택 안 함
  - 도구 선택 = 주인의 영역

Scale: Desktop → Data Center:

동일한 문법, 무한한 확장:
  - Desktop: configuration.nix
  - Server: configuration.nix (같은 패턴)
  - Cluster: flake.nix (같은 철학)
 
→ 한 번 배우면 어디서나 적용

5단계: 트러블슈팅과 하드웨어 대응 (2025-10-25~28)

20251025T162126—oracle-cloud-boot-volume-resize-파티션-레이블-문제

문제: Volume resize 후 파티션 레이블 손실 해결: UUID 기반 마운트 사용 (hardware-configuration.nix) 교훈: disk-config.nix는 초기 설치용, 운영 설정과 분리

20251028T120153—samsung-nt930sbe-nixos-hardware-support-guide
  • Samsung Galaxy Book 계열 NixOS 하드웨어 설정
  • 터치패드, 백라이트, 전원 관리 등
20251008T125047—oracle-vm-스토리지-확장-백업-전략
  • Boot Volume 확장 전략
  • 백업 및 복구 계획

사고의 발전사: 4단계 진화

Phase 1: 기술 학습 (10월 초)

  • NixOS 설치, 키바인딩, 기본 설정
  • 선배들 분석 (hlissner, ElleNajt)

Phase 2: 구조 개선 (10월 중순)

  • Home-Manager 통합 계획
  • 341줄 → 118줄 리팩토링 (-65%)
  • 모듈화: i3.nix, development/

Phase 3: 본질 이해 (10월 중순~말)

  • 완전한 재현성: 애플리케이션 + 설정 모두
  • Stow vs Home-Manager 차이 이해
  • Nix store 심볼릭 링크의 의미

Phase 4: 철학 정립 (10월 말)

  • 재현성의 본질: 왜 낯선가? 어떻게 극복하나?
  • 대장장이 비유: Master-Tools-Apprentice
  • 인간-AI 협업: 투명성 = 신뢰, 제어권 = 주인

디바이스별 배포

  • Oracle Cloud: 192.168.165.141 (storage-01)
  • Laptop: ThinkPad P16s (Ubuntu 24.04 → NixOS)
  • GPU Cluster: GPU-01~03 (RTX 5080 × 3, ProxyJump)

관련 프로젝트

참고 자료

메타정보

이 문서는 nixos-config 리포지토리의 사고 발전사를 담은 메타 가이드이다.

포트폴리오 가치:

  1. 기술적 깊이: 재현성의 본질 이해
  2. 철학적 사고: 인간-AI 협업 패러다임
  3. 실용적 적용: 341줄 → 118줄 리팩토링
  4. 체계적 문서화: 14개 문서로 사고 발전사 기록

“컴퓨터는 블랙박스가 아니라 대장장이의 대장간이다. 주인이 도구를 통제하고, 직원(에이전트)은 보조하되, 도구 선택은 주인의 영역이다.”

라이선스: MIT 작성자: Jung Han (junghan0611)