A comprehensive, modular Emacs configuration optimized for note-taking, writing, coding, and productivity. Built with modern packages and best practices.
- Package Management: Uses Elpaca for fast, async package installation
- Completion System: Vertico (vertical completion) + Corfu (in-buffer completion) + Cape
- Search: Consult, Embark, and ripgrep integration
- Icons: Nerd Icons and All The Icons support
- Themes: Multiple theme support (Modus, Poet, Doric, EF Themes, Everforest, Leuven)
- Org Mode: Full-featured Org mode setup with modern enhancements
- Denote: Zettelkasten-style note-taking system
- Xeft: Fast note search and creation
- Org-GTD: Getting Things Done workflow integration
- Org Journal: Daily journaling system
- Org QL: Powerful query language for Org files
- LSP Support: Language Server Protocol integration
- Tree-sitter: Modern syntax parsing
- Version Control: Magit, Forge, and Git integration
- Code Quality: Flycheck, Format-all, Apheleia
- AI Tools: GPTel (Claude, OpenAI, Perplexity) and Copilot
- Spell Checking: Jinx (fast spell checker)
- Markdown: Full Markdown mode support
- Export: Org export with Pandoc integration
- PDF Tools: PDF viewing and annotation
- EPUB: Nov mode for EPUB reading
- Mu4e: Email client with multiple account support
- BBDB: Address book integration
- Consult-Mu: Fast email search
Docs: see docs/email.md.
- Dashboard: Customizable startup screen
- Dirvish: Modern file manager with icons
- Mood-line: Customizable modeline
- Which-key: Keybinding hints
- Beacon: Visual cursor tracking
- Fontaine: Font preset management
- Emacs 29+ (recommended) or Emacs 28
- Git (for package installation)
- ripgrep or ugrep (for fast search)
- pass (password store) - for API keys and email passwords
- mu and offlineimap - for email functionality
- pandoc - for document conversion
- Nerd Fonts - for icons in terminal
- For PDF viewing:
popplerutilities - For tree-sitter: Build tools (gcc, make)
-
Clone this repository to your Emacs config directory:
git clone <your-repo-url> ~/.config/emacs
-
Start Emacs - it will automatically:
- Install Elpaca package manager
- Download and install all packages
- Configure everything
-
First startup may take 5-10 minutes while packages are installed.
~/.config/emacs/
├── init.el # Main configuration file
├── early-init.el # Early initialization (performance)
├── config/
│ ├── core/ # Core Emacs settings
│ ├── ui/ # UI packages and themes
│ ├── org/ # Org mode configuration
│ ├── dev/ # Development tools
│ ├── writing/ # Writing tools
│ ├── email/ # Email configuration
│ ├── ai/ # AI tools
│ ├── media/ # Media players
│ └── functions/ # Custom functions
├── docs/ # Documentation
└── banner/ # Dashboard ASCII art
Email addresses and names are configured in custom.el (not tracked in git). Update these variables:
(setq my/gmail-address "your.email@gmail.com"
my/gmail-name "Your Name"
my/fastmail-address "your.email@example.com"
my/fastmail-name "Your Name")Email Passwords: This config uses pass (password store). Set up your passwords:
pass insert email/gmail
pass insert email/fastmailAI tools use pass for API keys. Set them up:
pass insert api-keys/anthropic
pass insert api-keys/openai
pass insert api-keys/perplexityThe configuration uses ~/notes/ for notes and ~/src/ for projects. You can customize these in:
config/org/denote.el- Note directoriesconfig/org/org-core.el- Org directoriesconfig/dev/development.el- Project directories
Default fonts are:
- Monospace: MonoLisa Nerd Font
- Serif: Literata
Install these fonts or modify the configuration to use your preferred fonts.
Default theme is poet-dark. Change in init.el:
(load-theme 'poet-dark t)Available themes: modus-themes, poet-theme, doric-themes, ef-themes, everforest, leuven-theme
This config uses Elpaca instead of the built-in package.el:
- Faster installation
- Async package processing
- Better dependency management
- Automatic autoload generation
Vertico: Vertical completion menu in minibuffer
C-n/C-pto navigateTABto completeRETto select
Corfu: In-buffer completion popup
- Automatic completion as you type
TABto acceptM-1to select first candidate
Cape: Additional completion backends
- File paths, buffers, symbols, etc.
Denote: Zettelkasten-style notes
C-c d n- Create new noteC-c d f- Find noteC-c d F- Quick fleeting note- Notes are timestamped and keyword-tagged
Org-GTD: Getting Things Done
C-c g c- Quick captureC-c g p- Process inboxC-c g e- Engage (work on tasks)
Xeft: Fast note search
C-c z f- Search notesC-c z n- New note
LSP: Language Server Protocol
- Automatic setup for many languages
M-.- Go to definitionM-,- Go backC-c e r- Rename symbol
Magit: Git interface
C-x g- Git statusC-x v t- Git timemachineC-x v p- Git messenger
C-c b- Switch buffer (Consult)C-x d- Dired (file manager)M-p- Switch window (ace-window)C-:- Jump to character (avy)
C-c a- Org agendaC-c c- Org captureC-c l- Store link
C-c d n- New noteC-c d f- Find noteC-c d F- Fleeting note
C-x g- Magit statusC-c p f- Find file in projectC-c s s- Search in project
C-c t t- Toggle themeC-c t d- Default theme
C-h k- Describe keyC-h f- Describe functionC-h v- Describe variable
See docs/quick-reference.md for a complete keybinding reference.
Comprehensive documentation is available in the docs/ directory:
- quick-reference.md - Essential keybindings cheat sheet
- new-features-guide.md - Guide to new features and workflows
- org-gtd-workflow.md - Getting Things Done with Org mode
- denote-workflow.md - Zettelkasten note-taking guide
- development-workflow.md - Development tools and workflows
- troubleshooting.md - Common issues and solutions
This configuration includes several performance optimizations:
- Early GC tuning: High threshold during startup, normal after
- Lazy loading: Packages loaded on-demand
- Native compilation: Automatic byte-compilation
- Process output buffering: Optimized for async operations
The configuration adapts to your environment:
- GUI: Full theme support, icons, fonts
- Terminal: Simplified UI, compatible themes, Nerd Font icons
Use use-package in init.el:
(use-package my-package
:ensure t
:config
(my-package-mode 1))Add custom functions to config/functions/custom-functions.el.
Themes are loaded in init.el. You can:
- Switch themes with
C-c t t - Add custom theme files
- Customize faces in
custom.el(auto-generated, not in repo)
- Check Elpaca installation:
M-x elpaca-info - Rebuild packages:
M-x elpaca-rebuild - Check
*Messages*buffer for errors
- Install Nerd Fonts: https://www.nerdfonts.com/
- Set terminal font to a Nerd Font
- In GUI, ensure
all-the-iconsfonts are installed:M-x all-the-icons-install-fonts
- Install
muandofflineimap - Set up
passentries for email passwords - Configure email accounts in
config/email/email.el
- Check
*Messages*for warnings - Profile startup:
M-x emacs-init-time - Disable unused packages in
init.el
See docs/troubleshooting.md for more solutions.
This is a personal configuration, but feel free to:
- Fork and adapt for your needs
- Report issues or suggest improvements
- Share your customizations
This configuration is provided as-is. Individual packages have their own licenses.
This configuration is built on the excellent work of:
- Elpaca - Package manager
- use-package - Package configuration
- Doom Emacs - Inspiration for structure
- All the package maintainers and contributors
custom.elis auto-generated and excluded from the repository (contains personal paths)- Email addresses in
config/email/email.elare placeholders - update before use - API keys are stored in
pass(password store), not in the configuration - File paths use
~/notes/and~/src/- customize as needed
Happy Emacsing! 🐃