# Wkeys An on-screen keyboard for wayland desktop written by rust using GTK-rs. **Notice: Wkeys requires your wayland wm support [Virtual keyboard](https://wayland.app/protocols/virtual-keyboard-unstable-v1) and [wlr layer shell](https://wayland.app/protocols/wlr-layer-shell-unstable-v1)** ![Default Layout](./assets/default.png) ## Installation #### Cargo ```shell cargo add wkeys ``` #### Build from Source Install dependencies, taking Arch Linux as an example. ```shell paru gtk4 gtk4-layer-shell ``` Build project. ```shell git clone https://github.com/ptazithos/wkeys.git cargo Build ``` ## Configuration The config files are at `~/.config/wkeys/`. The layout file is named `layout.toml`. The style file is named `style.css`. The default layout file is: ```toml layout = [ [ { top_legend = '~', bottom_legend = '`', scan_code = 41 }, { top_legend = '!', bottom_legend = '1', scan_code = 2 }, { top_legend = '@', bottom_legend = '2', scan_code = 3 }, { top_legend = '#', bottom_legend = '3', scan_code = 4 }, { top_legend = '$', bottom_legend = '4', scan_code = 5 }, { top_legend = '%', bottom_legend = '5', scan_code = 6 }, { top_legend = '^', bottom_legend = '6', scan_code = 7 }, { top_legend = '&', bottom_legend = '7', scan_code = 8 }, { top_legend = '*', bottom_legend = '8', scan_code = 9 }, { top_legend = '(', bottom_legend = '9', scan_code = 10 }, { top_legend = ')', bottom_legend = '0', scan_code = 11 }, { top_legend = '_', bottom_legend = '-', scan_code = 12 }, { top_legend = '+', bottom_legend = '=', scan_code = 13 }, { top_legend = 'Backspace', scan_code = 14, width = 2 }, ], [ { top_legend = 'Tab', scan_code = 15, width = 1.5 }, { top_legend = 'Q', scan_code = 16 }, { top_legend = 'W', scan_code = 17 }, { top_legend = 'E', scan_code = 18 }, { top_legend = 'R', scan_code = 19 }, { top_legend = 'T', scan_code = 20 }, { top_legend = 'Y', scan_code = 21 }, { top_legend = 'U', scan_code = 22 }, { top_legend = 'I', scan_code = 23 }, { top_legend = 'O', scan_code = 24 }, { top_legend = 'P', scan_code = 25 }, { top_legend = '{', bottom_legend = '[', scan_code = 26 }, { top_legend = '}', bottom_legend = ']', scan_code = 27 }, { top_legend = '|', bottom_legend = '\', scan_code = 43, width = 1.5 }, ], [ { top_legend = 'Caps Lock', scan_code = 58, width = 1.75 }, { top_legend = 'A', scan_code = 30 }, { top_legend = 'S', scan_code = 31 }, { top_legend = 'D', scan_code = 32 }, { top_legend = 'F', scan_code = 33 }, { top_legend = 'G', scan_code = 34 }, { top_legend = 'H', scan_code = 35 }, { top_legend = 'J', scan_code = 36 }, { top_legend = 'K', scan_code = 37 }, { top_legend = 'L', scan_code = 38 }, { top_legend = ':', bottom_legend = ';', scan_code = 39 }, { top_legend = '"', bottom_legend = "'", scan_code = 40 }, { top_legend = 'Enter', scan_code = 28, width = 2.25 }, ], [ { top_legend = 'Shift', scan_code = 42, width = 2.25 }, { top_legend = 'Z', scan_code = 44 }, { top_legend = 'X', scan_code = 45 }, { top_legend = 'C', scan_code = 46 }, { top_legend = 'V', scan_code = 47 }, { top_legend = 'B', scan_code = 48 }, { top_legend = 'N', scan_code = 49 }, { top_legend = 'M', scan_code = 50 }, { top_legend = '<', bottom_legend = ',', scan_code = 51 }, { top_legend = '>', bottom_legend = '.', scan_code = 52 }, { top_legend = '?', bottom_legend = '/', scan_code = 53 }, { top_legend = 'Shift', scan_code = 54, width = 2.75 }, ], [ { top_legend = 'Ctrl', scan_code = 29, width = 1.25 }, { top_legend = 'Win', scan_code = 91, width = 1.25 }, { top_legend = 'Alt', scan_code = 56, width = 1.25 }, { top_legend = 'Space', scan_code = 57, width = 6.25 }, { top_legend = 'Alt', scan_code = 56, width = 1.25 }, { top_legend = 'Win', scan_code = 92, width = 1.25 }, { top_legend = 'Menu', scan_code = 93, width = 1.25 }, { top_legend = 'Ctrl', scan_code = 29, width = 1.25 }, ], ] ``` The default style file is: ```css window { background-color: rgba(0, 0, 0, 0); } button { background-color: rgb(220, 220, 220); background-image: none; border-radius: 0; margin: 1px; padding: 12px; } button>label { color: black; } button:hover { background-color: rgb(255, 255, 255); } button:active { background-color: rgb(255, 255, 255); } button:checked { background-color: rgb(255, 255, 255); } ``` ## IPC Close Wkeys by IPC message ```shell wkeys --message close ``` ## License This repository is licensed under the [MIT License](LICENSE).