<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dotemacs.git/scripts, branch v0.7.2</title>
<subtitle>my Emacs configuration
</subtitle>
<id>https://git.cjennings.net/dotemacs.git/atom?h=v0.7.2</id>
<link rel='self' href='https://git.cjennings.net/dotemacs.git/atom?h=v0.7.2'/>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/'/>
<updated>2026-02-14T09:21:13+00:00</updated>
<entry>
<title>feat(reveal): add org-reveal presentation workflow with ERT tests</title>
<updated>2026-02-14T09:21:13+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-14T09:21:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=176ea668cdd83beddd54a24334a8a9db3cc87dfb'/>
<id>urn:sha1:176ea668cdd83beddd54a24334a8a9db3cc87dfb</id>
<content type='text'>
Replaced pandoc-based reveal.js export with native ox-reveal integration.
New org-reveal-config.el module provides offline, self-contained HTML export
with keybindings under C-; p. Includes setup script for reveal.js 5.1.0
and 34 ERT tests covering header template and title-to-filename helpers.
</content>
</entry>
<entry>
<title>fix(keyboard): support daemon mode for M-S- key translations</title>
<updated>2026-02-09T22:11:42+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-09T22:11:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=cbdd0729f75721f246de94661a6ee83505d83399'/>
<id>urn:sha1:cbdd0729f75721f246de94661a6ee83505d83399</id>
<content type='text'>
GUI key translations (M-O → M-S-o, etc.) were never installed in daemon
mode because env-gui-p returns nil at startup with no frame. Use
server-after-make-frame-hook for daemon, emacs-startup-hook otherwise.
Also adds timestamps to assemblyai-transcribe output.
</content>
</entry>
<entry>
<title>feat(email): add password decryption to setup script</title>
<updated>2026-01-24T18:07:38+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-24T18:07:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=08fefed7f311d85881bfeb9974b1c76638b3fd24'/>
<id>urn:sha1:08fefed7f311d85881bfeb9974b1c76638b3fd24</id>
<content type='text'>
- Add password decryption loop to scripts/setup-email.sh
- Decrypt .gpg files from assets/mail-passwords/ to ~/.config/
- Add encrypted password files (.gmailpass.gpg, .cmailpass.gpg)
- Fix missing paren in text-config.el that broke config parsing
- Clean up mail-config.el
</content>
</entry>
<entry>
<title>feat: Add AssemblyAI transcription backend with speaker diarization</title>
<updated>2025-11-06T06:43:13+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-06T06:43:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=afb86d5c559413bddf80ff38260d0cf0debb585f'/>
<id>urn:sha1:afb86d5c559413bddf80ff38260d0cf0debb585f</id>
<content type='text'>
Integrated AssemblyAI as the third transcription backend alongside OpenAI
API and local-whisper, now set as the default due to superior speaker
diarization capabilities (up to 50 speakers).

New Features:
- AssemblyAI backend with automatic speaker labeling
- Backend switching UI via C-; T b (completing-read interface)
- Universal speech model supporting 99 languages
- API key management through auth-source/authinfo.gpg

Implementation:
- Created scripts/assemblyai-transcribe (upload → poll → format workflow)
- Updated transcription-config.el with multi-backend support
- Added cj/--get-assemblyai-api-key for secure credential retrieval
- Refactored process environment handling from if to pcase
- Added cj/transcription-switch-backend interactive command

Testing:
- Created test-transcription-config--transcription-script-path.el
- 5 unit tests covering all 3 backends (100% passing)
- Followed quality-engineer.org guidelines (test pure functions only)
- Investigated 18 test failures: documented cleanup in todo.org

Files Modified:
- modules/transcription-config.el - Multi-backend support and UI
- scripts/assemblyai-transcribe - NEW: AssemblyAI integration script
- tests/test-transcription-config--transcription-script-path.el - NEW
- todo.org - Added test cleanup task (Method 3, priority C)
- docs/NOTES.org - Comprehensive session notes added

Successfully tested with 33KB and 4.1MB audio files (3s and 9s processing).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: Add LanguageTool integration for comprehensive grammar checking</title>
<updated>2025-11-05T05:26:42+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-05T05:26:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=eda461086e94265b67ab5b21032e7ee23112ad87'/>
<id>urn:sha1:eda461086e94265b67ab5b21032e7ee23112ad87</id>
<content type='text'>
Integrated LanguageTool as an on-demand grammar checker, replacing the
previously disabled proselint checker.

Changes:
- Created scripts/languagetool-flycheck wrapper for flycheck integration
  - Converts LanguageTool JSON output to flycheck format
  - Includes suggestions in error messages
  - 30-second timeout for large files

- Updated modules/flycheck-config.el:
  - Defined languagetool checker for text/markdown/org/gfm modes
  - Updated cj/flycheck-prose-on-demand to use LanguageTool
  - Added installation instructions (sudo pacman -S languagetool)
  - Improved documentation clarity

- Usage: Press C-; ? in org/text/markdown files
  - Enables flycheck with LanguageTool
  - Shows errors in *Flycheck errors* buffer
  - On-demand only (no performance impact)

- Updated docs/NOTES.org:
  - Added best practice: Test Emacs launch after non-trivial changes
  - Example: emacs --eval "(kill-emacs)"
  - Catches startup errors before committing

- Disabled weather debug mode (wttrin-debug nil)

- Marked todo.org grammar checker task as DONE

LanguageTool catches real grammar issues (subject-verb agreement, tense,
punctuation, common mistakes) that proselint missed.

Installation: LanguageTool 6.6 (222MB) from Arch repos
Dependencies: Python 3 (for wrapper script)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: Add complete async audio transcription workflow</title>
<updated>2025-11-04T20:35:50+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-04T20:35:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=45cab5c38dc089935416a89d36b461d9127094ac'/>
<id>urn:sha1:45cab5c38dc089935416a89d36b461d9127094ac</id>
<content type='text'>
Implemented full transcription system with local Whisper and OpenAI API
support. Includes comprehensive test suite (60 tests) and reorganized
keybindings for better discoverability.

Features:
- Async transcription (non-blocking workflow)
- Desktop notifications (started/complete/error)
- Output: audio.txt (transcript) + audio.log (process logs)
- Modeline integration showing active transcription count
- Dired integration (press T on audio files)
- Process management and tracking

Scripts:
- install-whisper.sh: Install Whisper via AUR or pip
- uninstall-whisper.sh: Clean removal with cache cleanup
- local-whisper: Offline transcription using installed Whisper
- oai-transcribe: Cloud transcription via OpenAI API

Tests (60 passing):
- Audio file detection (16 tests)
- Path generation logic (11 tests)
- Log cleanup behavior (5 tests)
- Duration formatting (9 tests)
- Active counter &amp; modeline (11 tests)
- Integration workflows (8 tests)

Keybindings:
- Reorganized gcal to C-; g submenu (s/t/r/c)
- Added C-; t transcription submenu (t/b/k)
- Dired: T to transcribe file at point

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: Add comprehensive Makefile for testing and validation</title>
<updated>2025-11-03T19:17:31+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-03T19:17:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=73115112c1f23775e3008b3a359b1d4fd77ae83b'/>
<id>urn:sha1:73115112c1f23775e3008b3a359b1d4fd77ae83b</id>
<content type='text'>
Add Makefile adapted from chime.el with targets for:

Testing:
- make test              - Run all tests (unit + integration)
- make test-unit         - Run unit tests only
- make test-integration  - Run integration tests only
- make test-file FILE=&lt;filename&gt;  - Run specific test file
- make test-name TEST=&lt;pattern&gt;   - Run tests matching pattern

Validation:
- make validate-parens   - Check for unbalanced parentheses
- make validate-modules  - Load all modules to verify compilation
- make compile           - Byte-compile all modules
- make lint              - Run checkdoc, package-lint, elisp-lint

Utilities:
- make profile           - Profile Emacs startup
- make clean             - Remove test artifacts and compiled files
- make clean-compiled    - Remove .elc/.eln files only
- make clean-tests       - Remove test artifacts only
- make reset             - Reset to first launch (destructive!)

Default target is 'make help' which displays all available targets.

Inline scripts from scripts/ directory:
- delete-elisp-compiled-files.sh → make clean-compiled
- profile-dotemacs.sh → make profile
- reset-to-first-launch.sh → make reset

Delete inlined scripts to reduce duplication.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>chore:scripts: update reset script to remove additional files</title>
<updated>2025-11-01T17:58:34+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-01T17:58:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=3fad756d23b35c18feeb95ab809900f323a76d93'/>
<id>urn:sha1:3fad756d23b35c18feeb95ab809900f323a76d93</id>
<content type='text'>
Add removal of `emms` and `request` directories and several files to
enhance the reset-to-first-launch script to ensure complete cleanup
of user data.
</content>
</entry>
<entry>
<title>refactor:script: simplify elisp compiled file deletion script</title>
<updated>2025-10-29T13:59:42+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-10-29T13:59:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=43eb08a5b9b4f04ed94dd1684615b7ee6c66cd6c'/>
<id>urn:sha1:43eb08a5b9b4f04ed94dd1684615b7ee6c66cd6c</id>
<content type='text'>
Remove user confirmation and file listing prompt. Simplify the
script by directly deleting .eln and .elc files in the specified
location and confirming completion.
</content>
</entry>
<entry>
<title>feat:emacs-build-script:build both emacs and emacs-debug versions</title>
<updated>2025-10-23T04:53:09+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-10-23T04:53:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=e73ed3693ea61d53eb40c40d870e6385dabed206'/>
<id>urn:sha1:e73ed3693ea61d53eb40c40d870e6385dabed206</id>
<content type='text'>
</content>
</entry>
</feed>
