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