5.3 KiB
5.3 KiB
Emacs Configuration
A modular, performance-optimized Emacs configuration for software development with 33+ specialized modules.
Features
- Modern Development Environment: Eglot LSP, Tree-sitter, multiple language support
- Smart Configuration Reloading: Non-blocking reload with byte-compilation support
- CUA Mode Integration: Standard copy/paste keybindings with intelligent mode-specific handling
- Emergency Recovery: Built-in diagnostics and fixes for common issues
- Completion System: Company mode with multi-backend support
- Applications: Email (mu4e), RSS reader (Elfeed), Portfolio tracker
Quick Start
Installation
- Clone this repository to
~/.config/emacs/:
git clone <repository-url> ~/.config/emacs
- Start Emacs. The configuration will automatically install required packages on first run.
Key Bindings
Configuration Management
C-c C-r- Reload configuration (non-blocking)C-u C-c C-r- Reload configuration (blocking)C-c r- Reload current file onlyC-c R- Fast reload using byte-compiled files
Emergency Fixes
C-c C-!- Emergency restore editing capabilityC-c C-?- Diagnose editing issues
Development
M-x enable-dev-mode-modern- Enable Eglot-based developmentM-x enable-dev-mode- Enable LSP-mode (legacy)
Applications
C-x w- Open Elfeed RSS readerC-c $- Open portfolio tracker
Architecture
Directory Structure
~/.config/emacs/
├── init.el # Main initialization file
├── early-init.el # Early startup optimization
├── lisp/ # Configuration modules
│ ├── init-core.el # Package management
│ ├── init-ui.el # UI configuration
│ ├── init-editor.el # Editor settings
│ ├── init-eglot.el # LSP client
│ └── ... # 30+ more modules
├── CLAUDE.md # AI assistant guidance
└── README.md # This file
Module Categories
Core System
- Package management with use-package
- Company completion system
- CUA mode configuration
- UI themes and display settings
Development Tools
- Eglot (built-in LSP)
- Tree-sitter support
- Git integration (Magit)
- Project management
Language Support
- Python, JavaScript, TypeScript
- Go, Rust, C/C++
- Ruby, Java, Kotlin
- Markdown, YAML, JSON
Applications
- mu4e email client
- Elfeed RSS reader
- Portfolio tracker (somehwat work in progress)
- Org mode enhancements
Commands Reference
Configuration Management
M-x reload-emacs-config # Non-blocking reload
M-x reload-emacs-config-fast # Fast reload (byte-compiled)
M-x reload-emacs-config-smart # Smart reload (only changed)
M-x byte-compile-config # Compile all config files
M-x clean-byte-compiled-files # Remove .elc files
Package Management
M-x package-refresh-without-proxy # Refresh bypassing proxy
M-x package-install-without-proxy # Install bypassing proxy
M-x install-dev-packages # Install development packages
M-x toggle-proxy # Toggle proxy settings
Diagnostics
M-x fix-editing-now # Emergency restore editing
M-x diagnose-editing-issue # Diagnose editing problems
M-x diagnose-cua-selection # Debug CUA mode issues
M-x diagnose-key-conflicts # Debug keybinding conflicts
Customization
Adding New Modules
- Create a new file in
lisp/directory (e.g.,init-myfeature.el) - Add configuration using
use-packageformat - Load it in
init.el:
(require 'init-myfeature)
Disabling Modules
Comment out the corresponding require statement in init.el:
;; (require 'init-module-name)
Personal Configuration
Create personal-config.el in the root directory for personal settings that won't be committed to version control.
Performance Optimization
Byte Compilation
Speed up startup by byte-compiling configuration:
emacs --batch --eval "(byte-compile-config)"
Startup Profiling
M-x emacs-init-time # Show initialization time
M-x profiler-start # Start profiling
M-x profiler-report # View profiling results
Troubleshooting
Editing Disabled
If you can't type or edit:
- Press
C-c C-!for emergency fix - Run
M-x fix-editing-now - Check with
M-x diagnose-editing-issue
Package Installation Issues
If packages fail to install:
- Try
M-x package-refresh-without-proxy - Toggle proxy with
M-x toggle-proxy - Manually refresh:
M-x package-refresh-contents
Slow Startup
- Byte-compile configuration:
M-x byte-compile-config - Use fast reload:
C-c R - Check startup time:
M-x emacs-init-time
Keybinding Conflicts
- Run
M-x diagnose-key-conflicts - Check CUA mode:
M-x diagnose-cua-selection - Review mode-specific keybindings
CUA Mode Special Handling
The configuration intelligently manages CUA mode (standard C-c/C-v/C-x keybindings) by automatically disabling it in modes that need single-key commands:
- Magit (git interface)
- Dired (file manager)
- Elfeed (RSS reader)
- Special read-only buffers
Requirements
- Emacs 29.1 or later (for Tree-sitter support)
- Git (for Magit)
- ripgrep (optional, for fast searching)
- Language servers for development (installed automatically per language)