aboutsummaryrefslogtreecommitdiff
path: root/modules
Commit message (Collapse)AuthorAgeFilesLines
* feat: Add quick setup for call recording with automatic device pairingCraig Jennings2025-11-031-1/+71
| | | | | | | | | | | | | | | | Users needed a faster way to configure audio for call recording. This adds cj/recording-quick-setup-for-calls which automatically groups audio devices by hardware and lets users pick one device for both mic and monitor. Key improvements: - Groups devices by hardware (USB, built-in, Bluetooth) - Normalizes Bluetooth MAC addresses (handles colon/underscore formats) - Shows friendly device names (e.g., "Jabra SPEAK 510 USB") - Automatically pairs mic + monitor from same device - Bound to C-; r c for quick access Perfect for recording video calls where you need to capture both your voice and the remote person's voice through the same audio device.
* ux: Use friendlier labels for device states in recording moduleCraig Jennings2025-11-031-4/+16
| | | | | | | | | | | | | Replace technical state names with user-friendly labels: - "SUSPENDED" → "Ready" (device available, will activate on use) - "RUNNING" → "Active" (device currently in use) - "IDLE" → "Ready" Add explanatory note in device list buffer explaining that "Ready" devices are normal and will activate automatically when recording starts. Prevents user confusion - "SUSPENDED" sounds like something is wrong when it's actually the normal idle state.
* feat: Add device selection and diagnostics to recording moduleCraig Jennings2025-11-031-3/+80
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Add interactive device selection to fix recording with multiple audio devices. New features: - cj/recording-list-devices (C-; r d) - Show all available audio sources - cj/recording-select-devices (C-; r s) - Interactively select mic/monitor - cj/recording-parse-sources - Parse pactl output into structured data - Enhanced cj/recording-get-devices with graceful fallback to manual selection Improvements: - Works with PulseAudio and PipeWire - Supports USB devices (Jabra SPEAK 510) - Supports Bluetooth devices - Supports built-in laptop audio - Shows device state (RUNNING, SUSPENDED) during selection - Better error messages with actionable suggestions - Device selection persists across recordings Fixes recording breakage when plugging in external audio interfaces. Addresses Method 1 (Make Using Emacs Frictionless) from V2MOM. Closes #[#B] Fix video/audio recording module sub-tasks: - Add diagnostic command - Add device selection UI - Improve error messages - Make device detection more flexible
* fix: Swap print keybinding and add confirmation promptCraig Jennings2025-11-031-6/+13
| | | | | | | | | | | | | | | | | | | | | | Print operations are now safer and more intuitive: Keybinding changes: - C-; b p → copy file path (safe, common action) - C-; b P → print to PostScript (dramatic, requires shift) Print function improvements: - Add y-or-n-p confirmation before printing - C-u prefix skips confirmation and enables color printing - Prevents accidental waste of paper/toner Serves V2MOM Values: - Intuitive: Dramatic actions require shift key - Intuitive: Prevents muscle memory mistakes - Simple: Reliability through confirmation Also updated docs/NOTES.org with Makefile availability note. Closes inbox items from emacs-inbox-zero session (2025-11-03).
* feat: Add copy-to-top and copy-to-bottom buffer methods with testsCraig Jennings2025-11-031-11/+44
| | | | | | | | | | | | | | | | | | | | | | Add two new methods to copy buffer content regions: - cj/copy-to-bottom-of-buffer: copies from point to end of buffer - cj/copy-to-top-of-buffer: copies from beginning of buffer to point Reorganize copy operations under C-; b c submenu: - C-; b c w: copy whole buffer - C-; b c t: copy to top (beginning to point) - C-; b c b: copy to bottom (point to end) Other copy operations (buffer name, file path, file link) remain at C-; b base level for quick access. Add comprehensive ERT tests (22 tests total): - test-custom-buffer-file-copy-to-bottom-of-buffer.el (11 tests) - test-custom-buffer-file-copy-to-top-of-buffer.el (11 tests) - Tests cover normal, boundary, and error cases including unicode, narrowing, whitespace, and read-only buffers All tests pass.
* config: Optimize dashboard loading and reduce bookmark countCraig Jennings2025-11-031-2/+2
| | | | | | Changes: - Changed dashboard to :demand t (load immediately instead of defer) - Reduced bookmark display from 15 to 10 items
* config: Update chime.el to use new alert-intervals formatCraig Jennings2025-11-031-26/+16
| | | | | | | | | | | | Updated chime configuration for severity refactor: - Replaced chime-alert-time and chime-alert-severity with chime-alert-intervals '((5 . medium) (0 . medium)) - Changed polling interval from 60s to 30s for faster response - Added chime-day-wide-time "09:00" for all-day event notifications - Removed settings that match defaults (play-sound, keyword filters, etc.) - Changed chime-debug from t to nil All notifications now use medium urgency.
* 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
* 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-011-6/+63
| | | | | | | | | | | | 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
* wip:org-roam: first pass at consult-org-roam, but disabledCraig Jennings2025-11-011-0/+30
|
* 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.
* 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.
* 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.
* 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-311-0/+21
| | | | | 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
|
* 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: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.
* 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-272-7/+1
|
* refactor: Rename custom-file-buffer to custom-buffer-fileCraig Jennings2025-10-273-157/+141
| | | | | | | | | 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'.
* 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).
* feat:which-key: Add descriptive labels for custom keymapsCraig Jennings2025-10-2734-30/+322
| | | | | | | | | | | | Enhance which-key integration by providing detailed descriptions for new key bindings across multiple modules. This improves the usability of custom keymaps by clarifying the purpose of each keybinding, making it easier for users to navigate and understand different menus and options available within the configuration. This update ensures that all custom keymaps now display a descriptive label in the which-key popup to explain their functionality, aiding users in identifying keymap purposes promptly.
* feat:test-runner: Enhance ERT test runner with focus/unfocus supportCraig Jennings2025-10-271-4/+5
| | | | | | | | | | | | | | | | | | Add comprehensive documentation and workflow details for the ERT test runner, including integration with Projectile projects for automatic test discovery. Refactor code to support focus/unfocus workflows, allowing developers to efficiently manage test execution by focusing on specific test files. Introduce internal utility functions `cj/test--do-*` to modularize logic for file operations and focus management, improving code maintainability. Add new tests in `test-test-runner.el` to validate the enhanced functionality, ensuring robust handling of focus operations and test execution scenarios.
* feat:test-runner: Enhance ERT test runner with focus/unfocus supportCraig Jennings2025-10-271-3/+7
| | | | | | | | | | | | | | | | | | Add comprehensive documentation and workflow details for the ERT test runner, including integration with Projectile projects for automatic test discovery. Refactor code to support focus/unfocus workflows, allowing developers to efficiently manage test execution by focusing on specific test files. Introduce internal utility functions `cj/test--do-*` to modularize logic for file operations and focus management, improving code maintainability. Add new tests in `test-test-runner.el` to validate the enhanced functionality, ensuring robust handling of focus operations and test execution scenarios.
* feat:test-runner: Enhance ERT test runner with focus/unfocus supportCraig Jennings2025-10-271-81/+220
| | | | | | | | | | | | | | | | | | Add comprehensive documentation and workflow details for the ERT test runner, including integration with Projectile projects for automatic test discovery. Refactor code to support focus/unfocus workflows, allowing developers to efficiently manage test execution by focusing on specific test files. Introduce internal utility functions `cj/test--do-*` to modularize logic for file operations and focus management, improving code maintainability. Add new tests in `test-test-runner.el` to validate the enhanced functionality, ensuring robust handling of focus operations and test execution scenarios.
* feat:browser-config: Integrate browser configuration and add testsCraig Jennings2025-10-271-19/+62
| | | | | | | | | | | | | - Move `browser-config` from 'Modules In Test' to active modules - Refactor browser handling functions for better error handling: - Introduce `cj/--do-apply-browser-choice` and - `cj/--do-choose-browser` Return status symbols for success and - error cases Add comprehensive unit tests in - `tests/test-browser-config.el` Focus on internal `cj/--do-*` - functions and file I/O using temp files Validate return values and - ensure isolated tests with setup/teardown functions Ensure - consistent handling of browser configurations and improve - initialization logic
* feat:jumper: Integrate and enhance 'jumper' module with testsCraig Jennings2025-10-271-76/+176
| | | | | | | | | Enable 'jumper' module by uncommenting its require statement in init.el. Enhance 'jumper' by adding detailed documentation, refactoring logic into internal functions, and updating keybinding setup for better usability. Integrate 'which-key' for improved keybinding assistance. Add comprehensive unit tests for 'jumper' functionalities to ensure reliability.
* feat:text-generation: improve and rename lorem generatorCraig Jennings2025-10-261-34/+59
| | | | | | | | | Rename `lorem-generator.el` to `lorem-optimum.el` for fun. Enhance text tokenization, Markov chain learning, and text generation functions. Introduce new configuration variables for training files and improve efficiency with vectorized access. Add comprehensive benchmarks and unit tests under `tests/`. This improves performance and lays groundwork for further extensions.