Remember each window's float rect when it goes fullscreen and put it back on exit,
instead of always sinking it (Viewnior after F5). Windows with no record are still sunk.
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)