aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
...
* fix: Resolve void-variable and void-function errors on first launchCraig Jennings2025-11-022-98/+98
| | | | | | | | | | | | | | | | | Fixed two critical bugs preventing Emacs from launching after fresh clone: 1. prog-go.el: Moved go-ts-mode-map keybinding from :bind clause - The :bind macro tried to reference go-ts-mode-map before it was loaded - Moved "C-; f" gofmt binding into cj/go-mode-keybindings function - Function executes via hook after mode loads, ensuring keymap exists 2. org-config.el: Moved function definitions before use-package block - cj/org-general-settings, cj/org-appearance-settings, and cj/org-todo-settings were called in :config but defined after - Moved all three function definitions before (use-package org) - Functions now defined before :config section tries to call them Both fixes follow the pattern of ensuring dependencies exist before use.
* fix: Change org-gcal to use Google Calendar as authoritative sourceCraig Jennings2025-11-011-3/+3
| | | | | | | | | | | | | | | Changed from bidirectional "org" mode to "gcal" mode to avoid sync conflicts. This prevents HTTP 412 errors on recurring events and HTTP 400 errors on modified events. Google Calendar is now authoritative: - org-gcal-managed-newly-fetched-mode: "gcal" (was "org") - org-gcal-managed-update-existing-mode: "gcal" (was "org") Benefits: - No more version conflicts on recurring events - Cleaner sync without errors - Google Calendar changes always win
* feat: Add org-gcal dependencies and org-contacts birthday automationCraig Jennings2025-11-012-3/+49
| | | | | | | | | | | | | | | | 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
* docs: Add Emacs Lisp development best practices to NOTESCraig Jennings2025-11-011-0/+153
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* feat: Add chime-debug nil setting to configCraig Jennings2025-11-011-0/+3
| | | | | | | 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.
* chore: Update todo.org with new inbox items and music-config improvementsCraig Jennings2025-11-012-18/+81
| | | | | | | | | | | | 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
* feat: Add session workflow framework and complete first inbox zeroCraig Jennings2025-11-017-56/+1512
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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)
* wip:org-roam: first pass at consult-org-roam, but disabledCraig Jennings2025-11-011-0/+30
|
* admin: adding to inboxCraig Jennings2025-11-011-1/+8
|
* chore:system-utils: Fix indentation and update history persistenceCraig Jennings2025-11-011-4/+31
| | | | | | | 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.
* chore:scripts: update reset script to remove additional filesCraig Jennings2025-11-011-1/+4
| | | | | | 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.
* perf:system-defaults: Unpropertize kill ring on exitCraig Jennings2025-11-011-0/+7
| | | | | | | 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`.
* feat:mail-config: Add custom prefix to 'From' or 'To' headersCraig Jennings2025-11-011-0/+1
| | | | | | 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.
* refactor:init: remove network availability checks for package reposCraig Jennings2025-11-011-56/+10
| | | | | | | | | 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.
* feat:eshell: Add custom 'clear' function and set PAGER to 'cat'Craig Jennings2025-11-011-3/+11
| | | | | | 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.
* feat:buffer: Add diffing buffer contents with saved fileCraig Jennings2025-11-011-0/+22
| | | | | | | | 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.
* chore: updating local repo packageCraig Jennings2025-11-012-1/+0
|
* admin: rework todo to focus on the v2momCraig Jennings2025-11-013-1678/+1832
| | | | | | - 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
* feat:keybindings: Implement consult line or repeat featureCraig Jennings2025-10-311-65/+75
| | | | | | | 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.
* chore:custom-misc: update keybindings for word/char countCraig Jennings2025-10-311-4/+4
| | | | | | Change keybindings for counting words and characters to "# w" and "# c" to improve mnemonic efficiency. Update the corresponding which-key descriptions accordingly.
* feat:dirvish-config: Enable file marking for mu4e attachmentsCraig Jennings2025-10-311-0/+3
| | | | | Add 'turn-on-gnus-dired-mode' to 'dired-mode-hook' to facilitate marking files in Dirvish for attachment in mu4e emails.
* feat:custom-buffer-file: add mark, revert buffer keybindingsCraig Jennings2025-10-311-2/+6
| | | | | Added new keybindings for marking the whole buffer and reverting the buffer. Updated the descriptions to reflect these additions.
* feat:count-characters: Add character counting functionalityCraig Jennings2025-10-313-0/+423
| | | | | Introduce functions to count characters in a buffer or region. Bind new character counting function to "C-; C" in custom keymap.
* fix:eshell:allow eshell to load by removing dependency on itselfCraig Jennings2025-10-311-1/+0
|
* feat:mail:auto download mail every 10 minutesCraig Jennings2025-10-311-1/+2
|
* init:doc:correcting comment on video captureCraig Jennings2025-10-311-1/+1
|
* docs: Add active project handoff documentsCraig Jennings2025-10-315-4495/+3003
| | | | | | | | | | 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.
* fix(org-agenda): improve chime startup integrationCraig Jennings2025-10-301-16/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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)
* fix(dirvish): move deadgrep from D to G, preserve dired-do-delete on DCraig Jennings2025-10-292-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* feat(dirvish): add file duplication with 'd' key, move deadgrep to 'D'Craig Jennings2025-10-292-2/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* feat: add debug infrastructure for config modulesCraig Jennings2025-10-293-0/+92
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* fix: update chime variable names after breaking changesCraig Jennings2025-10-291-2/+2
| | | | | | | | | | | | 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.
* feat:org-gcal: Auto-save files after sync completionCraig Jennings2025-10-291-1/+15
| | | | | | | 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.
* refactor:script: simplify elisp compiled file deletion scriptCraig Jennings2025-10-291-20/+3
| | | | | | Remove user confirmation and file listing prompt. Simplify the script by directly deleting .eln and .elc files in the specified location and confirming completion.
* refactor:org-agenda-config: Update chime packageCraig Jennings2025-10-291-15/+12
| | | | | | | 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.
* docs: add test future-proofing and large-scale refactoring lessonsCraig Jennings2025-10-291-0/+114
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* feat: ensure elisp-lint auto-installs via use-packageCraig Jennings2025-10-291-1/+4
| | | | | | 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.
* feat:org-agenda: Enhance chime notifications and modelineCraig Jennings2025-10-281-4/+16
| | | | | | | 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.
* maint:loading org-msg from development local repo for testingCraig Jennings2025-10-281-1/+2
|
* refactor:selection-framework: Remove dead code and enhance configsCraig Jennings2025-10-281-14/+11
| | | | | | | 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.
* chore:org-roam: Defer org-roam package loading by 1 secondCraig Jennings2025-10-281-0/+1
| | | | | | | 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.
* refactor:prog-general: Simplify yasnippet configurationCraig Jennings2025-10-281-6/+2
| | | | | | | 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.
* feat:popper: Add async-native-compile-log buffer to popup rulesCraig Jennings2025-10-271-0/+1
| | | | | Include the `*Async-native-compile-log*` buffer in the list of popup rules for improved buffer management.
* maint:vc install org-msg, disable debugging on org-gcalCraig Jennings2025-10-273-10/+4
|
* maint: update localrepo packagesCraig Jennings2025-10-273-0/+2
|
* refactor: Rename custom-file-buffer to custom-buffer-fileCraig Jennings2025-10-2712-200/+185
| | | | | | | | | 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'.
* docs:quality-engineer: add to integration test guidelines + examplesCraig Jennings2025-10-271-7/+360
| | | | | | | | | 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.
* maint:localrepo:latest packagesCraig Jennings2025-10-277-2/+4
|
* maint:weather: update wttrin installation to vc-installCraig Jennings2025-10-271-2/+1
| | | | | Remove local load-path in favor of vc installation for wttrin to use the source (latest revision).
* maint:org-gcal: Add forward declarations and update org-gcal usageCraig Jennings2025-10-271-1/+7
| | | | | | 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).