Signal 8.x sets its WM_CLASS to lowercase "signal", so the case-sensitive "Signal" rule no longer matched. Merge it with the discord rule into a case-insensitive classIn.
Hourly timer started from xmonad, plus UI hooks that sync before load and after exit. calcurse-sync notifies once when the OAuth login expires and restarts the daemon after imports, since it never re-reads its files.
The calcurse daemon only alerts timed appointments, so birthdays went unnoticed. A daily 09:00 timer, started from xmonad and persistent across suspend, sends today's events through notify-send.
Workspaces show only their icon, layouts show an icon instead of their name, and window titles share a 60-character budget (8–30 each), so more windows get shorter titles instead of overflowing the bar.
All keys get descriptions (NamedActions) and M-F1 lists them in dmenu. Proton
and Wine games go to ws 3 by class prefix/suffix instead of one rule per game;
GIMP and Audacity go to ws 5; small tools float; new icons for ws 2-7.
screen-lock holds notifications until unlock, and M-S-l now goes through
loginctl lock-session so it uses the same locker. M-S-n pops dunst history,
M-C-n closes all notifications.
Run playerctld as a dbus unit with Restart=on-failure, start it through that
unit on D-Bus activation, tie mpris-proxy to it, and bind the XF86 media keys
to playerctl in xmonad.
vidthumb names thumbnails by a hash of path, size and mtime instead of a jq index that broke on quotes in filenames; systemd-tmpfiles removes ones unused for 30 days. discover-overlay-wait now runs from a systemd user unit started by xmonad and logs to the journal.
Wine games lose the mouse when their window moves between screens. safeView replaces greedyView for mod-N, xmobar clicks and mpv so workspace 3 always opens on screen 0 and is never swapped away; safeRescreen keeps a hidden workspace 3 off the laptop screen when screens change.
killAllStatusBars only kills the PIDs xmonad has stored, and bars that dropped off that list
kept running after M-q and movie, leaving a laptop-config bar on HDMI. pkill -x xmobar
catches them all.
Clicking a workspace switches to it; one visible on the other screen is
swapped onto the focused screen. xmobar uses UnsafeXMonadLog so the
click actions are kept.
discover-overlay's windows are override-redirect, so XMonad doesn't
manage them and raising a floating window (e.g. a game) covers them.
Raise them again from the log hook after every change.
- Raise volume with wpctl, capped at 100%
- Define workspace names once instead of repeating the strings
- Remove unused imports and the never-matching transmission-gtk rule
- Add missing type signatures
- Document why the isFullscreen rule is needed alongside ewmhFullscreen
- Match scratchpads by WM_CLASS instead of title, so they no longer
get shifted to workspace 1 or lose track of their window
- Spawn one xmobar per connected screen (dynamicEasySBs)
- Pick the xrandr layout and tray monitor based on whether HDMI is
connected, and re-run it on monitor hotplug
- Don't let one failed startup step block the rest
- Make the startup command safe to re-run (no duplicate trayer/picom)