aboutsummaryrefslogtreecommitdiffstats
path: root/desktop/README.md
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-10-17 09:54:18 +0200
committerDanilo M. <danix@danix.xyz>2026-10-17 09:54:18 +0200
commit66049c965139d821747ea76960b1e91316f8110a (patch)
tree45ac7a387ea02c1cc8d26e104f6e69a96d3880ed /desktop/README.md
parent4513a506fc575f880db80f05bb3a9cdf7dc100e0 (diff)
downloadquickshell-66049c965139d821747ea76960b1e91316f8110a.tar.gz
quickshell-66049c965139d821747ea76960b1e91316f8110a.zip
desktop: a settings window, and autostart as its first page
The drawer's tiles were turning into a full settings app. The drawer stays the quick area, live state and things toggled often; pages set once and left alone go to a settings window, a normal Hyprland toplevel listing them down the left. A module joins with settings: true, which also drops its tile. A gear tile and ipc call settings open|toggle reach it. Autostart edits hypr-theme's autostart.lua directly, line by line: an hl.exec_cmd line is an entry, behind -- it is disabled, everything else passes through. Edits refuse when their line moved since the parse, and writes are atomic because Hyprland reloads on every change. A wrong entry only shows at the next login, so adding is guided rather than a free text field: pick an installed app or type a command whose program must resolve on PATH before Add enables, then a workspace and silent, composed into a [workspace X silent] rule. Try runs the line through hyprctl dispatch so the rule applies as at login. Existing rows get no Try: they ran at login, and a second start stacks an instance. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'desktop/README.md')
-rw-r--r--desktop/README.md16
1 files changed, 16 insertions, 0 deletions
diff --git a/desktop/README.md b/desktop/README.md
index 092baae..3fd1cac 100644
--- a/desktop/README.md
+++ b/desktop/README.md
@@ -24,6 +24,19 @@ declared argument to be present and a defaulted parameter registers as a type
the IPC layer rejects. The page-less grid entry is therefore the zero-argument
`toggle`. `ipc call drawer close` closes it.
+## The settings window
+
+The drawer is the quick area: live state, and things toggled often. Pages
+that are set once and left alone live in a settings window instead, a normal
+Hyprland window rather than a layer surface, with those pages listed down its
+left. A module joins it with `settings: true`, which also drops its tile. The
+gear tile opens it, and so does IPC:
+
+ qs -p ./desktop ipc call settings open autostart
+ qs -p ./desktop ipc call settings toggle
+
+`open` takes a page name; an unknown or empty one opens the first page.
+
## The modules
modules/sound/ output and input volume, the OSD, the player
@@ -38,6 +51,7 @@ the IPC layer rejects. The page-less grid entry is therefore the zero-argument
modules/user/ the greeting row and the user's details page
modules/clipboard/ cliphist history: search, copy, delete, clear all
modules/git/ the global git config, opened from the user page
+ modules/autostart/ Hyprland's autostart.lua, in the settings window
Sound, mail, vm, network, bluetooth, kdeconnect and ai each carry their own README.
Appearance is a tile onto the separate appearance shell, whose README covers the
@@ -54,6 +68,8 @@ drawer needs to show it:
- `tileContent`: a `Component` for the short state line under the label, or
null for a tile that says nothing beyond its name.
- `page`: a `Component` for the full-height page behind the tile, or null.
+- `settings`: the page lives in the settings window, not the drawer, and the
+ module has no tile.
- `activate()`: what a tile with no page does when clicked.
- `alwaysActive`: declares whether the module's service is meant to run while
the drawer is closed. The drawer does not read it, the module implements its