# Doom Emacs

## 概要

Doom Emacsは、GNU Emacs用の設定フレームワークです。高速な起動、モジュール式の構成、宣言的なパッケージ管理を特徴とし、Vimキーバインディング（evil-mode）のサポートや多言語対応を提供します。Emacsの設定を最小限の労力で最大限にカスタマイズできることを目指しています。

## 主な機能

| 機能カテゴリ | 説明 |
| --- | --- |
| モジュールシステム | 約150のオプショナルモジュールによる機能の有効化/無効化 |
| パッケージ管理 | straight.elを使用した宣言的パッケージ管理とCLIツール |
| Vim エミュレーション | evil-modeによるVimキーバインディングのサポート |
| LSP統合 | lsp-modeまたはeglotによる言語サーバープロトコル対応 |
| 多言語サポート | 60以上のプログラミング言語の構文ハイライト、補完、REPL |
| 補完システム | Vertico, Ivy, Helm, Corfu, Companyなど複数の補完フレームワーク対応 |
| プロジェクト管理 | projectile統合によるプロジェクト検索と管理 |
| UI カスタマイズ | ダッシュボード、モードライン、ワークスペース、タブなどのUI機能 |
| ツール統合 | Git(Magit)、Docker、Terraform、デバッガーなどの開発ツール |

## 技術スタック

### コア

- フレームワーク: GNU Emacs (27.1-30.2対応、30.2推奨)
- 言語: Emacs Lisp
- パッケージマネージャー: straight.el
- Vim エミュレーション: evil-mode

### 主要ライブラリ

- straight.el: 宣言的パッケージ管理
- evil-mode: Vimキーバインディング
- lsp-mode / eglot: LSP統合
- projectile: プロジェクト管理
- company / corfu: 自動補完
- vertico / ivy / helm: 補完UI
- magit: Git統合
- gcmh-mode: GC最適化

## ディレクトリ構成

```
doomemacs-master/
├── bin/                    # CLIツール
│   ├── doom                # メインCLIスクリプト
│   ├── doom.ps1           # Windows用PowerShellスクリプト
│   ├── doom.sh            # シェルラッパー
│   ├── doomscript         # Doomスクリプトランナー
│   └── org-capture        # org-capture用スクリプト
├── docs/                   # ドキュメント
│   ├── index.org          # ドキュメントインデックス
│   ├── getting_started.org # 入門ガイド
│   ├── faq.org            # よくある質問
│   ├── contributing.org   # コントリビューションガイド
│   └── modules.org        # モジュール説明
├── lisp/                   # コアライブラリ
│   ├── doom.el            # コア（心臓部）
│   ├── doom-lib.el        # ユーティリティ関数
│   ├── doom-cli.el        # CLIフレームワーク
│   ├── doom-start.el      # 起動処理
│   ├── doom-ui.el         # UI設定
│   ├── doom-editor.el     # エディタ設定
│   ├── doom-keybinds.el   # キーバインド
│   ├── doom-projects.el   # プロジェクト管理
│   ├── doom-straight.el   # パッケージ管理統合
│   ├── cli/               # CLIコマンド実装
│   ├── lib/               # 追加ライブラリ
│   └── modules/           # コアモジュール
├── modules/                # オプショナルモジュール
│   ├── app/               # アプリケーション（カレンダー、IRC等）
│   ├── checkers/          # 構文チェック（flycheck等）
│   ├── completion/        # 補完システム（vertico, ivy等）
│   ├── config/            # 設定モジュール
│   ├── editor/            # エディタ拡張（evil, snippets等）
│   ├── emacs/             # Emacs組み込み機能拡張
│   ├── email/             # メールクライアント
│   ├── input/             # 入力メソッド（日本語、中国語等）
│   ├── lang/              # プログラミング言語（60以上）
│   ├── os/                # OS固有設定
│   ├── term/              # ターミナル（vterm, eshell等）
│   ├── themes/            # テーマ
│   ├── tools/             # 開発ツール（LSP, Magit等）
│   └── ui/                # UI拡張（modeline, treemacs等）
├── profiles/               # プロファイル設定
├── static/                 # 静的リソース
├── early-init.el          # 起動初期化（Emacs 27+）
├── shell.nix              # Nix開発環境
├── .doom                  # プロジェクトメタデータ
└── LICENSE                # MITライセンス
```

## セットアップ

### 必要条件

- **必須:**
  - GNU Emacs 27.1-30.2（30.2推奨）
    - Doomコアのみ: 27.1以上
    - Doomモジュール使用: 28.1以上
    - Tree-sitterサポート: 29.1以上（30.1+で改善）
  - Git 2.23以上
  - ripgrep 11.0以上

- **推奨:**
  - fd 7.3.0以上（ファイル検索性能向上）
  - MacOS/BSD: GNU版 find, ls, tar
  - Symbola フォント（グリフのフォールバック用）

### インストール手順

```sh
# 1. リポジトリのクローン
git clone --depth 1 https://github.com/doomemacs/doomemacs ~/.config/emacs

# 2. Doomのインストール
~/.config/emacs/bin/doom install

# 3. PATHの追加（推奨）
export PATH="$HOME/.config/emacs/bin:$PATH"
```

## 開発

### CLIコマンド

```sh
# 設定の同期（パッケージのインストール/削除、キャッシュ再生成）
doom sync

# Doomとパッケージのアップデート
doom upgrade

# 環境診断
doom doctor

# シェル環境のスナップショット保存
doom env
```

### プロファイルシステム

Doom Emacsはプロファイルシステムをサポートしており、複数の設定を切り替えて使用できます。

```sh
# プロファイルを指定して起動
emacs --profile NAME

# または環境変数で指定
DOOMPROFILE=NAME emacs
```

### Nix開発環境

```sh
# デフォルト（Emacs 30.2）
nix-shell

# 特定バージョンのEmacs
nix-shell --argstr emacs 29.4

# カスタムDOOMDIR
nix-shell --argstr doomdir ~/.config/other-doom-config
```

### ディレクトリ環境変数

- `$EMACSDIR`: Doom Emacsのインストールディレクトリ
- `$DOOMDIR`: ユーザー設定ディレクトリ（デフォルト: `~/.config/doom`）
- `$DOOMLOCALDIR`: ローカルデータディレクトリ
