Awesome
Application aware layer switching 🔁 with kanata ⌨️ and sway 💨
Additional features:
Current layer text overlay
- Using sdl2 for rendering just text, is overkill
- Find a more lightweight alternative
- Is there any better way of showing current-layer information?
- Maybe some sway prompt using ipc?
TODO 📔
-
Configuration
- List of registered apps that have specific layers
- Currently getting from file system (
~/.config/keyboard/apps/*
) - Get from config file?
- Currently getting from file system (
- Aliases and patterns for application names
- List of registered apps that have specific layers
-
Refactor the code
-
Don't rely on swaymsg, make universal
- Now using swayipc
- Make it work on other than sway?
-
Whitelist/blacklist
-
Make the overlay a compile time feature
-
Fork kanata and apply the logging patches
How it works ⚙️
- You have a
main
layer, this will be used by default. - You have a
~/.config/keyboard/apps/org.telegram.desktop
layer. Whentelegram
is focused it sends the window name (org.telegram.desktop
in this case) to kanata. Kanata switches to this layer. NOTE: If it can't find the corresponding file in/apps
it fallbacks to the default layer (main
)
- Create a file and include it in your kanata configuration
- NOTE: The name of the file should match what sway returns
Check out my kanata config for reference 💡
Dependencies
- SDL2 for the overlay window, optional (todo)
How to run 🏃
git clone https://github.com/veyxov/qanata
cd qanata/
cargo run -- --port 7070
Visualize statistics generated from kanata
python script for generating heatmap for key presses
How to run:
./run_stats.sh --file path/to/kanata/log
# Current format: actual_key_presses|layer|resulting_key_press
Bugs 🐞
-
Panics if there are no windows in current workspace (when the wallpaper is visible) - Overheats the CPU when sway is locked; Fixed in commit