| Age | Commit message (Collapse) | Author | Files | Lines |
|
The qtmaildir, Assistant and Ask presets pages wrote a field on Enter,
and a switch or chip the moment it was clicked, so a half-finished
change reached the file and a slip could not be taken back. They now
edit a draft as fields are typed, and a Save and Discard pair in the
page header (SaveBar, through Page.actions) writes or drops it. Save
waits while a field holds a value that cannot be written, and a draft
over a file that changed on disk meanwhile is refused at Save rather
than written over it. A dot in the sidebar marks a page with unsaved
edits; drafts survive moving between pages. The four Mail pages share
one draft, since they are one file. Tool switches are staged too and
renamed on Save; model Load, Prefer and Restart stay immediate, being
actions rather than settings.
Live editing needed two rules. A field is no longer bound to its value,
which would reset the cursor and eat a typed trailing space; it follows
the value only when the draft moves under it. And a Repeater's model is
now the set of row keys (or a count), assigned only when that set
changes: an array rebuilt from the draft on each keystroke recreates
every row, including the one being typed in, which loses its focus.
Git, autostart's rows, HyprSunset, HyprIdle and User keep their own
buttons.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
qtmaildir is configured through qtmaildir.conf alone, which it reads at
startup and never writes. Four settings pages under a new Mail group
edit it: Mail ([general], [sync], [completion]), Compose, Accounts (a
card per account, add and remove) and Tags & shortcuts ([tagcolors] and
[keys]). Fields save on Enter and unset when emptied, with qtmaildir's
defaults as placeholders and numbers range-checked; the pages say when
qtmaildir is running and a change waits for its restart.
Ini.js edits the file line by line so its comments survive. Headers are
only whole [name] lines: a section is never cut at the next "[", since
values such as [Gmail]/Bozze hold brackets, the trap AGENTS.md records.
The shortcut actions are copied from qtmaildir's KeyMap::knownActions()
rather than exported by it, since a CLI flag there would have meant
translations and a changelog entry; the field also takes free text, and
the copy is marked as a ponytail ceiling.
The settings sidebar now clips, which a list long enough to scroll
showed it did not: entries drew over the search box.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Ten pages in one flat list had stopped reading as a list. A module now
names its group, and the sidebar sorts by it and draws a small heading
where it changes: Account (user, git), Appearance (wallpaper, theme,
icons), Desktop (HyprSunset, HyprIdle, autostart) and Assistant (the
daemon, Ask presets). Groups keep the order their first page is
declared in, so shell.qml's module order still decides.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Two settings pages for desktop-assistant.
Assistant edits the daemon's config.toml: server, temperature, tool
rounds, thinking, the system prompt, and the [env] values its tools
read; a switch per tool renames tools/<name>.toml to .toml.off, which
the daemon's glob skips. The daemon reads all of it at startup only, so
the page says when a change is pending and Restart runs assistant.sh
restart, showing its status when the daemon does not come back.
The file is edited line by line, like autostart.lua, so the comments
the example ships with survive: unset keys stay commented out in place.
Every write parses the whole new file with tomllib first and replaces
the old one atomically, so no edit can leave a config the daemon will
not start with. Defaults are read from assistant.py --defaults rather
than copied into QML.
Ask presets edits the canvas's canned questions, which Prefs already
stored for exactly this page: label, question, and the kinds each is
offered for. They apply live.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
The grid is for quick settings, and the window it opened is the
opposite, so a tile for it sat wrong. The gear now sits at the right of
the user header, a round button that closes the drawer and opens the
settings window on its landing page.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
The appearance shell existed because a wallpaper picker needed more room
than the 600px drawer, so it ran as its own process with a full-screen
overlay. The settings window now gives it that room, and its five tabs
become five settings pages in the desktop process: Wallpaper, Theme,
Icons & cursor, Sunset and Idle. appearance/ is gone, and with it a
process, a keepalive window and a layer blur rule.
The files move to desktop/modules/appearance/ unchanged in what they do.
Each tab gets a small *Module.qml; the window's refresh-on-open calls the
singletons' refresh(), which the panel's show() used to. The two tabs that
were inline Components in AppearancePanel become ThemeTab and
WallpaperTab, owning the notices the panel printed. Sunset, Idle and
Icons drop their own Flickable so the page scrolls them and search can
reveal a row; the wallpaper list virtualises its rows and scrolls itself,
so it takes the page's new viewHeight instead.
Search finds a colour scheme and an icon or cursor theme by name.
The appearance IPC target moves to desktop/shell.qml with the same verbs,
so udt-steps and any keybind change only the path. Git now follows the
appearance pages and autostart in the sidebar.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
The About text sat in the top-left corner of an otherwise empty page; it
is now centred both ways in the space beside the sidebar.
The sidebar's edge, the rule between it and the page, drags to resize it
between 160 and 420px, lit in the accent while hovered. The width lives
in Prefs, written once on release rather than on every pixel of the
drag, so it survives a restart without a file to edit by hand.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Search used to stop at the page: clicking a result opened it at the top
and left the setting to be found by eye. Now each settings module keeps
its rows as searchItems, {text, key}, reread on every window open since
the page itself is not loaded until shown: git runs gitcfg list, and
autostart watches its file. A row hit opens the page, and Page.reveal()
finds the row whose objectName is the key, waiting up to 3s for the
page's own data, scrolls to it and flashes it in the accent. The reveal
lives in Page, so a page only names its rows.
Git's long keyword list was a stand-in for exactly this and is cut to
"gitconfig". The autostart page takes its path from the module now that
both read the file.
Also corrects the AGENTS note on missed hot reloads: it blamed sed -i
replacing the file, but the Edit tool writes a new inode too and usually
reloads. The cause is unknown; the note now says how to detect it and
that a process that stops watching needs a restart.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
The landing page's tiles repeated the sidebar. It now says what the shell
is and where things live, which is what a landing page is for.
The sidebar gains a search. A page is a Component loaded only when
opened, so its contents cannot be indexed without loading every page;
instead a module lists keywords for the settings buried in its page,
and the search matches those and the label. An entry matched by a
keyword shows which one, Enter opens the first match, Escape clears and
then steps out as before.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
The page header's back arrow closed the whole window, which reads wrong
for a back button. The window now opens on a landing page, a tile per
settings page in the drawer's own Tile, and back and Escape step out to
it; Escape there closes the window, as on the drawer's grid. An empty or
unknown name opens it, so the gear tile and ipc toggle land there.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
The global git config is set once and left alone, which is what the
settings window is for. The user row and its page stay in the drawer;
"More git settings" there now closes the drawer and opens git in the
window: Drawer.show hands any settings module to the window, so every
deep link, IPC included, lands in the right place.
Git was the only user of Module.up, the page back() returned to, so
up goes with it and back from a drawer page is always the grid.
Also gives autostart its rocket glyph, which the first commit wrote as
an empty string.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
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>
|
|
desktop-assistant is a text daemon now (its voice version is the tag
voice-v1), and the canvas in desktop/assistant/ is its front end.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
The island's performance icon and panel are gone: the drawer page covers
them. With only one host left, the panel drops its three-column grid for
one card per row at a larger size, since the page scrolls; temperatures
get a card of their own as tiles. The files move from island/perf to
modules/perf.
A cache card ports conky's: ~/.cache and its five largest children,
measured with du each time the page opens (28ms over 2 GiB here) rather
than read from conky's 15-minute sampler file. The largest is yellow,
red past half the total, as conky had it.
The warning dot now shows only on the drawer tile.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
The tile grid sits in a Flickable capped at three rows, so the fourth row
the new modules bring scrolls inside that box instead of eating the
notification space; a thin accent bar in the margin shows only when a row
is hidden. Tiles are reordered with the everyday ones first.
Performance shows the island's PerfPanel in a Page, with a tile line of CPU
and RAM and the warning dot. Perf.detailed is now a count of live PerfPanel
instances instead of a binding in the status pill: the island and the drawer
both host the panel, and a bool with two writers would let one clear it
under the other.
Clipboard reads cliphist when its page opens: search, copy on click or
Enter, delete per row, clear all behind a 3 second confirm, image entries as
thumbnails decoded once onto tmpfs. Entries reach sh as $1, never inside a
command string. A copy closes the drawer through a new Page.dismiss signal
the drawer connects like back.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
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>
|
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
No D-Bus module means shell-outs and no push; the daemon and the
indicator are separate; the battery plugin is not on every device; and
qdbus reads properties and methods through one call shape.
|
|
Records that the phone-to-PC clipboard is the daemon's plugin and not the
indicator's, so removing the indicator does not break it, and that polling
stops when the drawer closes.
|
|
|
|
The native backends start empty for about two seconds, device lists are
ObjectModels, NMSettings is not in QML scope, and quickshell has no BlueZ
agent. Each one cost a probe to learn; writing them down is cheaper than
re-learning them.
|
|
|
|
|
|
|
|
|
|
The README claimed a click outside returns to the grid; it closes the
drawer, and only Escape-with-a-page or the back arrow return to the grid.
The three moved module READMEs' run and IPC commands still named the
deleted volume-osd, mail-overview and vm-manager paths, so point them at
qs -p desktop and ipc call drawer open sound|mail|vm.
|
|
Five components become three, and the Theme symlink count with them. Two
new notes: a pragma Singleton in a subdirectory resolves through a plain
directory import with no qmldir, and Virsh.sampling gates only the stats
poll, not the lifecycle stream that keeps the tile correct while the page
is closed.
|