#sway #wayland #workspaces

app piow

Put Icons On your sway Workspaces

5 releases (3 breaking)

0.4.0 Mar 12, 2022
0.3.0 Nov 1, 2021
0.2.1 Jun 12, 2021
0.2.0 Mar 12, 2021
0.1.0 Feb 20, 2021

#47 in GUI

33 downloads per month


225 lines

Put Icons On Workspaces

Build Crates.io

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:

Installation & Usage

Build and install from source with cargo. Then simply run the executable. See piow --help for supported cli options.

# install
cargo install piow
# run
# increase log level for troubleshooting, possible values: Trace, Debug, Info, Warn, Error
RUST_LOG=piow=Debug piow


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.

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:

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.


~166K SLoC