aboutsummaryrefslogtreecommitdiff
path: root/README.org
blob: 989ef948cf0b3bc5624814ac33d4282917867277 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#+TITLE: Craig's Emacs Configuration
#+AUTHOR: Craig Jennings
#+OPTIONS: toc:2

Personal Emacs configuration. Pure Elisp, modular, no framework (not
Doom, not Spacemacs). Used daily for real work — this is a lived-in
config, not a demo.

Still in active development; the GPTel integration and its tool
implementations in particular are a work in progress.

* Status

Personal. Published in case bits are useful to others, but not intended
as a distribution or starter kit. Conventions and keybindings reflect
my habits. Feel free to read, borrow, or steal; no support promised.

* Requirements

- Emacs 29 or newer (uses ~lexical-binding~, ~use-package~, native comp)
- Linux / macOS / FreeBSD / Windows — the config checks host via
  =host-environment.el= and degrades where platform features are missing
- Several modules shell out to external tools (e.g. =ffmpeg=,
  =mu4e=, =pdftools=); those modules fail gracefully when the tool
  is absent

* Layout

#+begin_example
.
├── early-init.el        startup perf, package system, local repos
├── init.el              module loader (one require per feature)
├── modules/             feature modules — one domain per file (~100 files)
├── tests/               ERT tests — test-<module>*.el, testutil-*.el
├── assets/              data files checked into git
├── custom/              user customizations and overrides
├── snippets/            yasnippet templates
├── themes/              local themes
├── scripts/             helper shell scripts (elpa mirror, setup, etc.)
├── gptel-tools/         GPTel tool implementations for LLM access
├── org-roam-templates/  capture templates for org-roam
├── githooks/            optional git hooks (pre-commit, etc.)
└── Makefile             test / lint / validate / profile targets
#+end_example

=modules/= is organized by domain: ~org-*~, ~prog-*~, ~custom-*~,
~ui-*~, and standalone feature files (e.g. ~calendar-sync.el~,
~transcription-config.el~, ~reconcile-open-repos.el~).

* Features

- *Local package repository* (=.localrepo/=) — last-known-good package
  versions checked in for fully offline reinstalls. Highest priority
  in the archive list, so online repos are additive, not required.
- *ELPA mirror support* — optional script (=scripts/create-elpa-mirror.sh=)
  clones GNU / NonGNU / MELPA / MELPA-stable locally (~1.9 GB) for
  portability behind firewalls.
- *Google Calendar sync* (=modules/calendar-sync.el=) — pure-Elisp
  =.ics= parser, one-way sync to org-mode, no external dependencies.
- *Audio transcription* (=modules/transcription-config.el=) — pluggable
  backends (OpenAI, AssemblyAI, local) via descriptor alist.
- *Repo reconcile* (=modules/reconcile-open-repos.el=) — walks
  project directories, surfaces dirty/unpushed repos for review.
- *Mu4e + org-msg + org-contacts* — integrated mail workflow.
- *Reveal.js and ox-hugo* — slide decks and blog publishing from org.
- *GPTel tools* — buffer / filesystem tools exposed to LLM chats
  (work in progress).
- *Custom keymap* under =C-;= prefix for personal commands.

* Development

Makefile targets:

#+begin_src bash
make                    # Show all targets
make test               # Run all ERT tests
make test-file FILE=test-foo.el         # One test file
make test-name TEST=pattern             # Match by test name
make coverage           # Generate .coverage/simplecov.json
make validate-parens    # Check for unbalanced parens in modules
make validate-modules   # Load all modules to verify they compile
make compile            # Byte-compile modules
make lint               # checkdoc + package-lint + elisp-lint
make profile            # Profile Emacs startup
make clean              # Remove .elc and test artifacts
#+end_src

Coverage is substantial but not uniform — critical utilities
(calendar-sync, transcription, reconcile, custom-* helpers) have
thorough test suites; some config modules are smoke-tested only.