# Put Icons On Workspaces
[![Build](https://img.shields.io/github/actions/workflow/status/KuabeM/piow/build_master.yml?branch=master)](https://github.com/KuabeM/piow/actions?query=workflow%3Abuild-master)
[![Crates.io](https://img.shields.io/crates/v/piow.svg)](https://crates.io/crates/piow)
[![AUR](https://img.shields.io/aur/version/piow-bin)](https://aur.archlinux.org/packages/piow-bin)
Rename [sway] workspaces with icons according to the applications running on them. It constructs the
name based on a format string from the config. Duplicate icons are stripped from the list.
With a space as separator and waybar, it looks like this:
![](piow.png)
## Installation & Usage
Build and install from source with cargo. Then simply run the executable. See `piow --help` for
supported cli options.
```bash
# install
cargo install piow
# run
piow
# increase log level for troubleshooting, possible values: Trace, Debug, Info, Warn, Error
RUST_LOG=piow=Debug piow
```
## Configuration
`piow` looks for a configuration file in toml format in `${XDG_CONFIG_HOME}/piow/config.toml` and
`/etc/xdg/piow/config.toml` (former takes precedence). If it can't find this file, it loads the
default configuration contained in this repo. The configuration contains a map of application names
to icons, a default icon and a separator between workspaces number and icons. For getting started,
just copy `default.toml` over to `${XDG_CONFIG_HOME}/piow/config.toml` and start adding your own
icons.
| Configuration Key | Description |
|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------|
| `default_icon` | Icon used for apps without a configured icon |
| `format_str` | Format string for generating names. Supported placeholders:
`%n`: Workspace number
`%i`: Icons |
| `icon_separator` | Literal between icons |
| `[icons]` | paris of `"app-id" = "icon"`, app id as reported by `swaymsg -t get_tree`, matches substrings, e.g. an entry 'libre' will be matched for 'libreoffice' |
Watch the log for messages like `[WARN piow::nodes] No icon for application 'app-name' in the
config.` to find applications without a config entry. Just add a line `"app-name" = "icon"` to the
end of the config file and restart piow. The crate [find_unicode] is awesome for finding suitable
icons on the command line.
## Setup with sway & waybar
Add the following to your sway config file at `${XDG_CONFIG_HOME}/sway/config`. By forwarding the
log you get access to application names without a icon in the config.
```bash
exec_always --no-startup-id piow --syslog
```
It's useful to turn of additional renaming in waybar, e.g. remove `"format"` and `"format-icon"`
from the `sway/workspaces` directive in the waybar config similar to this:
```json
sway/workspaces {
"disable-scroll": true,
"all-outputs": true
}
```
> Hint: If you remove the workspace number placeholder `%i` from the format string, the ordering of
> the workspaces may no longer work as intended.
## Similar Projects
[Workstyle] has a similar approach but uses the i3 IPC connection. The config file format was
inspired by this crate.
[sway]: https://github.com/swaywm/sway
[find_unicode]: https://crates.io/crates/find_unicode
[Workstyle]: https://github.com/pierrechevalier83/workstyle