| Age | Commit message (Collapse) | Author | Files | Lines |
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
The one mode button cycled all five SonixLink modes and showed repeat-off
as its first state, so shuffle looked missing. Shuffle is now a toggle on
the left and repeat a cycle on the right. SonixLink has no shuffle with
repeat one, so with shuffle on repeat goes off and all only.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 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>
|
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
|
|
|
|
|
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
|
|
|
|
|
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
|
|
|
|
|
|
|
|
|
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
|
|
|
|
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
A HiBy R1 running Sonix Player gets a boot logo editor in the settings
window, a drawer tile and page (device, playlists, folders), and an R1
icon in the island's status pill opening its playback controls. All of
it over SonixLink, plus Wi-Fi transfer for the boot logo upload.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
The header gave the clock time of the next change, which left the sum to
the reader. It now counts down, from a one second timer that lives on the
page, so nothing ticks while the page is closed. The engine still keeps
only nextAt.
The function is remaining(), not left(): left is Item's anchor line, so
the call threw a TypeError and the status text went blank, which a clean
hot reload does not show until the page is opened.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Selecting was unclear with a tile doing both jobs. A mock monitor now
plays whatever line is clicked, and a click changes nothing else; the
choice is an Active mark per line, and Random's pool a Switch beside it.
Each line shows a frame caught halfway through its transition.
MockScreen takes children, drawn on its panel.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Also how to check a shader headless: the offscreen platform is the
software backend, where a ShaderEffect draws nothing, and an end frame
check passes for every shader while proving nothing.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
A tile per transition plus Random. A click selects in the draft and plays
the real shader between the two current wallpapers, and Apply or Reset in
the header settle it, like every other draft page. Ticks are Random's pool.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Ink, shatter, ripple, melt, blinds and cross-warp. Each draws the old
picture exactly at progress 0 and the new one at 1, or the cover would
pop as it comes and goes: rendered under Xvfb with llvmpipe against the
plain pictures, all seven differ by 0 at both ends. Ripple and cross-warp
sample the new picture, the rest are transparent over it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Transitions.next() is asked once per run and the name goes out through
swapping, so both screens play the same effect, and the cover runs it
through WallShader, which the settings page's thumbnails will share.
progress is a plain 0 to 1 for every shader now; burn.frag keeps the
range it was tuned for by remapping it.
newImg gains a layer so it can be a shader's target: an Image sampled
directly gives the whole picture, not its PreserveAspectCrop crop.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Reassigned only on a real change: every page's save rereads the file, and
a new object would reset the transitions page's unsaved draft.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
A named pick plays as it is; random draws from the ticked pool and skips
what played last while anything else is there. Saved values are checked
here too, so a stale or hand-edited name lands on something playable. A
JS library rather than QML, to test it under node as Shuffle.js is.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
A managed save written by libvirt 12.0.0's default raw format restores
through an fd: migration, which QEMU 11.1.2 refuses with "migrate-incoming:
fd: migration to a file is not supported. Use file: instead." The start
then fails the same way every time, and the notification only carried
that raw error, which does not say the fix is the page's own Discard
saved state button.
A start failure mentioning migrate-incoming now leads with that advice
and keeps the raw error below it. The host side was fixed separately
with save_image_format = "sparse" in qemu.conf, which restores through
file: and was checked with a managedsave and start round trip.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
The engine's ticks are light runs: udt-accent leaves GRUB, the homepage
and SDDM on the home pair. When a tick lands on a combination worth
keeping, there was no way to promote it short of re-picking both
images by hand.
"Keep this pair" reruns wallp on the current pair without
UDT_ROTATION, so the full run brings those three along, and makes it
the engine's home, so switching the engine off does not undo it. The
timer restarts, as after a pick by hand. The button shows only while
the engine is on and the pair up differs from home, so it hides once
kept.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Any configreloaded reread the draft, so saving on the Options or
Keyboard shortcuts page silently dropped unsaved monitor edits. The
handler now goes through refresh(), which skips a dirty draft, and
revert() returns the draft to orig itself so its own reload still
rereads. The spec now says one eval per monitor and the reload after a
refusal, as built.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
The page's ScrollView took a vertical drag and cancelled the MouseArea,
leaving the monitor drawn at its offset with nothing written; it now
prevents stealing and clears the offset on cancel. A click without
movement no longer snaps. The cards are disabled while an Apply waits
for Keep, which writes the draft and so must not write untried edits.
The mode list comes from orig, which set() leaves alone, so an edit to
another field does not hand the ComboBox a new model.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Monitors drawn at logical size, fitted to the canvas; a drag moves one by
an offset and on release snaps it within 64 logical px of the other's
edges and writes an exact position. The cards set mode from the
deduplicated list, scale (read on every change, since a click on Apply
does not end editing), rotation and flip, VRR, and auto or exact
position. Leaving the page with an Apply unanswered reverts it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
"saved" now waits for FileView's saved, and a failed write shows its
error: the change is live but the next reload would bring the old file
back. Keep sets orig from the draft itself rather than relying on the
autoreload's read, apply() clears a skipRead a refusal's reload never
consumed, and an unreadable hyprctl reply says so instead of showing an
empty page.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Apply evals each monitor's hl.monitor line, one call each because eval
wraps its argument in a return. Keep writes sections/monitors.lua whole;
Revert or 15s without an answer is hyprctl reload, which reapplies the
untouched file. A refusal also reloads, since an earlier monitor's eval
may have gone through.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
The page binds the canvas to size(), and an empty or partial scale gave
Infinity or NaN and broke the fit. Apply is still held back until the
scale is a positive number. Also marks the per-axis snap as a ceiling
and checks a rotated scaled monitor and a two-monitor file.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
The Lua for a monitor and for monitors.lua, logical size, edge snapping
and the mode list, with the duplicates the ASUS reports collapsed and the
current mode matched by nearest refresh (99.943 against 99.94).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Four tasks: Mon.js with its node check, the module with try, keep and
revert, the canvas and cards, then the README and AGENTS.md. The JS in
task 1 was run from the plan and passes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
The page owns sections/monitors.lua and regenerates it whole. A change
is tried live through hyprctl eval and written only on Keep; Revert or a
15s timeout is hyprctl reload, so a setting that blanks a screen never
reaches the file.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
One section per monitor from hyprctl monitors -j, read in the same
pass as the system facts: make, model, resolution, refresh, scale,
rotation, diagonal and position. The description is left out because
it carries the panel's serial number.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|