summaryrefslogtreecommitdiff
path: root/todo.org
diff options
context:
space:
mode:
Diffstat (limited to 'todo.org')
-rw-r--r--todo.org181
1 files changed, 160 insertions, 21 deletions
diff --git a/todo.org b/todo.org
index c71a1508..8c7d51b7 100644
--- a/todo.org
+++ b/todo.org
@@ -17,7 +17,8 @@ If the answer is "no" to all five → DON'T ADD IT.
V2MOM is located at: [[file:docs/emacs-config-v2mom.org][emacs-config-v2mom.org]]
Research/ideas that don't serve vision: [[file:docs/someday-maybe.org][someday-maybe.org]]
-* Method 1: Make Using Emacs Frictionless [5/13]
+* Method 1: Make Using Emacs Frictionless [8/14]
+
** DONE [#A] Remove network check from startup (saves 1+ seconds)
CLOSED: [2025-10-31 Fri]
@@ -57,11 +58,20 @@ CLOSED: [2025-10-31 Fri]
Bound to C-; b D. Weekly need satisfied.
-** TODO [#B] Fix go-ts-mode-map keybinding error (void-variable)
+** DONE [#B] Fix go-ts-mode-map keybinding error (void-variable)
+CLOSED: [2025-11-03 Sun]
Error: "Debugger entered--Lisp error: (void-variable go-ts-mode-map)"
Location: modules/prog-go.el - trying to bind keys before mode loads.
-Fix: Wrap keybinding in with-eval-after-load or check if variable is bound.
+
+✅ Already fixed in commit 196b289 (Nov 2, 2025)
+- Moved keybinding from `:bind (:map go-ts-mode-map ...)` to hook function
+- Keybinding now set in `cj/go-mode-keybindings` called via `:hook`
+- Function executes after mode loads, ensuring keymap exists
+- Today's cleanup: Removed unused forward declarations (lines 34-35)
+
+Fix was: Wrap keybinding in hook function instead of :bind clause.
+Result: No more void-variable error, keybinding works correctly.
** TODO [#B] Fix org-noter (reading/annotation workflow currently "so painful")
@@ -184,6 +194,52 @@ Generate transcript (once transcription workflow exists).
Daily workflow improvement.
+** TODO [#A] Fix Google Calendar password prompts every 15 minutes
+
+IRRITANT: gcal-sync triggers password prompts approximately every 15 minutes,
+interrupting workflow and breaking focus. This defeats the purpose of having
+passphrase caching configured.
+
+**Current Setup:**
+- GPG agent configured with 400-day cache (gpg-agent.conf):
+ - default-cache-ttl 34560000
+ - max-cache-ttl 34560000
+ - allow-loopback-pinentry enabled
+- Plstore caching enabled (auth-config.el:54):
+ - plstore-cache-passphrase-for-symmetric-encryption t
+ - plstore-encrypt-to nil (symmetric encryption)
+- Auth-source cache: 24 hours (auth-config.el:31)
+- Auto-sync interval: 30 minutes (org-gcal-config.el:50)
+
+**Problem:**
+Despite proper GPG agent caching, oauth2-auto.plist prompts for passphrase
+every ~15 minutes during gcal-sync operations. This suggests:
+1. plstore may not be using GPG agent cache properly for symmetric encryption
+2. oauth2-auto token refresh might be bypassing cache
+3. EPinentry mode may need explicit configuration (currently commented out)
+
+**Goal:**
+Passphrase should be entered ONCE per Emacs session, then cached until Emacs
+closes. No interruptions during normal work.
+
+**Investigation Paths:**
+1. Check if oauth2-auto respects plstore passphrase caching
+2. Investigate plstore symmetric encryption cache behavior with GPG agent
+3. Test enabling epa-pinentry-mode 'loopback (auth-config.el:42)
+4. Check oauth2-auto token refresh cycle vs password prompt timing
+5. Consider oauth2-auto configuration options for token persistence
+6. Review org-gcal or oauth2-auto issues for similar problems
+
+**Files:**
+- modules/auth-config.el (plstore and GPG configuration)
+- modules/org-gcal-config.el (org-gcal and oauth2-auto setup)
+- ~/.gnupg/gpg-agent.conf (GPG agent cache settings)
+- oauth2-auto.plist (encrypted OAuth tokens - prompts every access?)
+
+**Related:**
+This violates the "Frictionless" value - interruptions every 15 minutes during
+calendar sync breaks concentration and workflow momentum.
+
** TODO [#B] Optimize org-agenda performance using built-in profiler
THE BOTTLENECK. Currently 30+ seconds, target < 5 seconds.
@@ -194,9 +250,26 @@ Use M-x profiler-start before Method 3 debug-profiling.el is built.
15-20 seconds every time capturing a task (12+ times/day).
Major daily bottleneck - minutes lost waiting, plus context switching cost.
-** TODO [#C] Fix grammar checker performance (currently disabled)
+** DONE [#C] Fix grammar checker performance (currently disabled)
+CLOSED: [2025-11-04 Mon]
+
+✅ **Installed and configured LanguageTool for comprehensive grammar checking**
+
+Replaced disabled grammar checker with on-demand LanguageTool integration:
+- Installed LanguageTool 6.6-2 from Arch repos (222MB)
+- Created wrapper script: scripts/languagetool-flycheck (Python 3)
+- Integrated with flycheck for on-demand checking via C-; ?
+- Removed proselint (redundant - LanguageTool catches more)
+- No performance impact: only runs when explicitly invoked
+- Installation instructions added to modules/flycheck-config.el commentary
-Currently disabled because it breaks flow when writing.
+LanguageTool catches:
+- Real grammar errors (subject-verb agreement, tense, etc.)
+- Missing punctuation (commas, periods)
+- Common mistakes (could of → could have)
+- Style issues (redundant phrases, wordiness)
+
+Workflow: Open org/text/markdown file → press C-; ? → see errors in *Flycheck errors* buffer
** TODO [#D] Fix EMMS keybinding inconsistency with other buffers
@@ -204,7 +277,7 @@ EMMS keybindings conflict with standard buffer keybindings, causing mistypes.
Results in accidental destructive actions (clearing buffers), requires undo + context switch.
Violates Intuitive value - muscle memory should help, not hurt.
-* Method 2: Stop Problems Before They Appear [2/5]
+* Method 2: Stop Problems Before They Appear [3/5]
** TODO [#B] Migrate from Company to Corfu
:PROPERTIES:
@@ -213,15 +286,37 @@ Violates Intuitive value - muscle memory should help, not hurt.
Complete config already exists in someday-maybe.org. Just needs to be executed.
-** DONE [#C] Switch to mood-line
+** DONE [#C] Switch to mood-line (actually: built custom modeline)
CLOSED: [2025-11-03 Sun]
-✅ Replaced doom-modeline with mood-line in modules/modeline-config.el
-- Simplified from 70+ lines to ~10 lines of configuration
-- mood-line is lightweight, minimal, inspired by doom-modeline
-- Better performance with no dependencies
-- Features: buffer status, major mode, VCS, flycheck, cursor position
-- Net reduction: -40 lines of configuration code
+✅ **Built custom modeline (better than mood-line)**
+
+Went beyond mood-line and created a fully custom modeline using only built-in
+Emacs functionality to avoid native-compilation issues. Features:
+
+**Architecture:**
+- Named segment system using defvar-local (easy to reorder)
+- Emacs 30 built-in right-alignment (mode-line-format-right-align)
+- All segments marked as risky-local-variable for proper evaluation
+
+**Interactive Features:**
+- Color-coded buffer names (green=writeable, red=read-only, gold=overwrite)
+- VC branch with git symbol () and state-based coloring
+- Mouse click handlers: buffer name (prev/next), branch (vc-diff), mode (describe-mode)
+- Help-echo tooltips on all segments
+- String truncation for narrow windows (< 100 chars wide)
+- Active-window-only display for branch and misc-info (less clutter)
+
+**Layout:**
+- Left: Major mode, buffer name, position (L:# C:#)
+- Right: Git branch, chime notifications
+
+**Bug Fixes:**
+- Disabled async native compilation (prevented "Selecting deleted buffer" errors)
+- Fixed difftastic loading (:demand → :defer)
+- Abstracted buffer status colors to user-constants.el
+
+Inspired by Prot's modeline design. See commit c0c4b17.
** DONE [#C] Remove deprecated tree-sitter package (rely on treesit-auto)
CLOSED: [2025-11-03 Sun]
@@ -232,21 +327,31 @@ CLOSED: [2025-11-03 Sun]
- treesit-auto continues to manage tree-sitter grammars automatically
- No functionality lost, cleaner dependency tree
-** TODO [#C] Add org-appear (show emphasis markers only when point is on them)
+** DONE [#C] Add org-appear (show emphasis markers only when point is on them)
+CLOSED: [2025-11-03 Sun]
-Cleaner org files, supports Intuitive value.
+✅ Added org-appear package to modules/org-config.el
+- Shows emphasis markers (* / _) only when cursor is on them
+- Also shows link markup and sub/superscripts when editing
+- Changed org-fontify-emphasized-text from nil to t (line 75)
+- Updated comment on line 71 to reference org-appear
+- Cleaner editing experience while maintaining visual clarity
** TODO [#C] Integrate prescient with Corfu (smart sorting)
Already using prescient with vertico. Extend to Corfu after migration.
-* Method 3: Make *Fixing* Emacs Frictionless [0/5]
+* Method 3: Make *Fixing* Emacs Frictionless [1/4]
** TODO [#B] Build debug-profiling.el module
Reusable profiling infrastructure for any future performance work.
-** TODO [#C] Document localrepo limitations (treesitter grammars not included)
+** TODO [#C] Build localrepo out (package snapshot system)
+
+Repeatable installs and safe rollbacks.
+
+*** TODO [#C] Document localrepo limitations (treesitter grammars not included)
.localrepo only contains packages from package.el archives.
Treesitter grammars are downloaded separately by treesit-auto on first use.
@@ -256,13 +361,46 @@ For true offline reproducibility, need to cache treesitter grammars separately.
Complex workflow testing capability.
-** TODO [#C] Build localrepo out (package snapshot system)
+** DONE [#C] Integrate difftastic (structural diffs)
+CLOSED: [2025-11-03 Sun]
-Repeatable installs and safe rollbacks.
+✅ Completed difftastic integration:
+1. **Upgraded cj/diff-buffer-with-file to use ediff** (modules/custom-buffer-file.el)
+ - Replaced basic unified diff with ediff-current-file
+ - Now uses same ediff config (horizontal split, j/k navigation)
+ - Keybinding C-; b D now launches interactive ediff
+
+2. **Added difftastic for git diffs** (modules/vc-config.el)
+ - Installed binary: difftastic 0.64.0
+ - Added difftastic.el package integrated with magit
+ - Keybindings in magit-diff: D for dwim, S for show
+ - Provides structural, language-aware diffs for git changes
+
+Result: Better diffs everywhere - ediff for interactive buffer comparison,
+difftastic for understanding git changes.
+
+** TODO [#C] Remove orphaned dwim-shell-security tests and unused production code
+
+Why: 12 tests in test-dwim-shell-security.el fail because the functions they test
+are inside a use-package :config block (dwim-shell-config.el:101-108) that only
+loads when the dwim-shell-command package is available. During batch testing,
+the package isn't loaded, so functions are never defined (void-function errors).
+
+These are PDF password protection and ZIP encryption functions that likely have
+never been used in practice - they're placeholder code from initial setup.
+
+What to delete:
+1. Test file: tests/test-dwim-shell-security.el (12 failing tests)
+2. Production functions in modules/dwim-shell-config.el (lines ~302-347):
+ - cj/dwim-shell-commands-pdf-password-protect (lines 302-324)
+ - cj/dwim-shell-commands-pdf-password-unprotect (lines 326-347)
+ - cj/dwim-shell-commands-create-encrypted-zip (search for it)
+ - cj/dwim-shell-commands-remove-zip-encryption (search for it)
-** TODO [#C] Integrate difftastic (structural diffs)
+After deletion: Run "make test-all" to confirm 18 failures → 6 failures
+(only benchmark performance tests remain, which are environment-dependent).
-Structural diffs that show semantic changes. Hook into cj/diff-buffer-with-file.
+Aligns with: Reducing test failures from 18 to 6, cleaning up unused code.
* Method 4: Contribute to the Emacs Ecosystem [0/4]
@@ -312,3 +450,4 @@ Review this inbox, cancel stale items, keep < 20 active. Track in calendar.
Can't research next thing until current thing is implemented.
* Emacs Config Inbox
+** TODO cj/flyspell-then-abbrev loses keybinding in scratch org-mode buffer