* feat: add Wayland support for keyboard shortcuts using evdev backend
This commit adds multi-backend support for keyboard shortcuts, enabling
them to work on Wayland sessions where pynput does not work.
**Changes:**
- New `keyboard_backends/` package with modular backend system
- `base.py`: Abstract base class for keyboard backends
- `pynput_backend.py`: Existing pynput implementation (X11/XWayland)
- `evdev_backend.py`: New evdev implementation (X11 & Wayland)
- `__init__.py`: Backend factory with auto-detection
- Updated `keyboard_shortcuts.py`:
- Refactored to use backend system
- Auto-detects session type (X11 vs Wayland)
- Selects appropriate backend automatically
- Provides helpful error messages when shortcuts unavailable
- Added `evdev>=1.6.0` to dependencies (Linux only)
- Comprehensive test updates:
- 21 tests pass covering all backends
- Tests for session detection
- Tests for backend factory
- Tests for permission hints
**User Impact:**
- Keyboard shortcuts now work on Wayland when user is in 'input' group
- Clear error messages guide users to fix permission issues
- Backward compatible with X11 (pynput backend)
**Setup for Wayland:**
```bash
sudo usermod -a -G input $USER
# Log out and log back in
```
Related to #80
* style: fix flake8 issues in evdev_backend.py
- Remove unused import 'categorize'
- Remove unused variable 'dev'
* style: fix remaining flake8 issues in tests
- Remove unused 'time' import
- Remove unused 'result' variable
- Remove unused 'backend_cls' variable
- Break long line to stay under 100 characters
* style: apply black and isort formatting to pass CI
* feat: auto-configure Wayland keyboard shortcuts during installation
Automatically detect Wayland sessions during installation and add the user
to the 'input' group required for evdev-based keyboard shortcuts.
This eliminates the need for users to manually configure permissions
after installation on Wayland systems.
* fix: escape commit message in Detect Changes step to handle special characters
The commit message was being directly inserted into the bash comparison,
which broke when the message contained special characters like parentheses.
Fix by assigning to a variable first.
* chore: drop unrelated installer/web changes
* fix: fall back to evdev backend
* style: format keyboard shortcut imports
- Added complete Next.js single-page website for Vocalinux
- Configured static export with proper GitHub Pages deployment
- Added GitHub Actions workflow for automated deployment to gh-pages branch
- Configured custom domain (vocalinux.com) with CNAME file
- Added comprehensive build script with npm support
- Responsive design with dark/light theme toggle
- Modern UI components with Tailwind CSS and shadcn/ui
- Proper SEO metadata and accessibility features