Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
d97475b
chore(config): ignore CLAUDE.md from version control
Kotmin May 7, 2026
c52201e
fix(ai): rename prompt to system_prompt to prevent injection misuse
Kotmin May 7, 2026
419686a
fix(loader): add boundary check to prevent path traversal in skill paths
Kotmin May 7, 2026
97ea289
docs(spec): add WaylandXWaylandAdapter design
Kotmin May 7, 2026
82f2b72
docs(plan): add WaylandXWaylandAdapter implementation plan
Kotmin May 7, 2026
fed7c71
feat(hotkeys): add WaylandXWaylandAdapter with X11 keepalive window
Kotmin May 7, 2026
98af0d9
fix(hotkeys): clean up keepalive window if pynput listener fails to s…
Kotmin May 7, 2026
342b3f4
feat(hotkeys): factory detects Wayland+XWayland and returns WaylandXW…
Kotmin May 7, 2026
5276847
test(hotkeys): fix env isolation in factory tests using patch.dict in…
Kotmin May 7, 2026
5310304
chore(deps): add evdev as explicit linux dependency
Kotmin May 7, 2026
e652188
feat(hotkeys): add EvdevAdapter for universal Linux hotkey capture vi…
Kotmin May 7, 2026
94460e5
fix(hotkeys): normalize cmd/win aliases, guard register() post-start,…
Kotmin May 7, 2026
9fcea1f
feat(hotkeys): factory returns EvdevAdapter for all Wayland sessions
Kotmin May 7, 2026
be9a4e1
test(hotkeys): add headless scenario coverage to factory tests
Kotmin May 7, 2026
acdfa3a
refactor(hotkeys): remove WaylandXWaylandAdapter superseded by EvdevA…
Kotmin May 7, 2026
cf2033c
fix(hotkeys): make register() thread-safe for post-start calls
Kotmin May 7, 2026
d56c140
feat(skills): add greet (ctrl+shift+g) and quick_clip (alt+q) demo sk…
Kotmin May 8, 2026
dc97ebb
chore(deps): update uv.lock for evdev
Kotmin May 8, 2026
ede7059
chore: add trigger_skill.py dev helper
Kotmin May 8, 2026
cfa8b88
docs: add Wayland setup guide
Kotmin May 8, 2026
b466f00
chore: gitignore docs/superpowers and x11_keepalive.py
Kotmin May 8, 2026
387d5db
Merge branch 'main' into dev
adeptofvoltron May 11, 2026
9639c47
ref: split code lines to col length sub 88
Kotmin May 11, 2026
c4440c8
fix(lint): resolve E501 line-length violations and update greet author
Kotmin May 11, 2026
3c34771
doc: added author to Greet Skill
Kotmin May 11, 2026
58ca4cd
fix(types): cast evdev ecodes lookups to int to satisfy mypy no-any-r…
Kotmin May 11, 2026
39384a1
fix(hotkeys): prefer X11HotkeyAdapter when DISPLAY is set
adeptofvoltron May 12, 2026
2a7b6fc
feat: load .env from repo root and add anthropic/openai dependencies
adeptofvoltron May 12, 2026
d451d00
mypy related changes
adeptofvoltron May 12, 2026
9c407ba
chore(config): ignore CLAUDE.md from version control
Kotmin May 7, 2026
8517bbf
Merge branch with evdev adapter, greet/quick_clip skills, and AI tool…
adeptofvoltron May 17, 2026
c793677
flake8 and mypy
adeptofvoltron May 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
.idea
.cursor
.claude
CLAUDE.md
_bmad

# Local configuration — copy config.yaml.example to config.yaml to get started
Expand All @@ -21,4 +22,11 @@ build/

.nimble
config.yaml
.env

# Agentic planning artifacts
docs/superpowers/

# Superseded X11 keepalive prototype
x11_keepalive.py

.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: 'Fix hotkey adapter routing: prefer X11 when DISPLAY is set'
type: 'bugfix'
created: '2026-05-12'
status: 'done'
route: 'one-shot'
---

## Intent

**Problem:** On Wayland sessions with XWayland running (both `WAYLAND_DISPLAY` and `DISPLAY` set), `get_adapter()` routed to `EvdevAdapter`, which requires the user to be in the `input` group. Users not in that group got a silent empty device list and a startup failure.

**Approach:** Prioritise `DISPLAY` in the routing decision. When `DISPLAY` is set (X11 or XWayland), use `X11HotkeyAdapter` (pynput). Fall back to `EvdevAdapter` only for pure Wayland (no `DISPLAY`) or headless sessions.

## Suggested Review Order

- [`nimble/hotkeys/__init__.py`](../../nimble/hotkeys/__init__.py) — routing condition, the core change
- [`tests/unit/hotkeys/test_factory.py:25`](../../tests/unit/hotkeys/test_factory.py) — renamed + updated XWayland test assertion
Loading
Loading