The hull moves to the top layer, with its transparent opening and empty input
region, so windows sliding out of the opening during a workspace switch pass
behind the frame like things behind a porthole rim rather than drawing over
the bar. A layer rule keeps the bar and the rail above it on that layer.
The animation tree is redone around that: workspaces drift 18% vertically
and fade on a slow, jolt-free "drift" curve; the SUPER+S scratchpad slides in
whole from under the bar, the same gesture as the dashboard and popouts;
windows and layers keep their calm resolve and fade.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The square markers, block meters and hard-cornered fills read as boxy
next to the porthole. The desktop is now soft throughout: the porthole
is the shape everything is built around and every smaller surface echoes
it.
- Theme gains radiusS / radiusM / radiusL. radiusL is frameRadius - padS,
so anything inset padS inside one of the frame's curves is concentric
with it.
- P5Panel and Skew draw rounded rectangles (Geom.roundedRect) whenever
they neither lean nor are chopped, which is always now; the polygon
path is kept for shapes brought back on purpose.
- Markers are dots; workspace pips, toggles, transport and media chips,
notification actions and today's date are pills or discs; the slider
handle is round. Meters are one continuous rounded line that glides to
its level instead of a row of segments.
- Album art is rounded with ClippingRectangle in the bar, the media
popout and the dashboard.
- Free-standing panels (launcher, ask) drop the corner brackets and take
the frame radius.
- Fix: a hovered notification's wash was a full-bleed square, so in the
drawer's bottom corner it ran past the drawer's curve. It is inset by
padS/2 and rounded by radiusL, which keeps it inside the curve.
Hyprland: the discord special workspace and its window rule are gone,
SUPER+S stays the only scratchpad, and SUPER+D now opens the dashboard
(it was on SUPER+I).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fuzzel could only answer "which app", so launching Brave at a URL meant
picking the app, waiting for it, then typing the address somewhere else.
The launcher now takes a verb and an object in one line: type
`gitlab.enqs.de` and every app that can open it sorts to the top, default
browser first, ready for Enter — or arrow/hjkl down to Brave's New
Incognito Window, which is offered as a peer of Brave itself rather than
hidden behind a submenu.
services/Apps.qml is the brain and holds no UI: it flattens desktop
entries and their actions into one index, classifies the typed argument
(url / mail / path), ranks by fuzzy match plus handler affinity plus
frecency, and launches. Launching through `uwsm app` keeps each app in its
own scope; entries whose Exec declares no field code (Brave's
`--incognito` action, among others) are launched by tokenising Exec per
the Desktop Entry spec and appending the argument, never via `sh -c`.
Four prefixes reuse the same window, so there is one picker and one set of
keys: `>` runs a command, `=` evaluates arithmetic, `:` is clipboard
history (cliphist, which had been a second fuzzel invocation), and a
dmenu mode is driven over IPC.
quickshell/scripts/takemi-dmenu is the bridge for that last one — a
`fuzzel --dmenu` drop-in for scripts that want a picker, symlinked into
~/.local/bin. fluxo's bt menu now goes through it.
Living in the Quickshell process means the window is on screen on the
frame the bind fires, with no process to spawn.
Removes fuzzel entirely: its config, its theme submodule, the package,
and the last consumers (the bar sigil, fluxo's menu_command). Also drops
hypr/scripts/powermenu.sh, which was fuzzel-based and bound to nothing.