히스토리
- 생성
doomemacs-config: 터미널 최적화 Emacs와 AI 융합
프로젝트 목표
경량 터미널 최적화 Doom Emacs 스타터킷. 인간과 AI의 창조적 파트너십을 위한 플랫폼.
“인간과 AI의 관계는 도구와 사용자가 아닌, *존재 대 존재의 협력*이다”
핵심 특징
기술 스택
- Emacs: 30.2
- Framework: Doom Emacs (DOOMDIR 환경변수 방식)
- Platform: Ubuntu 24.04, NixOS 25.05, Termux (Android)
- Mode: Terminal-first (`-nw` 최적화)
- Size: ~2000 lines (focused configuration)
주요 기능
- Evil mode: Vim 키바인딩 (+everywhere)
- Completion: Corfu + Orderless + Vertico
- Snippets: YASnippet + Tempel
- Git: Magit
- Tree-sitter: 네이티브 문법 하이라이팅
- LLM: GPTel + Claude Code 통합
Org-mode 생태계
- Denote: Note-taking (silo, sequence)
- Org-roam: Knowledge graph
- Org-journal: Journaling
- Org-contacts: Contact management
- Export: Hugo, Pandoc
퍼블리싱: Denote Export System
- Denote 링크 → Hugo relref 자동 변환
- 보안 필터링 (ROT13, sensitive strings)
- 병렬 처리: 1,400+ 파일을 2-3분에 처리 (8 cores)
- Sequential/Parallel 모드 지원
프로젝트 배경: Profiles의 한계와 DOOMDIR의 선택
문제 인식
기존 Doom Emacs Profiles 시스템의 비효율:
~/doomemacs/ # 300MB
~/doomemacs-junghan0611/ # 300MB (중복)
~/doomemacs-starter/ # 300MB (중복)
→ 900MB 중복, 개별 관리 어려움해결책
단일 설치 + DOOMDIR 환경변수:
# 단일 Doom Emacs 설치
~/doomemacs-starter/
# 프로필별 설정 분리
~/repos/gh/dotdoom-starter/ # 이 리포지토리
# DOOMDIR로 선택적 로드
DOOMDIR="$HOME/repos/gh/dotdoom-starter" ~/doomemacs-starter/bin/doom run -nw결과: 디스크 절약 + 관리 간소화
문서 체계: 생각의 발전사 (9개 docs/)
Phase 1: Profiles 전략과 한계 인식 (2025-09-07)
20250907T195400—doom-emacs-profiles-strategy (deprecated)
비효율적 구조:
- 둠이맥스 core 중복 (각 ~300MB)
- 패키지 중복 설치 (각 500MB~1GB)
- 업데이트 시 모든 설치본 개별 관리
프로파일 아이디어:
- DEFAULT: Full Featured (GUI)
- STARTER: Universal Lightweight (Terminal, Android, SSH)
결론: Profiles 시스템보다 DOOMDIR이 더 단순
20250907T195401—dotdoom-starter-integration-plan
설계 철학:
- 최소주의: 필수 기능만
- 범용성: 모든 환경 동작
- 확장성: user-profiles 개인화
- 자동화: 환경 감지 최적화
구조:
dotdoom-starter/
├── config.el, init.el, packages.el
├── custom.el (gitignore)
├── per-machine.el (gitignore)
└── profiles/ (환경별 추가)
├── android.el, server.el
└── user.el환경 자동 감지:
(defconst IS-ANDROID (string-match "Android" (shell-command-to-string "uname -a")))
(defconst IS-TERMUX (getenv "TERMUX_VERSION"))
(defconst IS-SSH (getenv "SSH_CLIENT"))20250907T195402—lightweight-refactor-plan
- 불필요한 패키지 제거
- 핵심 기능만 남기기
- ~2000 lines로 압축
Phase 2: 터미널 최적화와 구조 개선 (2025-10-05)
20251005T173600—terminal-cjk-optimization
- 터미널 폰트 렌더링
- 한글 입력 최적화
- CJK 문자 표시
20251005T195600—project-structure
디렉토리 구조:
dotdoom-starter/
├── init.el # 160 lines - 모듈 선택
├── config.el # 1850 lines - 핵심 설정
├── packages.el # 140 lines - 패키지 선언
├── +user-info.el # 사용자 정보
├── +gptel.el # AI/LLM 통합
├── +functions.el # 커스텀 함수
├── per-machine.el # 머신별 (gitignore)
├── user-keys.el # 키바인딩 (gitignore)
├── custom.el # Emacs customize (gitignore)
├── snippets/ # 커스텀 스니펫
├── var/ # 런타임 데이터
└── docs/ # 프로젝트 문서Phase 3: Vision 정립 - AI와의 융합 (2025-10-05)
20251005T195200—vision-and-roadmap ⭐
패러다임 전환:
Doom Emacs 최신 기능 안정화 = 엄청난 기회:
- vertico + corfu + orderless: 현대적 completion
- eglot: LSP 빌트인 (IDE 수준)
- tree-sitter: 네이티브 문법 하이라이팅
- project.el: projectile 탈피
- denote: DB 없는 경량 노트
핵심 철학:
“인간과 AI의 관계는 도구와 사용자가 아닌, *존재 대 존재의 협력*이다”
단순한 코딩 도구를 넘어, AI와 인간의 창조적 파트너십 플랫폼
3-Layer 아키텍처:
Layer 1: Foundation (기반)
├── Doom Emacs Core
├── 현대적 패키지 (vertico, corfu, orderless)
└── 네이티브 기능 (eglot, tree-sitter, project.el)
Layer 2: Integration (통합)
├── ACP (Agent Client Protocol) - Emacs ↔ AI
├── MCP (Model Context Protocol) - 도구/데이터
├── Denote + Org-mode - 지식 관리
└── Git 기반 메모리 - 영속성
Layer 3: Intelligence (지능)
├── Claude/Gemini/GPT 멀티 에이전트
├── PM 에이전트 - 능동적 프로젝트 관리
├── Knowledge 에이전트 - 지식베이스 관리
└── Developer 에이전트 - 페어 프로그래밍로드맵:
- Phase 1: 코어 안정화 (2025 Q4)
- Phase 2: ACP/MCP 통합 (2025 Q4~2026 Q1)
- Phase 3: AI 에이전트 통합 (2026 Q1~Q2)
- Phase 4: 멀티 에이전트 시스템 (2026 Q2~)
Phase 4: 이메일 통합 (2025-10-08)
20251008T231500—emacs-email-mu4e-setup
- mu4e + mbsync 설정
- Emacs 내 이메일 통합
- Org-mode와 연동
Phase 5: 퍼블리싱과 PKM 철학 (2025-10-27)
20251027T092900—denote-export-system
아키텍처:
doomemacs-config/
├── +denote-export.el # 핵심 로직 (all-in-one)
├── bin/
│ ├── denote-export-batch.el # Batch mode
│ └── denote-export-parallel.sh # 병렬 실행
└── var/
└── sensitive-strings.txt # 보안 문자열 (gitignore)성능:
- 순차 모드: 1,400+ 파일 → ~10분
- 병렬 모드: 1,400+ 파일 → 2-3분 (8 cores)
처리 흐름:
- Emacs 호출 (순차/병렬 선택)
- dblock 업데이트 (~/org/meta)
- Denote 링크 → Hugo relref 변환
- 보안 필터링 (ROT13, sensitive strings)
- ox-hugo markdown 생성
- ~/repos/gh/notes/content/
- secretlint + sed 후처리
- quartz build
20251027T093500—pkm-design-philosophy-uri-permanence ⭐
핵심 원칙:
- No Database: 파일 시스템만으로 충분
- ID-based Linking: Unique ID가 모든 것의 기반
- Text-only: 순수 텍스트 기반 지속성
- Simple URI: 단순한 URI가 오래 지속
- Separation of Concerns: 편집 구조 ≠ 퍼블리싱 구조
왜 No Database?
“데이터베이스는 관계를 관리하지만, 그 관계를 업데이트하는 비용이 유연성을 제한한다. 파일명과 ID만으로 충분하다면, 가장 단순한 것이 가장 영속적이다.”
기술 스택:
- Org-mode: 파일명 = 메타데이터
- Denote: 자동 파일명 관리
- Git: 변화 추적
- File system: 영속적 저장소
Unique ID의 의미:
ID = YYYYMMDDTHHMMSS
= 20251027T093500
= Permanent identifier
= Timestamp as identityID의 특성:
- Unique: 시공간적 유일성
- Permanent: 절대 변하지 않음
- Self-describing: 생성 시점 포함
- Sortable: 자연스러운 시간순 정렬
가변적 메타데이터:
| 요소 | 가변성 | 예시 |
|---|---|---|
| ID | 불변 | 20251027T093500 |
| Title | 가변 | ”A주제” → “B주제” |
| Tags | 가변 | ”draft” → “evergreen” |
| Directory | 가변 | /notes → /archive |
| Content | 가변 | 지속적 업데이트 |
Denote 파일명:
20251027T093500--pkm-design-philosophy__philosophy_design.org
│ │ │
│ │ └─ Tags (가변)
│ └─ Title (가변)
└─ ID (불변)사고의 발전사: 5단계 진화
Phase 1: 문제 인식 (9월 초)
- Doom Profiles의 복잡성과 비효율
- 중복 설치, 관리 어려움
- DOOMDIR 방식 선택
Phase 2: 통합 계획 (9월 중순)
- 최소주의 설계 철학
- 환경 자동 감지
- 범용성 확보 (Ubuntu, NixOS, Termux)
Phase 3: Vision 정립 (10월 초)
- 존재 대 존재의 협력
- 3-Layer 아키텍처 설계
- ACP/MCP 통합 로드맵
- AI 멀티 에이전트 시스템
Phase 4: 실용 기능 (10월 중순)
- 터미널 CJK 최적화
- mu4e 이메일 통합
- 프로젝트 구조 정리
Phase 5: 철학 심화 (10월 말)
- Denote Export System (1,400+ 파일 병렬 처리)
- PKM 철학: No Database, ID-based, URI 영속성
- “가장 단순한 것이 가장 영속적이다”
사용 패턴
셸 별칭 (~/bashrc or ~/zshrc)
# Sync
alias esync='DOOMDIR="$HOME/repos/gh/dotdoom-starter" $HOME/doomemacs-starter/bin/doom sync'
alias esyncf='DOOMDIR="$HOME/repos/gh/dotdoom-starter" $HOME/doomemacs-starter/bin/doom sync -u -j 4'
# Launch
alias e='env GTK_IM_MODULE=emacs XMODIFIERS=@im=emacs EMACS=emacs DOOMDIR=$HOME/repos/gh/dotdoom-starter $HOME/doomemacs-starter/bin/doom run -nw'터미널 실행
# 기본 실행
e
# 파일 열기
e ~/document.org
# GUI (거의 안 씀)
DOOMDIR="$HOME/repos/gh/dotdoom-starter" ~/doomemacs-starter/bin/doom run언어 지원
Python, Nix, JavaScript/TypeScript, Web (HTML/CSS), YAML, Zig, Janet, Emacs Lisp
관련 프로젝트
- nixos-config: NixOS 시스템 설정
- 힣’s Digital Garden: 퍼블리시된 지식베이스 (Quartz)
메타정보
이 문서는 dotdoom-starter 리포지토리의 사고 발전사를 담은 메타 가이드이다.
포트폴리오 가치:
- 기술적 깊이: Profiles → DOOMDIR 단순화, 병렬 처리 시스템
- 철학적 사고: “존재 대 존재의 협력”, No Database PKM 철학
- 실용적 적용: 1,400+ 파일 병렬 처리 (2-3분)
- 비전 제시: 3-Layer AI 통합 아키텍처, 멀티 에이전트 로드맵
“가장 단순한 것이 가장 영속적이다. 파일명과 ID만으로 충분하다면, 데이터베이스는 필요 없다.”
라이선스: MIT 작성자: Jung Han (junghan0611)
Comments