summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
5 daysfeat: Add org-gcal dependencies and org-contacts birthday automationCraig Jennings
org-gcal-config.el: - Add use-package declarations for deferred and oauth2-auto - Ensures dependencies are automatically installed on fresh systems - Fixes "Cannot open load file" errors when syncing org-contacts-config.el: - Add automatic birthday timestamp insertion via capture template - Parse YYYY-MM-DD or MM-DD birthday formats - Insert yearly repeating timestamps after properties drawer - Add NICKNAME and NOTE fields to capture template org-agenda-config.el: - Enable chime-debug mode for troubleshooting 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
5 daysdocs: Add Emacs Lisp development best practices to NOTESCraig Jennings
Document lessons learned from chime-org-contacts.el development about preventing parenthesis errors in Emacs Lisp code. Key Topics: - AI code generation strategies (small functions, immediate testing) - Human developer tools (paredit, smartparens, rainbow-delimiters) - Real-world case study from chime-org-contacts.el refactoring - Tools and workflow summary table Problem Identified: Both AI and humans struggle with deeply nested Emacs Lisp functions due to difficulty counting parentheses manually. Solution Documented: Break complex functions into small (< 15 line) helpers: - Easier to verify correctness - Easier to test independently - Self-documenting through clear function names - AI and humans both succeed Tools Referenced: - Structural editing: paredit, smartparens, lispy - Real-time validation: flycheck, flymake - Visual aids: rainbow-delimiters-mode - CI/CD: pre-commit hooks with check-parens This section serves as permanent reference for future Emacs Lisp development in this repository and others. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
5 daysfeat: Add chime-debug nil setting to configCraig Jennings
Explicitly set chime-debug to nil in :init section. Matches new chime.el default (changed from t to nil in recent commit). Clean production setup - debug mode available by changing to t when needed. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
5 dayschore: Update todo.org with new inbox items and music-config improvementsCraig Jennings
todo.org updates: - Added 2 new inbox items about printing keybindings - Reordered Method 1 tasks by priority - Removed blank lines (linter formatting) music-config.el improvements: - Added validation checks to cj/music--valid-file-p and cj/music--valid-directory-p - Fixed regex escaping in cj/music--m3u-file-tracks - Added new cj/music--append-track-to-m3u-file function for testing 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
5 daysfeat: Add session workflow framework and complete first inbox zeroCraig Jennings
Created emacs-inbox-zero session definition and validated it by executing the workflow. Processed 5 inbox items to zero in 10 minutes. Session Framework: - Created docs/sessions/ directory for session definitions - Added create-session.org (meta-workflow for creating sessions) - Added emacs-inbox-zero.org (weekly inbox processing workflow) - Updated NOTES.org with terminology and session tracking Inbox Zero Results: - Deleted 1 duplicate task (chime fix) - Moved 2 to Method 1: org-capture performance [#B], EMMS keybindings [#D] - Moved 2 to someday-maybe: dashboard icons, persistence files - Recognized perfectionism pattern (V2MOM Obstacle #4) Learnings captured in living documents: - Save Q&A answers incrementally during session creation - Capture useful context during triage (impact estimates, theories) - Validation by execution catches what theory misses Files reorganized: - Renamed docs files to UPPERCASE for consistency - Removed SESSION-HANDOFF-ACTIVE-PROJECT.org (replaced by NOTES.org) V2MOM Metrics fulfilled: - Weekly triage consistency: ✓ (2025-11-01) - Active todo count: 29 items (working toward < 20) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
5 dayswip:org-roam: first pass at consult-org-roam, but disabledCraig Jennings
5 daysadmin: adding to inboxCraig Jennings
5 dayschore:system-utils: Fix indentation and update history persistenceCraig Jennings
Fix inconsistent indentation in dired-mode section to improve code readability. Enhance history persistence settings by configuring 'savehist' to include additional variables and set history length limits, ensuring better session management.
5 dayschore:scripts: update reset script to remove additional filesCraig Jennings
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.
5 daysperf:system-defaults: Unpropertize kill ring on exitCraig Jennings
Add `unpropertize-kill-ring` function to remove text properties from the kill ring when Emacs is exiting. This improves performance by reducing unnecessary data retention. The function is hooked into `kill-emacs-hook`.
5 daysfeat:mail-config: Add custom prefix to 'From' or 'To' headersCraig Jennings
Set 'mu4e-headers-from-or-to-prefix' to use a custom arrow symbol as a prefix in email headers, improving visual distinction for 'From' or 'To' fields.
5 daysrefactor:init: remove network availability checks for package reposCraig Jennings
Remove the logic for checking network availability to simplify the process of enabling online package repositories. Online repositories are now added regardless of network status. Reproducible installs will continue to work offline by prioritizing local repositories. Reported issues with package operations that fail gracefully when offline are addressed.
5 daysfeat:eshell: Add custom 'clear' function and set PAGER to 'cat'Craig Jennings
Set the environment variable PAGER to 'cat' to disable pagination in eshell. Remove existing alias for 'clear' and introduce a new custom 'eshell/clear' function that clears the eshell buffer.
5 daysfeat:buffer: Add diffing buffer contents with saved fileCraig Jennings
Introduce a new function `cj/diff-buffer-with-file` to compare current buffer with saved file version using unified diff format. Bind it to "C-; b D" for easy access. This enhances buffer management capabilities by allowing users to view changes before saving.
5 dayschore: updating local repo packageCraig Jennings
5 daysadmin: rework todo to focus on the v2momCraig Jennings
- wrote a v2mom about what the config should deliver - focused the inbox only on tasks related to the v2mom - moved all other tasks to someday-maybe
6 daysfeat:keybindings: Implement consult line or repeat featureCraig Jennings
Add a new command `cj/consult-line-or-repeat` that calls `consult-line` or repeats the last search if invoked consecutively. Bind this command to "C-s". This enhances user experience by providing a quick way to repeat search actions.
6 dayschore:custom-misc: update keybindings for word/char countCraig Jennings
Change keybindings for counting words and characters to "# w" and "# c" to improve mnemonic efficiency. Update the corresponding which-key descriptions accordingly.
6 daysfeat:dirvish-config: Enable file marking for mu4e attachmentsCraig Jennings
Add 'turn-on-gnus-dired-mode' to 'dired-mode-hook' to facilitate marking files in Dirvish for attachment in mu4e emails.
6 daysfeat:custom-buffer-file: add mark, revert buffer keybindingsCraig Jennings
Added new keybindings for marking the whole buffer and reverting the buffer. Updated the descriptions to reflect these additions.
6 daysfeat:count-characters: Add character counting functionalityCraig Jennings
Introduce functions to count characters in a buffer or region. Bind new character counting function to "C-; C" in custom keymap.
6 daysfix:eshell:allow eshell to load by removing dependency on itselfCraig Jennings
6 daysfeat:mail:auto download mail every 10 minutesCraig Jennings
6 daysinit:doc:correcting comment on video captureCraig Jennings
6 daysdocs: Add active project handoff documentsCraig Jennings
Introduce detailed session handoff documents for Craig's Emacs configuration project. These provide strategic clarity using the V2MOM framework and outline current progress, project goals, recommended actions, and key insights. This addition aims to streamline handovers and ensure continuity between sessions, facilitating a systematic approach to addressing identified challenges and opportunities for improvement.
8 daysfix(org-agenda): improve chime startup integrationCraig Jennings
This commit fixes timing issues with chime.el startup and simplifies configuration after chime.el's validation improvements. ## Changes **1. Fixed org-agenda lazy loading issue** - Added `:demand t` to org-agenda use-package - Ensures org-agenda loads before chime tries to use it - Prevents "org-agenda not available" errors **2. Cleaned up duplicate rebuild hooks** - Removed duplicate emacs-startup-hook with idle-timer - Kept single emacs-startup-hook for rebuild - Simpler, more maintainable configuration **3. Simplified chime configuration** - Restored `(chime-mode 1)` in use-package :config - Removed conditional fboundp check (no longer needed) - Works with chime.el's new deferred validation - Fixed `:after` clause (removed org-agenda dependency) **4. Fixed formatting issues** - Removed stray 's' character in add-hook indentation - Consistent indentation throughout ## Integration with chime.el v0.6.0 This commit pairs with chime.el's new features: - chime-startup-delay (default 10 sec) gives rebuild hook time to run - Validation moved to first check (no startup blocking) - Clean user experience with no false warnings ## Timeline ``` Time 0s: Emacs starts Time 0s: org-agenda loads (:demand t) Time 0s: chime-mode 1 (starts timer, no validation) Time 0.1s: emacs-startup-hook → rebuild org-agenda-files Time 10s: First chime-check → validates, finds events Time 24s: Modeline populated with events ``` **Result:** 24 second startup (vs previous 463 seconds - 95% improvement) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
8 daysfix(dirvish): move deadgrep from D to G, preserve dired-do-delete on DCraig Jennings
The previous commit incorrectly moved deadgrep to 'D', which conflicts with the important dired-do-delete command (immediate delete of marked files). This commit moves deadgrep to 'G' instead. ## Changes **prog-general.el:** - Move cj/deadgrep-here from 'D' to 'G' (was dired-do-chgrp, rarely used) **dirvish-config.el:** - Updated Commentary to document both 'D' and 'G' keybindings - 'D' remains dired-do-delete (standard dired immediate delete) - 'G' is now deadgrep search ## Final Keybinding Map | Key | Binding | Purpose | |-----|-------------------------------|--------------------------------| | d | cj/dirvish-duplicate-file | Duplicate with "-copy" suffix | | D | dired-do-delete | Delete marked files (standard) | | g | dirvish-quick-access | Quick directory menu | | G | cj/deadgrep-here | Search with deadgrep | Capital G is mnemonic for "Grep" and doesn't conflict with important dired commands. dired-do-chgrp is rarely used and not a loss. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
8 daysfeat(dirvish): add file duplication with 'd' key, move deadgrep to 'D'Craig Jennings
This commit adds a convenient file duplication function to dirvish and reorganizes keybindings to avoid conflicts. ## Changes **1. New function: cj/dirvish-duplicate-file (dirvish-config.el:150)** Duplicates the file at point with "-copy" suffix before the extension: - report.pdf → report-copy.pdf - script.el → script-copy.el - README → README-copy Features: - Prevents duplicating directories (files only) - Checks if target exists and prompts to overwrite - Refreshes buffer automatically after copying - Shows clear message with old and new names **2. Keybinding changes** dirvish-config.el: - Bound 'd' to cj/dirvish-duplicate-file (was dired-flag-file-deletion) - Updated Commentary section to document new binding prog-general.el: - Moved cj/deadgrep-here from 'd' to 'D' (capital D) - More mnemonic: D for Deadgrep - Avoids conflict with new duplicate function ## Rationale The 'd' key is prime real estate in file managers, and duplicating files is a very common operation. The standard dired-flag-file-deletion is still available via 'x' or the mark-and-delete workflow. Deadgrep on 'D' is more discoverable (capital D for Deadgrep) and less likely to be pressed accidentally. ## Usage In dirvish, navigate to a file and press: - 'd' - Duplicate file with "-copy" suffix - 'D' - Search with deadgrep in current directory 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
8 daysfeat: add debug infrastructure for config modulesCraig Jennings
This commit establishes a pattern for organizing debug code in separate files that can be enabled/disabled via a central toggle. ## Changes **1. Added debug toggle to user-constants.el** New variable `cj/debug-modules` controls which modules load debug functions: - Set to nil (default): No debug functions loaded - Set to list of symbols: Load debug for specific modules Example: (setq cj/debug-modules '(org-agenda mail)) - Set to t: Load all debug modules Example: (setq cj/debug-modules t) Placed early in user-constants.el so it's available before other modules load. **2. Created org-agenda-config-debug.el** New debug file contains: - `cj/org-agenda-debug-dump-files` - Shows all org-agenda-files with status, file sizes, and modification times - `cj/org-agenda-debug-rebuild-timing` - Measures rebuild performance and reports detailed timing statistics - `cj/log-silently` - Helper function to write to *Messages* without echo All functions use ;;;###autoload for easy invocation before explicit loading. **3. Added conditional require to org-agenda-config.el** Checks `cj/debug-modules` and conditionally loads org-agenda-config-debug.el: ```elisp (when (or (eq cj/debug-modules t) (memq 'org-agenda cj/debug-modules)) (require 'org-agenda-config-debug ...)) ``` ## Benefits **Cleaner separation of concerns:** - Production code stays in main config files - Debug code isolated in *-debug.el files - Easy to enable/disable debugging per module **Reusable pattern:** - Can be applied to any config module (mail, chime, etc.) - Consistent naming: <module>-debug.el - Consistent namespace: cj/<module>-debug-* **Zero overhead when disabled:** - Debug files not loaded unless explicitly enabled - No performance impact on normal usage ## Usage To enable org-agenda debug functions: ```elisp ;; In user-constants.el or early-init.el (setq cj/debug-modules '(org-agenda)) ``` Then restart Emacs and run: - M-x cj/org-agenda-debug-dump-files - M-x cj/org-agenda-debug-rebuild-timing 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
8 daysfix: update chime variable names after breaking changesCraig Jennings
Update configuration to use renamed chime variables: - chime-modeline-lookahead → chime-modeline-lookahead-minutes - Update comment referencing chime-tooltip-lookahead-hours These variables were renamed in chime.el commit 2a89893 (feat: comprehensive test improvements and lookahead refactoring). Fixes issue where modeline wasn't displaying after Emacs restart because the old variable name had no effect. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
8 daysfeat:org-gcal: Auto-save files after sync completionCraig Jennings
Add a function to automatically save all org-gcal files after synchronization completes. This ensures that any changes are persisted, enhancing data consistency. Advise `org-gcal--sync-unlock` to trigger auto-saving upon sync completion.
8 daysrefactor:script: simplify elisp compiled file deletion scriptCraig Jennings
Remove user confirmation and file listing prompt. Simplify the script by directly deleting .eln and .elc files in the specified location and confirming completion.
8 daysrefactor:org-agenda-config: Update chime packageCraig Jennings
Remove unnecessary blank lines in function docstrings to enhance readability. Update chime package settings to use a local version instead of the latest from GitHub, and adjust modeline lookahead and tooltip settings for better event visibility.
9 daysdocs: add test future-proofing and large-scale refactoring lessonsCraig Jennings
Document key lessons from chime.el timestamp refactoring project: ## New Sections Added **Test Future-Proofing & Time-Based Testing** - Dynamic timestamp generation patterns and benefits - Never hardcode dates in tests - use relative time helpers - Mock time via function substitution (with-test-time pattern) - Code examples showing before/after patterns **Large-Scale Test Refactoring Strategy** - Strategic planning: tackle biggest challenges first - Execution approach: maintain 100% pass rate throughout - Project management: track progress visibly, celebrate milestones - Know when you're done: not all files need changes **Real-World Example** - chime.el project: 23 files, 339 tests - 16 files refactored (251 tests), 7 files skipped (88 tests) - 100% pass rate maintained across all refactoring - Result: future-proof test suite that never expires ## Key Insights - "Tackle biggest challenge first" eliminates intimidation - Work in batches but commit individually for clean history - Don't let perfectionism create unnecessary work - Strategic approach builds momentum and confidence Added "Hardcoded dates in tests" to Red Flags section. These lessons capture the methodology that successfully completed the hardest refactoring task in the project. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
9 daysfeat: ensure elisp-lint auto-installs via use-packageCraig Jennings
Add :ensure t to elisp-lint use-package declaration to guarantee it's always installed. This supports chime.el development workflow where 'make lint' provides comprehensive code quality checks. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
9 daysfeat:org-agenda: Enhance chime notifications and modelineCraig Jennings
Extended the modeline display lookahead to 2 hours and added new formatting for modeline content, including a compact time-until format and title truncation for long event titles. Disabled chime sound notifications for a quieter experience.
9 daysmaint:loading org-msg from development local repo for testingCraig Jennings
9 daysrefactor:selection-framework: Remove dead code and enhance configsCraig Jennings
Remove unused comment and fix consult-line keybinding override. Update completion styles with 'basic' for better flexibility. Clean up Yasnippet integration comments. Add more descriptive which-key labels to improve usability.
9 dayschore:org-roam: Defer org-roam package loading by 1 secondCraig Jennings
This change defers the loading of the org-roam package by 1 second. This is a workaround to org-roam not loading soon enough after launch to have created the necessary capture templates. I'll fix that in an upcoming org-roam refactor session.
9 daysrefactor:prog-general: Simplify yasnippet configurationCraig Jennings
Replace the `setq yas-snippet-dirs` with `list` function for better readability and add `yas-reload-all` to ensure snippets are reloaded. Remove `ivy-yasnippet` configuration as it is not required.
10 daysfeat:popper: Add async-native-compile-log buffer to popup rulesCraig Jennings
Include the `*Async-native-compile-log*` buffer in the list of popup rules for improved buffer management.
10 daysmaint:vc install org-msg, disable debugging on org-gcalCraig Jennings
10 daysmaint: update localrepo packagesCraig Jennings
10 daysrefactor: Rename custom-file-buffer to custom-buffer-fileCraig Jennings
Renamed the module 'custom-file-buffer' to 'custom-buffer-file' to ensure consistency across the codebase. This change affects module imports and test files. Additionally, new module 'system-commands.el' has been created to handle system power and session management commands, removing these functionalities from 'wip.el'.
10 daysdocs:quality-engineer: add to integration test guidelines + examplesCraig Jennings
Added detailed guidelines and examples for writing effective integration tests in the quality-engineer documentation. This includes naming conventions, docstring requirements, file structure, and when to use integration tests. Expanded sections cover balancing test types and organizing test files for clarity and maintainability.
10 daysmaint:localrepo:latest packagesCraig Jennings
10 daysmaint:weather: update wttrin installation to vc-installCraig Jennings
Remove local load-path in favor of vc installation for wttrin to use the source (latest revision).
10 daysmaint:org-gcal: Add forward declarations and update org-gcal usageCraig Jennings
Forward declare internal org-gcal variables and functions to improve code clarity. Update use-package declaration with version control information to use my fork of org-gcal (fixes, better testing).
10 daystest:org-gcal: Add mock tests for API request captureCraig Jennings
Add a new test file `test-org-gcal-mock.el` to mock and capture what org-gcal sends to the Google Calendar API. This enables debugging of sync issues without making real API calls. Includes methods to capture HTTP requests and verify API call details.
10 dayschore:init.el: remove commented import for show-kill-ringCraig Jennings
Clean up the code by removing an unnecessary commented-out import line for show-kill-ring in the initialization file.