| 
     1 # Emacs Configuration  | 
         | 
     2   | 
         | 
     3 Personal Emacs configuration focused on simplicity and modern tooling while respecting default Emacs keybindings.  | 
         | 
     4   | 
         | 
     5 ## Philosophy  | 
         | 
     6   | 
         | 
     7 - Clean and minimal configuration  | 
         | 
     8 - Prefer built-in Emacs functionality when possible  | 
         | 
     9 - Use modern, actively maintained packages  | 
         | 
    10 - Respect default Emacs keybindings  | 
         | 
    11 - Single `init.el` file for simplicity  | 
         | 
    12   | 
         | 
    13 ## Structure  | 
         | 
    14   | 
         | 
    15 ```  | 
         | 
    16 ~/.emacs.d/  | 
         | 
    17 ├── init.el           # Main configuration file  | 
         | 
    18 ├── elisp/            # Custom configuration modules  | 
         | 
    19 │   ├── c-init.el     # C/C++ configuration  | 
         | 
    20 │   └── ansible-init.el # Ansible/YAML configuration  | 
         | 
    21 └── README.md         # This file  | 
         | 
    22 ```  | 
         | 
    23   | 
         | 
    24 ## Key Packages  | 
         | 
    25   | 
         | 
    26 ### Completion Framework  | 
         | 
    27 - **vertico** - Vertical completion UI  | 
         | 
    28 - **orderless** - Flexible completion style (space-separated patterns)  | 
         | 
    29 - **consult** - Enhanced commands (buffer switching, search, etc.)  | 
         | 
    30 - **marginalia** - Helpful annotations in completion candidates  | 
         | 
    31   | 
         | 
    32 ### Development  | 
         | 
    33 - **company** - Auto-completion  | 
         | 
    34 - **flycheck** - Syntax checking  | 
         | 
    35 - **treesit-auto** - Tree-sitter modes with automatic grammar installation  | 
         | 
    36 - **magit** - Git interface  | 
         | 
    37 - **forge** - GitHub/GitLab integration for magit  | 
         | 
    38 - **magit-todos** - Show TODO/FIXME comments in magit status  | 
         | 
    39   | 
         | 
    40 ### Editing  | 
         | 
    41 - **paredit** - Structured editing for Lisp  | 
         | 
    42 - **expand-region** - Smart region expansion  | 
         | 
    43 - **move-text** - Move lines/regions up and down  | 
         | 
    44 - **visual-regexp** - Visual feedback for regexp replace  | 
         | 
    45 - **yasnippet** - Snippet expansion  | 
         | 
    46 - **emmet-mode** - HTML/CSS abbreviation expansion  | 
         | 
    47 - **rainbow-delimiters** - Colorize nested delimiters  | 
         | 
    48   | 
         | 
    49 ### Modes  | 
         | 
    50 - **markdown-mode** - Markdown editing  | 
         | 
    51 - **terraform-mode** - Terraform configuration files  | 
         | 
    52 - **yaml-mode** - YAML files  | 
         | 
    53 - **json-mode** - JSON files  | 
         | 
    54 - **hgignore-mode** - Mercurial ignore files  | 
         | 
    55   | 
         | 
    56 ### Utilities  | 
         | 
    57 - **ibuffer-project** - Group buffers by project  | 
         | 
    58 - **exec-path-from-shell** - Import shell environment variables  | 
         | 
    59 - **rg** - ripgrep integration  | 
         | 
    60   | 
         | 
    61 ## Key Bindings  | 
         | 
    62   | 
         | 
    63 ### Custom Bindings  | 
         | 
    64 - `C-c c` - Compile  | 
         | 
    65 - `C-c r` - Recompile  | 
         | 
    66 - `C-c a` - Align regexp  | 
         | 
    67 - `C-c g` - Consult ripgrep (search with preview)  | 
         | 
    68 - `C-c s` - Launch eshell  | 
         | 
    69 - `C-x g` - Magit status  | 
         | 
    70 - `C-x C-b` - ibuffer (better buffer list)  | 
         | 
    71 - `C-=` - Expand region  | 
         | 
    72 - `M-p` / `M-n` - Move text up/down  | 
         | 
    73 - `M-%` - Visual regexp replace  | 
         | 
    74 - `C-M-%` - Visual regexp query replace  | 
         | 
    75   | 
         | 
    76 ### Enhanced Default Bindings  | 
         | 
    77 - `M-x` - Command execution (enhanced with vertico)  | 
         | 
    78 - `C-x b` - Switch buffer (enhanced with consult)  | 
         | 
    79 - `M-y` - Yank from kill ring (enhanced with consult)  | 
         | 
    80 - `M-/` - Company completion  | 
         | 
    81   | 
         | 
    82 ## Installation  | 
         | 
    83   | 
         | 
    84 1. Clone this repository:  | 
         | 
    85    ```bash  | 
         | 
    86    git clone [email protected]:lukehoersten/emacs.d.git ~/.emacs.d  | 
         | 
    87    ```  | 
         | 
    88   | 
         | 
    89 2. Launch Emacs - packages will auto-install on first run  | 
         | 
    90   | 
         | 
    91 3. For tree-sitter modes, grammars install automatically when first opening a file  | 
         | 
    92   | 
         | 
    93 ## Tree-sitter Support  | 
         | 
    94   | 
         | 
    95 Tree-sitter provides faster, more accurate syntax highlighting and parsing. Enabled automatically for:  | 
         | 
    96 - JavaScript/TypeScript  | 
         | 
    97 - JSON  | 
         | 
    98 - Python  | 
         | 
    99 - And many more (via `treesit-auto`)  | 
         | 
   100   | 
         | 
   101 Grammars install automatically on first use.  | 
         | 
   102   | 
         | 
   103 ## Customizations  | 
         | 
   104   | 
         | 
   105 Emacs customizations are redirected to `custom.el` (gitignored) to keep `init.el` clean.  | 
         | 
   106 The configuration uses `package-require` for explicit package management.  | 
         | 
   107   | 
         | 
   108 ## Updating Packages  | 
         | 
   109   | 
         | 
   110 ```elisp  | 
         | 
   111 M-x package-refresh-contents  | 
         | 
   112 M-x package-update-all  | 
         | 
   113 ```  | 
         | 
   114   | 
         | 
   115 ## Notes  | 
         | 
   116   | 
         | 
   117 - Theme: Solarized Light (GUI only)  | 
         | 
   118 - Font: Inconsolata-12 (GUI only)  | 
         | 
   119 - Shell: eshell (launched automatically on startup)  | 
         | 
   120 - Whitespace cleanup on save enabled globally  |