# klavaro
[](https://github.com/Fierthraix/klavaro/actions/workflows/ci.yml)
[](https://github.com/Fierthraix/klavaro/releases)
[](https://crates.io/crates/klavaro)
[](https://crates.io/crates/klavaro)
[](https://docs.rs/klavaro)
[](LICENSE)
[](https://aur.archlinux.org/packages/klavaro)
[](https://aur.archlinux.org/packages/klavaro-bin)
[](https://aur.archlinux.org/packages/klavaro-git)
Save the current keyboard layout (`xkb_active_layout`) to a file on [Sway](https://swaywm.org/). Useful with `i3status`.
```bash
$ klavaro --help
Print the current xkb_layout in sway.
The default output file is `/tmp/.xkb_lingvo'
USAGE:
klavaro [OUTPUT_FILE]
```
## Installation
### Cargo
```bash
cargo install klavaro
```
### Arch Linux / AUR
```bash
yay -S klavaro
yay -S klavaro-bin
yay -S klavaro-git
```
### macOS / Homebrew
```zsh
brew install --cask Fierthraix/tap/klavaro
```
### Nix
```bash
nix profile install github:Fierthraix/nur-packages#klavaro
```
### Release Assets
```text
https://github.com/Fierthraix/klavaro/releases/latest
```
## i3status
Your current Sway keyboard layout can be printed in `i3status` thusly:
```
~/.i3status.conf
```
```
order += "read_file keyboard"
read_file keyboard {
path = "/tmp/.xkb_lingvo"
color_good = "#FFFFFF"
}
```
However, the `klavaro` program must already be running, which can be accomplished via `systemd` user service as below.
## SystemD User Service
Since `sway` is a _user_ process, a systemd _user_ service must be used in order to get the `SWAYSOCK` successfully.
This is the service file needed:
```
/etc/systemd/user/klavaro.service
```
```
[Unit]
Description=klavaro
[Service]
Type=simple
ExecStart=/usr/local/bin/klavaro
Restart=always
RestartSec=1s
[Install]
WantedBy=multi-user.target
```
Then the service can be started:
```bash
systemctl --user enable klavaro # Schedule klavaro on startup.
systemctl --user start klavaro # Start klavaro immediately.
```
## swaymsg
This is basically equivalent to (but _muuch_ more efficient than)
```bash
swaymsg -r -t subscribe -m '["input"]' \
| jq '.input.xkb_active_layout_name'
```
and saving the result to a file.