---
title: "2025-08-17 Notes"
description: "After a long time I begrudgingly setup window rules for hyprland. What I wanted was the ability to log out and jump back into work with a freshened work..."
date: 2025-08-17
published: true
template: daily
---


After a long time I begrudgingly setup window rules for hyprland.  What I
wanted was the ability to log out and jump back into work with a freshened work
space.  Right now I'm running on low ram and disk on hyprland and sometimes I
need to just quit everything and get back to work quick.  So I setup exec-once
to start my terminal, browser, and chat.  These are my main applications that
run on my power fingers 456 (which are on a layer that present under jkl).  I
use them every time I log in and will need them no matter what I do.  When I
exec once them, they just dump onto one workspace, you can pick it but no
matter the timing, you end up with race conditions that end up with you on
different workspaces.

So I setup window rules.  I avoided this for a long time, because of my
workflow on awesomewm, I thought this manual workspace selection was superior.
What I really think happened was that awesomewm was a little trickier for me to
figure out what things were named and to actually get the rules setup
correctly.

hyprland makes this pretty simple with its great cli.

``` bash
hyprctl clients -j | jq | grep class
```

Now that I can see attributes of these windows as I open them I can set up
rules for them to go onto the correct workspace, or to float them.  I have a
couple of things like a file picker coming from a browser showing up in the
tiled layout, when a file picker like this shows up, just cover everything up
its temporary, no need to squeeze it into the tiled layout.

> the file picker float also fixed an issue I had where they would not show up,
> and lock up brave when its in full screen mode and I don't realize it.

``` conf
windowrulev2 = workspace 1, class:^(steam)$
windowrulev2 = workspace 4, class:^(kitty)$
windowrulev2 = workspace 5, class:^(firefox)$
windowrulev2 = workspace 5, class:^(brave-browser)$
windowrulev2 = workspace 5, class:^(google-chrome)$
windowrulev2 = workspace 6, class:^(Signal)$
windowrulev2 = workspace 2, class:^(krita)$
windowrulev2 = workspace 8, class:^(brave-chat.openai.com__-Default)$
windowrulev2 = workspace 8, class:^(brave-youtube.com__-Default)$
windowrulev2 = float, class:^(org.pulseaudio.pavucontrol)$
windowrulev2 = workspace 9, class:^(org.prismlauncher.PrismLauncher)$
windowrulev2 = float, class:^(org.prismlauncher.PrismLauncher)$, title:^(Console window.*)
windowrulev2 = float, class:^(xdg-desktop-portal-gtk)$
```
