A desktop application for visualizing and analyzing i3wm keyboard shortcuts.
- Interactive keyboard — color-coded keys show binding density at a glance
- Inspector — click any key to see all its bindings, commands, source locations, and conflicts
- Binding table — sortable, filterable, exportable list of every shortcut
- Search — live regex or plain-text search across keys, commands, and modes
- Modifier filter — check Ctrl/Shift/Alt/Super to isolate a chord layer
- Mode filter — switch between
default,resize,stats, and other i3 modes - Statistics — total bindings, unique keys, modes, conflicts, release bindings, variables
- Live reload — watches the config file and re-parses automatically on save
- Conflict detection — highlights duplicate bindings (same key + modifiers + mode, different command)
- Source navigation — double-click any binding to open it in your
$EDITOR - Export — save visible bindings as CSV or JSON from the context menu
| Color | Meaning |
|---|---|
| Gray | No binding |
| Green | One binding |
| Yellow | Multiple bindings |
| Blue | Mode-specific binding |
| Red | Conflicting bindings |
| Purple | Release binding |
| Cyan | Selected |
- Python 3.10+
- PySide6
pip install PySide6# Open with a config file directly
python3 main.py ~/.config/i3/config
# Or open the file picker on launch
python3 main.py| Action | Shortcut |
|---|---|
| Open file | Ctrl+O |
| Reload | F5 |
| Zoom in/out | Scroll wheel |
| Pan | Click and drag |
set $variable value— variable definitions, resolved before parsingbindsymandbindcode— with--release,--no-repeat,--whole-windowflagsmode "name" { ... }— every binding records its owning modeinclude path/to/file— recursive includes with loop detection- Continuation lines ending in
\ - Comments (
#) - Unknown directives are silently skipped (stored as parser warnings)
main.py — entry point
src/
parser.py — i3 config parser
models.py — Binding and BindingDatabase data classes
layouts.py — keyboard layout definitions (TKL, 60%, Full)
keyboard_view.py — interactive keyboard widget (QGraphicsView)
binding_table.py — sortable/filterable binding table
inspector.py — per-key detail panel
statistics_panel.py — summary stat cards
search_bar.py — live search with regex toggle
modifier_selector.py — modifier filter checkboxes
main_window.py — main window, MVC wiring, live reload
example-config — sample i3 config for testing
- Config comparison (diff two configs)
- Free shortcut finder (highlight unbound keys for a given modifier set)
- Export to Markdown / HTML / PDF
- Visual binding editor
- Custom keyboard layouts (JSON)
- Sway / Hyprland support
