🕹️This is a toy for Hyprland.
This app automatically rename workspaces with icons of started applications - tested with waybar and eww.
You have to set the config file with your prefered rules based on class
and title
. Regex (match and captures) are supported.
https://github.com/hyprland-community/hyprland-autoname-workspaces/wiki/FAQ
Available as AUR package under the program name hyprland-autoname-workspaces-git
.
You can then use the service systemctl --user enable --now hyprland-autoname-workspaces.service
.
Package available here https://copr.fedorainfracloud.org/coprs/solopasha/hyprland/.
Available in nixpkgs as hyprland-autoname-workspaces
.
You can add it to your systemPackages
or try it without installing it with nix run
.
$ nix run nixpkgs#hyprland-autoname-workspaces
$ cargo install --locked hyprland-autoname-workspaces
$ hyprland-autoname-workspaces
First, you have to set your waybar
for example, with the good module hyprland/workspaces
. The module wlr/workspaces
is deprecated.
You have to use hyprland/workspaces
module with as config "format" = "{name}"
.
"hyprland/workspaces": {
"format": "{name}",
}
For all parameters, check the config.toml.example
in this repository.
The config file can be specified using the -c <CONFIG>
option, otherwise it defaults to ~/.config/hyprland-autoname-workspaces/config.toml
. If you specify a path that doesn't exist, a default configuration file will be generated.
You can use regex everywhere, and its case sensitive by default
Edit the mapping of applications with class = "icon"
in the [icons]
part.
In icons value, you can use the placeholders {class}
, {title}
and {match1}
, {match2}
if you use regex captures.
Example:
[class]
DEFAULT = "{class}: {title}"
...
- You can exclude applications in the
[exclude]
withclass = title
.
In the exclude
part, the key is the window class
, and the value the title
.
You can use ""
in order to exclude window with empty title and ".*"
as value to match all title of a class name.
Example:
...
[exclude]
"(?i)fcitx" = ".*" # will match all title for fcitx
"[Ss]team" = "Friends list.*"
"[Ss]team" = "^$" # will match and exclude all Steam class with empty title (some popups)
- You can match on title with
[title_in_class.classname]
and[title_in_class_active.class]
with"a word in the title" = "icons"
.
Hint: There is also title_in_initial_class
, initial_title_in_class
, initial_title_in_initial_class
and so on.
Example:
...
[title."(xterm|(?i)kitty|alacritty)"]
"(?i)neomutt" = "mail"
ncdu = "file manager"
[title."(firefox|chrom.*)"]
youtube = "yt"
google = "gg"
[title_active."(firefox|chrom.*)"]
youtube = "<span color='red'>yt</span>"
google = "<span color='blue'>{icon}</span>"
...
- You can deduplicate icons with the
dedup
parameter in theroot
section of config file.
dedup = true
dedup_inactive_fullscreen = true
...
[title."(xterm|(?i)kitty|alacritty)"]
"(?i)neomutt" = "mail"
ncdu = "file manager"
...
- You can also redefine all the default formatter with those
[format]
section formatters parameters. The available list of{placeholder}
is:
workspace:
- client
- id (or id_long)
- name (use value from
[workspaces_name]
mapping) - delim
clients:
- icon
- counter_s, counter_unfocused_s, counter, counter_unfocused
- class, iitle
- delim
- match1, match2, match3, matchN (for regex captures)
[format]
# max_clients = 10 (default: usize::MAX)
dedup = true
dedup_inactive_fullscreen = true
delim = " " # NARROW NO-BREAK SPACE
workspace = "<span color='red'>{id}:</span>{delim}{clients}"
workspace_empty = "<span color='red'>{id}</span>"
client = "{icon}{delim}"
client_active = "<span color="red">{icon}</span>{delim}"
client_dup = "{icon}{counter_sup}{delim}"
client_dup_fullscreen = "[{icon}]{delim}{icon}{counter_unfocused_sup}"
client_fullscreen = "[{icon}]{delim}"
...
See config.toml.example
and the wiki for more example, feel free to share your config !
No need to restart the applications then, there is an autoreload.
Hint: You can use glyphsearch and copy the unicode icon of your font for example https://glyphsearch.com/?query=book©=unicode
Hint: You can find hyprland class names for currently running apps using: hyprctl clients | grep -i class
, or you can also use hyprland-autoname-workspaces --verbose
.
Hint: Feel free to adapt and use this script to generate your config file. This is untested for the moment.
Hint: You can bootstrap your [icons]
with the contrib/generate_icons.py
script.
Hint: All styling param that you can use with <span>
are here: https://docs.gtk.org/Pango/pango_markup.html