| Age | Commit message (Collapse) | Author | Files | Lines |
|
deck-it gained a K1C printer tab, read through Moonraker at [k1c] url.
The page edits that key, and its module switch appears with the others
from deck-it's defaults.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
A page under Desktop for deck-it's ~/.config/deck-it/config.toml and its
login line. deck-it now merges that file over its shipped config key by
key, so the page writes only what differs and takes its placeholders
from `deck-it defaults` rather than copying them.
- Start at login edits hypr-theme's autostart.lua at once, as the
Autostart page does, through Autostart.js: it re-enables a commented
deck-it line or adds `deck-it wifi --wait`; off comments them out.
- Every config key, with launchers picked from the installed apps (desktop
ids, reorderable) and module switches built from the defaults.
- A status line polls `deck-it status` every 2s while the page is open;
Restart runs `deck-it stop` and the login command, then reports
"Restarted" once the server runs with a tablet tunnelled, or what it
saw after 30s.
Shared helpers it needed: Toml.js reads plain decimals (the display
scale), Store keeps a list of numbers numeric (the workspaces), and
ChoiceSetting takes a store as Setting and BoolSetting already do.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
deck-it creates a headless TAB output at runtime and places it itself,
centred under DP-1. Listed on the Monitors page, Apply would reposition
it and Keep would pin it into monitors.lua, where it would outlive the
tablet. Mon.js's UNMANAGED drops it from the page entirely.
The list is fixed: deck-it's display.name can rename the output, and a
renamed one shows up here again (a ponytail ceiling, noted in Mon.js).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Autostart.add inserted before the file's last `end)`. Since
autostart.lua gained a hyprland.shutdown hook after the start hook, a
command added from the Autostart page landed in the shutdown hook and
would have run at logout instead of login. It now inserts before the
`end)` that closes `hl.on("hyprland.start", ...)`, and returns null when
there is no start hook. The test covers a file with both hooks; it fails
on the old code.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
With 23 schemes the page was a long scroll. Cards now flow into as many
columns as fit at 380px, the width the mock and seven swatches need.
Search still finds a card by objectName and scrolls via mapToItem, which
a Flow does not change.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
SonixLink's browse lists only folders and playable files, so Bootlogo or
Ebook read as empty. The Folders tab now says so and links to Wi-Fi
transfer.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Save, apply and upload results went to the page header, one line capped
at 420px and cut with an ellipsis. They now go to a snackbar at the foot
of the settings window, wrapped in full: green fades after 6s, yellow and
red stay until dismissed or replaced, and changing page clears it.
Snack.qml is the singleton pages call (ok, wait, error); Snackbar.qml
draws it once in Settings.qml. SaveBar forwards its notice and error, so
the 24 pages using it change nothing; the header keeps only the draft's
state. The boot logo page calls Snack directly.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Upload saved... picks a PNG or JPEG from the output folder and sends it
through the same path as Upload, waiting for Wi-Fi transfer as well.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
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 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 Haiku 5.5 <noreply@anthropic.com>
|
|
|
|
Co-Authored-By: Claude Haiku 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>
|
|
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>
|
|
local-chat (llamachat) is archived and uninstalled, superseded by
desktop-assistant, so its row could only ever read stopped and its
buttons called a command that no longer exists. Also folds the control
comment that described llamachat's restart dance down to one line.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
breaktimer is parked and imggen and fanfictioner are archived and
uninstalled, so the shell was reading files nothing writes and offering
buttons that call commands that no longer exist.
Status: remove the bt* properties, the file watchers behind them, the
verb runner and the presentation-mode pause/resume. The status page loses
BreakRow and the tile falls back to "All clear".
AI: remove the imggen and fanfictioner rows from ai-state.sh, their
labels and controls, and the pid-based fanfictioner stop. The sd-cli
engine row stays, since the wallpaper upscaler uses sd-cli too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
A staged wallpaper smaller than its screen (yellow or red border) gets an
"Upscale 4x" button. It rewrites the file with Real-ESRGAN through
stable-diffusion.cpp's `sd-cli -M upscale`, keeping the name, so wallp's
state and the engine's lists, which name it by path, still find it.
sd-cli writes to a dot-named sibling the scan skips, and only a
successful run is moved over the original.
Success needs no [E] line as well as exit 0: with a model that fails to
load, sd-cli logs "[E] new_upscaler_ctx failed", saves the input
unscaled and exits 0 (measured).
The button takes two clicks so the model choice shows before anything is
rewritten. The first runs Imajev-4B, a small Jev-style vision decision
model, through llama-mtmd-cli on a 512 px thumbnail, with a grammar that
allows only A (anime) or B (photo or render); greedy decoding then
returns the higher-logit option, about 1.7 s. The label becomes
"Upscale 4x (anime)" or "(photo)", and the second click upscales with
the anime or the general model. Anything but A, including a failed
decider, picks the general model, safe on any image.
Imajev-4B was chosen by measurement on 22 wallpapers: all 12 anime and 4
photos right, 4 of 6 painted 3D renders called anime (those come out
smoother than painted). The 2B got 17 of 22, leaning to photo; a
three-way prompt adding "painted or render" dropped both to 15 or
fewer, with most anime called painted.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
The appearance README gains the burn (the cover, the covered()
handshake and why, the shader cache trap) and the engine (sources,
shuffle, light run, homes, the draft page, where its state lives and
what starts it). The spec records what changed while building it: Prefs
instead of list files, a page of its own, folder sources, the header
buttons, the cover handshake.
AGENTS.md gains the Field.edited trap, which applies to every page with
a field and a button: a click does not end editing, so the value a
button acts on must be read on every change.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
A brief flicker was left at the start of the burn on both screens. The
cover drew each picture as soon as it decoded, and the new one, under
the old, usually decodes first, so it showed for a frame or two before
the old one covered it. Both now stay hidden until both are ready; the
surface is clear until then, and swaybg underneath is still showing
the old picture, since wallp waits for covered().
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|