Add default values for sizes.elevationMargin, font.family.numbers, and
font.variableAxes.main to prevent undefined property errors when these
aren't specified in user config.
Fix Revealer widget using contentChildren instead of children, which
caused content items to not be detected properly.
- Add QtCore import for StandardPaths API
- Fix defaultMatugenPath to use writableLocation() and strip file:// prefix
- Change matugenFile.text to text() (it's a function, not property)
- Add onFileChanged: reload() for live color updates when wallpaper changes
Previously, hypr-lens was always using hardcoded fallback colors because
FileView.text was being accessed as a property instead of called as a
function, resulting in empty content.
Add symlink detection to prevent "same file" errors when QML modules
or scripts directories are symlinked to the repo (common for dev setups).
- Add is_symlink_to_source() helper function
- Skip copy operations when destination symlinks to source
- Show appropriate success message for symlinked directories
- Apply check to both install and update mode operations
- Add & disown to notify-send for proper background execution
- Clean notification format: action as title, path as body
- Swappy now respects copyAlsoSaves setting (saves clipboard if true)
- Remove auto-save from swappy; clipboard-focused by default
- Consistent messaging: "Copied to clipboard" vs "Copied & saved"
- Add background file watcher that monitors for saves while swappy is open
- Notifications fire instantly when user clicks Save (not after close)
- Supports multiple saves - each triggers a notification
- Consistent notification format: "hypr-lens" title with message in body
- Watcher polls file mtime every 0.3s with minimal overhead
- Properly cleans up watcher process when swappy closes
Visual feedback via notify-send when screenshots are:
- Copied to clipboard
- Saved to disk (shows full path)
- Failed to save (error notification)
Swappy edit mode shows notification only when file is saved,
silent when user cancels or uses swappy's clipboard copy.
- Extract resolveSavePath() and buildSaveSetup() in SnipCommands.qml
to eliminate duplicate save path logic between Copy and Edit commands
- Remove unnecessary sed JSONC comment stripping from record.sh since
config format is now plain JSON
Fixes#1 - Screenshots now properly save to disk when savePath is configured.
Changes:
- Changed config format from JSONC to JSON for reliable parsing
- Added tilde (~) expansion for all save paths
- Edit mode (swappy) now saves to configured savePath via -o flag
- Default paths: ~/Pictures/hypr-lens, ~/Videos/hypr-lens
- Added copyAlsoSaves option for users who want Copy to also save
- Copy mode (left-click) now clipboard-only by default
- Updated documentation and changelog
Closes#1
Add note that NixOS, Fedora, and other distros can manually install
by handling dependencies themselves. The QML components are distro-agnostic,
only the installer script is Arch-centric.
Add ability to right-click monitor buttons in the region selector toolbar
to capture the full monitor and open swappy for editing, mirroring the
existing right-click behavior for region selection.
Changes:
- MonitorButton: add editRequested signal and altAction handler
- OptionsToolbar: add editFullMonitor signal propagation
- RegionSelection: add editFullMonitor() function, fix action override logic
Refactors included:
- Use enum keys in commandBuilders for self-documenting code
- Extract circle bounding box calculation to RegionDragState
- Create ActionConfig.qml singleton for centralized action metadata
- Create RegionUtils.js with parsing, clamping, and sorting utilities
- Extract MonitorButton.qml component for reusability
- Consolidate 5 action methods into single openWithAction()
- Replace switch statements with table-driven command building
- Improve control animations using State/Transition pattern
Reduces ~70 lines of duplicated code while improving maintainability.