Programming Configuration Modules

Table of Contents

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:

  1. prog-general-conf → Common tools
  2. prog-web-conf → Web development
  3. prog-python-conf → Python
  4. prog-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
#+INCLUDE: "programming/0X-language.org" :minlevel 2

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 requireMaintainable - Changes to web config don't affect Python ✅ Extensible - Add new languages easily ✅ Documented - Each module has detailed explanations