| Age | Commit message (Collapse) | Author | Files | Lines |
|
Quickshell exits once no window is visible. The OSD is hidden between
changes, and with no MPRIS player running there is nothing else to hold
it open, so the process loaded cleanly, logged no error and quit. The
symptom was a panel that never appeared: not a blank panel, a dead shell.
A 1x1 transparent window with an empty mask keeps it running. The mask
makes it click-through, so it cannot catch a stray click, and it draws
nothing.
This window existed earlier and was removed after a process check that
was measuring the wrong thing, which made it look unnecessary. The
README now says why it is there, so it does not get removed a third time.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G7NRsGyF9jGfPYS4zPqpN7
|
|
The OSD gains a track row above the volume bar when an MPRIS player is
running: album art, title, artist, and prev/play/next. With no player it
is the volume OSD it was, at the same size. A track change or a
play/pause shows the panel as well, so the row is not something you only
see by happening to touch the volume.
Hovering freezes the fade so the buttons can be clicked and leaving
restarts it, which keeps the passive behaviour intact for anyone not
reaching for the mouse. The panel still takes no keyboard focus.
playerctld proxies whichever player is active and republishes it under
its own bus name, so every player is enumerated twice. Player.qml drops
that name rather than deduplicating by identity, and controls the real
player, which works whether or not playerctld is running.
Album art is loaded with cache off and a per-track suffix on the URL.
Audacious extracts embedded art into one temp file in its cache and
rewrites that same path for each track, so the URL repeats while the
image changes, and a cached Image would keep showing the last cover.
Theme gains overlay, used by the art placeholder.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G7NRsGyF9jGfPYS4zPqpN7
|
|
Both components had their own copy of the Macchiato colours, and the
second copy appeared the moment there was a second component. Editing the
palette meant editing it in as many places as there were shells, and they
would have drifted.
They now read ~/.cache/wal/udt-palette.qml, which udt-accent generates
from unified-desktop-theme's palette.rasi. The file is watched, so a
palette change reaches a running shell in place, the same way the accent
already did.
What is left in Theme.qml is a fallback, used before the file has been
read and on a machine where unified-desktop-theme is not installed, which
is what keeps each directory runnable on its own.
The file is parsed rather than imported: a generated QML singleton cannot
be imported without a qmldir beside it, and the wal cache has no reason
to carry one.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G7NRsGyF9jGfPYS4zPqpN7
|
|
Scaffold the repo that will hold quickshell implementations, each in its
own directory with its own README, and add the first one.
volume-osd shows an on-screen display for output and input volume. It
watches PipeWire through Quickshell's native service rather than polling
wpctl, so it appears for any volume change, not only for the keybinds:
pavucontrol, a per-application slider, or a phone acting as a remote.
One widget serves both directions, showing whichever device moved last.
Colours follow unified-desktop-theme: Catppuccin Macchiato fixed, with
the accent read from the file udt-accent already writes and watched, so
it tracks the wallpaper. Lavender is the fallback, which keeps the
directory runnable where that file does not exist.
The frosting is the compositor's: the panel draws translucent and
Hyprland blurs behind it via a layerrule matched on the window's
namespace. That avoids a MultiEffect and an offscreen blur pass in QML,
and degrades to flat translucent without the rule.
Two details are documented in the component README because both were
wrong before they were right: PwObjectTracker is required or the volume
reads stale, and a node reports its initial volume before `ready` goes
true, so the ready check alone suppresses the startup values. An extra
guard on top of it ate the user's first keypress instead.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G7NRsGyF9jGfPYS4zPqpN7
|