diff options
| author | Danilo M. <danix@danix.xyz> | 2026-10-07 19:13:16 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-10-07 19:13:16 +0200 |
| commit | a55464e179a3f82aa46866564878ad35e11e0ae5 (patch) | |
| tree | 7e604416cb2c6c1a22f633a8dc6158d4d30d7e1f /AGENTS.md | |
| parent | fe80b03136a141fb6832474e7dd6dc0ba822e454 (diff) | |
| download | quickshell-a55464e179a3f82aa46866564878ad35e11e0ae5.tar.gz quickshell-a55464e179a3f82aa46866564878ad35e11e0ae5.zip | |
docs: the island, and waybar gone
AGENTS.md describes the hybrid model (desktop/ hosts drawer and island) and
gains the gotchas found while building the island: UseQApplication for tray
menus, WheelHandler vs MouseArea, accent colliding with green, xkb layout
switching, and the tray popup un-hovering the island. The Blur waybar
measurement becomes history. READMEs drop their present-tense waybar
references.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'AGENTS.md')
| -rw-r--r-- | AGENTS.md | 57 |
1 files changed, 45 insertions, 12 deletions
@@ -4,16 +4,20 @@ Guidance for agents working in this repository. ## What this is -Quickshell components for a Hyprland desktop, one per directory, each a -complete shell in its own right. They are not modules of a single bar: any of -them runs alone, and running one does not require the others. One of them, -`desktop/`, is itself a host for modules. +Quickshell components for a Hyprland desktop. The repo is a hybrid: `desktop/` +is the integrated process, hosting the parts that need to talk to each other, +the drawer and the island now and a control panel later. The other directories +stay separate shells, each complete on its own: any of them runs alone, and +running one does not require the others. `desktop/` is itself a host for +modules. desktop/ the drawer: sound, mail, VMs, appearance + island/ top-centre pills on DP-1: clock, volume, tray, layout, privacy appearance/ wallpaper picker and colour scheme switcher window-switcher/ open windows as live previews in a grid, on ALT+TAB keybinds/ live keybind reminder, on SUPER+k assistant/ overlay for the voice assistant, fed by its event socket + notifications/ balloons for the notification daemon's published files They are started from `~/.config/hypr/sections/autostart.lua` and keep running for the whole session. @@ -122,6 +126,28 @@ changing that component. The ones that generalise: `--name`, which is the form the panel lists with, so detection is `virsh dominfo <vm>` grepped for `Managed save: yes`, polled per VM the way the agent rows are. It measured 6ms. +- **Tray menus need `//@ pragma UseQApplication`** at the top of the root QML + file. Without it `SystemTrayItem.display()` only logs a qCritical ("not + started in QApplication mode") and nothing opens. Pragmas are read at launch, + before the first import, so adding or changing one needs a restart, not a hot + reload. `desktop/shell.qml` carries it. +- **A tray menu is a separate popup, and hovering it un-hovers the island.** + The pills lose the pointer, so the hide timer would close the island under + the open menu. `display()` reports no close, so the island holds itself shown + after it until the pointer returns (a ponytail ceiling in `Island.qml`). +- **A `WheelHandler` on an `Image` inside the island's status pill never + fired**; `MouseArea { onWheel }` in the same place works, and `SoundPage` + already used it. Prefer `MouseArea.onWheel`. +- **udt can snap the accent to the same colour as a palette colour used for + meaning.** Measured: accent and green were both `#36d190`. The island's idle + sliver is therefore `Theme.overlay`, never the accent; anything that signals + state by colour must not use the accent as its neutral. +- **`hyprctl switchxkblayout current next|prev` targets the main keyboard**, so + no device lookup is needed. Hyprland's `activelayout` raw event fires on + every switch, so the layout flag is event-driven rather than polled. +- **Waybar is gone, both bars.** Its DP-3 functions moved to the island. The + mail count is drawer-only: `Accounts.qml` watches the xapian directory + itself, and `waybar-mail.sh` was deleted. - **Hyprland 0.56.2 evaluates dispatch arguments as Lua.** `dispatch focuswindow address:0x...` is a syntax error rather than a command, and it fails silently unless stderr is read. The working form is `dispatch @@ -296,6 +322,11 @@ keeps the palette parsed rather than imported; quickshell follows the link and resolves the singleton with no qmldir and no consumer change. Editing any component's `Theme.qml` edits all three. Do not replace a link with a copy. +`shared/Workspaces.qml`, the workspace icon map, is linked the same way, from +`desktop/` and `window-switcher/`, so the island's flick and the switcher's +cards show the same icons. `Status.qml` and `Notify.qml` are shared links too. +Hot reload does not follow any of them (see Reloading). + Glyphs are Nerd Font private-use codepoints and render with `Theme.iconFamily`, pinned to Inconsolata Nerd Font, not `Theme.fontFamily` ("Noto Sans" has no glyphs). Without the pin, fontconfig falls back per codepoint and the same @@ -314,16 +345,18 @@ frosting needs its own `hl.layer_rule` and a distinct `WlrLayershell.namespace`. Without the rule it still works, rendering flat translucent. -A panel that should sit below waybar rather than over it wants -`exclusionMode: ExclusionMode.Normal` on its window, which respects waybar's -exclusive zone without the component knowing the bar's height. Measured with -`hyprctl layers`: waybar at `y=-540 h=42`, a `Normal` overlay on the same -screen at `y=-498 h=1038`, starting exactly where the bar ends, so the -backdrop never dims it. The `desktop` drawer does this; components that cover -the whole screen use `ExclusionMode.Ignore`. +History: a panel that should sit below waybar rather than over it used +`exclusionMode: ExclusionMode.Normal`, which respected waybar's exclusive zone +without the component knowing the bar's height. Measured with `hyprctl layers` +while waybar existed: waybar at `y=-540 h=42`, a `Normal` overlay on the same +screen at `y=-498 h=1038`, starting exactly where the bar ended, so the +backdrop never dimmed it. Waybar is gone, so the `desktop` drawer now starts at +the top edge of DP-1 and keeps `Normal` so a bar added later is respected. +Components that cover the whole screen use `ExclusionMode.Ignore`. `window-switcher` has namespace `quickshell-window-switcher` and a -`blur-window-switcher` rule of its own. +`blur-window-switcher` rule of its own. The island has namespace +`quickshell-island` and a `blur-island` rule. ## Reloading |
