Map workspace name to icons defined depending on the windows inside of the workspace.
An executable similar to workstyle.
Differences between sworkstyle
and workstyle
:
-
Plug-and-play solution, build-in matching config, you can extend this config by creating/modifying
.config/sworkstyle/config.toml
or you can make a PR for your package manager or this repository with new matchers. -
Way better matching: using regex, exact app names and generic app titles.
-
Specifically meant for Sway and Wayland
-
Fallback Icon
-
Deduplication
Your workspace shall never contain an empty icon again!
An example of what it does (using waybar which also hides the workspace index):
cargo install sworkstyle
You can install it manually or use a aur helper like Yay.
yay -S sworkstyle
sworkstyle
Add the follow line to your sway config file (~/.config/sway/config
).
exec sworkstyle &> /tmp/sworkstyle.log
NOTE: When using the cargo install make sure to add the
.cargo/bin
to thePATH
environment variable before executing sway. You can do this by addingexport PATH="$HOME/.cargo/bin:$PATH"
to.zprofile
or.profile
You should configure anything mentioning a workspace (assign, keybinding) to use numbered workspaces. This is because sworkstyle will rename your workspaces many times so it needs a constant number that doesn't change in order to work correctly.
Prefer
assign [class="^Steam$"] number 1
bindsym $mod+1 workspace number 1
over
assign [class="^Steam$"] 1
bindsym $mod+1 workspace 1
The main configuration consists of deciding which icons to use for which applications.
The config file is located at ${XDG_CONFIG_HOME}/sworkstyle/config.toml
. Its values will take precedence over the defaults. The syntax is in TOML and should be pretty self-explanatory.
When an app isn't recognized in the config, sworkstyle
will log the application name as a warning.
Simply add that string to your config file, with an icon of your choice.
Note that the crate find_unicode can help find a unicode character directly from the command line. It now supports all of nerdfonts unicode space.
For a reference to the regex syntax see the regex crate
'{pattern}' = '{icon}'
# pattern: Can either be the exact "app_name" (app_id/class) of the window or a regex string in the format of `"/{regex}/"` which will match the window "title".
# icon: Your beautiful icon
'{pattern}' = { type = 'generic' | 'exact', value = '{icon}' }
Note: You'll only have to use the verbose format when matching generic with a case insensitive text. 'case insensitive title' = { type = 'generic', value = 'A' }
If it couldn't match something it will print:
WARN [sworkstyle:config] No match for '{app_name}' with title '{title}'
You can use {title} to do a generic matching
You can use {app_name} to do an exact match
The default config uses font-awesome for icon mappinigs.
The default config is always appended to whatever custom config you define. You can overwrite any matching or make a PR if you feel like a matching should be a default.
fallback = ''
separator = ' '
[matching]
'discord' = ''
'balena-etcher' = ''
'Chia Blockchain' = ''
'Steam' = ''
'vlc' = ''
'org.qbittorrent.qBittorrent' = ''
'Thunderbird' = ''
'thunderbird' = ''
'Postman' = ''
'Insomnia' = ''
'Bitwarden' = ''
'Google-chrome' = ''
'google-chrome' = ''
'Chromium' = ''
'Slack' = ''
'Code' = ''
'code-oss' = ''
'jetbrains-studio' = ''
'Spotify' = ''
'GitHub Desktop' = ''
'/(?i)Github.*Firefox/' = ''
'firefox' = ''
'Nightly' = ''
'firefoxdeveloperedition' = ''
'/nvim ?\w*/' = ''
'/npm/' = ''
'/node/' = ''
'/yarn/' = ''
'Alacritty' = ''
If you want to change the build-in config, change src/default_config.toml
with your config and install the project.
You might also want font-awesome as a dependency depending on your config.
You can also make a PR to add a badge and add your install method under #Installation or to add matchers to the build-in config.
See aur for an example build.
- An
--unique
param where you only have a single icon per workspace based on the matching with biggest priority.
- Using sway's alt-tab behavior can cause a workspace to be not named
- Does not work on hyprland, use this instead: https://github.com/hyprland-community/hyprland-autoname-workspaces