Programming Configuration Modules
Table of Contents
- 1. Overview
- 2. Module Structure
- 3. What Each Module Provides
- 4. Adding New Languages
- 5. Tangling
- 6. HTML Export
- 7. File Sizes
- 8. Benefits of This Structure
1. Overview
This directory contains programming language-specific configuration modules, organized by language and functionality.
2. Module Structure
2.1. File Organization
| File | Description | Tangles To | Lines |
|---|---|---|---|
00-loader.org |
Main loader, orchestrates all programming configs | prog-conf.el |
~47 |
01-general.org |
Common programming tools (completion, version control, etc.) | prog-general-conf.el |
~225 |
02-web.org |
Web development (HTML/CSS/JS/TS/frameworks) | prog-web-conf.el |
~455 |
03-python.org |
Python development environment | prog-python-conf.el |
~191 |
04-ruby.org |
Ruby and Rails development | prog-ruby-conf.el |
~341 |
2.2. Load Order
The loader (00-loader.org) loads modules in this order:
prog-general-conf→ Common toolsprog-web-conf→ Web developmentprog-python-conf→ Pythonprog-ruby-conf→ Ruby
Platform-specific tools (Clojure, SQL, tree-sitter) are loaded conditionally by the loader.
3. What Each Module Provides
3.1. 00-loader.org (Configuration Loader)
3.1.1. Core Responsibilities
- Loads all language-specific modules
- Manages platform-specific tools
- Provides Clojure (CIDER) support
- SQL database integration (ejc-sql)
- Tree-sitter parser infrastructure
3.1.2. Platform-Specific Features
Only loaded on non-Windows systems:
- CIDER (Clojure development)
- ejc-sql (SQL database client)
- tree-sitter (fast parsing library)
3.2. 01-general.org (Common Programming Tools)
3.2.1. Categories
- Completion: corfu, corfu-candidate-overlay
- Compilation: Enhanced compile mode with ANSI colors
- Version Control: magit, project management, smerge
- Documentation: eldoc, eldoc-box
- Syntax Checking: flymake with multiple backends
- Code Formatting: format-all, apheleia
- Editing: electric-pair, rainbow-delimiters, code folding
- Build Tools: makefile-mode, compilation shortcuts
3.2.2. Key Features
- Universal completion interface
- Git integration with magit
- Project-based workflow
- Inline documentation
- Automatic code formatting
3.3. 02-web.org (Web Development)
3.3.1. Languages & Frameworks
- HTML (with smart mode selection)
- CSS, SCSS, SASS, Less
- JavaScript (ES6+, JSX)
- TypeScript (TS, TSX)
- Vue, React, Angular, Svelte
- Template engines (Nunjucks, Handlebars)
3.3.2. Tools
- web-mode: Unified editor for web templates
- emmet-mode: HTML/CSS abbreviation expansion
- prettier-js: Code formatter
- eslint: JavaScript linter
- lsp-mode: Language Server Protocol
- typescript-mode: TypeScript support
3.3.3. Smart Features
- Auto mode selection based on file size
- Syntax-aware indentation
- Tag manipulation (tagedit)
- Live preview capabilities
3.4. 03-python.org (Python Development)
3.4.1. Core Features
- python-mode with tree-sitter
- Virtual environment management (pyvenv)
- Code formatting (black, isort)
- Testing (pytest integration)
- Enhanced REPL (inferior-python)
3.4.2. Development Tools
- LSP support (pyright/pylsp)
- Import sorting
- Docstring helpers
- Debug integration
3.4.3. Workflow
- Automatic venv detection
- Format on save
- Test runner shortcuts
- REPL integration
3.5. 04-ruby.org (Ruby Development)
3.5.1. Ruby Language Support
- Enhanced ruby-mode
- Interactive REPL (inf-ruby)
- RuboCop integration
- Bundler support
### Ruby on Rails
- Rails-specific commands
- Generator integration
- Migration helpers
- Controller/View navigation
3.5.2. Testing
- RSpec mode
- Minitest support
- Test runner integration
4. Adding New Languages
To add support for a new language:
4.1. 1. Create Module File
Create 0X-language.org in this directory:
* Language Name Configuration Configuration for Language Name development. ** Overview ... #+begin_src emacs-lisp :tangle ~/.emacs.d/elisp/settings/prog-language-conf.el ;;; prog-language-conf.el --- Language configuration -*- lexical-binding: t; -*- ;;; Commentary: ;;; Code: ;; Your configuration here (provide 'prog-language-conf) ;;; prog-language-conf.el ends here #+end_src
4.2. 2. Update Loader
Add to 00-loader.org:
;; Load language-specific configurations ... (require 'prog-language-conf) ; Add this line
4.3. 3. Update Parent Index
Add to ../09-programming.org:
** Language Name Development
4.4. 4. Update This README
Add entry to the module table and description section.
5. Tangling
5.1. Tangle All Programming Configs
From repository root:
# Tangle just programming configs emacs --batch --eval "(progn (require 'org) (mapc 'org-babel-tangle-file (directory-files \"content/configs/programming\" t \"\\\\.org$\")))"
Or use the global tangle script:
./tangle.sh
5.2. Tangle Individual Module
Open the module file and run:
M-x org-babel-tangle- Or:
C-c C-v t
6. HTML Export
The parent file ../09-programming.org uses #+INCLUDE to combine all modules for export.
From repository root:
./build.sh
7. File Sizes
Current module sizes:
wc -l programming/*.org
| Module | Lines |
|---|---|
| 00-loader | ~50 |
| 01-general | ~250 |
| 02-web | ~480 |
| 03-python | ~220 |
| 04-ruby | ~370 |
8. Benefits of This Structure
✅ Language Isolation - Each language in its own file
✅ Easy to Navigate - Find Python config quickly
✅ Selective Loading - Can disable languages by commenting out require
✅ Maintainable - Changes to web config don't affect Python
✅ Extensible - Add new languages easily
✅ Documented - Each module has detailed explanations