aboutsummaryrefslogtreecommitdiffstats
path: root/AGENTS.md
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-10-07 19:13:16 +0200
committerDanilo M. <danix@danix.xyz>2026-10-07 19:13:16 +0200
commita55464e179a3f82aa46866564878ad35e11e0ae5 (patch)
tree7e604416cb2c6c1a22f633a8dc6158d4d30d7e1f /AGENTS.md
parentfe80b03136a141fb6832474e7dd6dc0ba822e454 (diff)
downloadquickshell-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.md57
1 files changed, 45 insertions, 12 deletions
diff --git a/AGENTS.md b/AGENTS.md
index d81c83c..a6fb434 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -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