Skip to content

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 02 Nov 05:31
· 107 commits to master since this release

Changes for users

  • max-attempts and show-failed-attempts are no longer greeter apply keys. The greeter never read them.
  • ld-* icons are lys-shell's own and can no longer be overridden by an icon theme.
  • A modules.bitwarden server on plain http:// off this machine now gets a config diagnostic.

apptest

  • run an application on a private sway for any test, not only key tests (a34c9cc)

auth

  • the lock screen unlocks lys-secrets' login collection (bab7908)
  • PAM login sessions and the greetd protocol's server side (bea19b2)

bar

  • the dropdown frame is lys-ui's popover, item and metrics (e6a5151)
  • the bluetooth dropdown is lys-ui's sections, item cards and code input (4f2a773)
  • the network dropdown is lys-ui's sections, items and form cards (d416f36)
  • the audio dropdown is lys-ui's items over sliders (5a0a42c)
  • the battery dropdown is lys-ui's typography, alerts and segments (af44c3a)
  • the battery labels take their size from their classes (1893d89)
  • the brightness dropdown is lys-ui's items over sliders (4da35d1)
  • the mail dropdown is lys-ui's items and badges; dropdowns cap at their width (06a5e84)
  • the recorder dropdown is lys-ui's item cards and button content (6ce39f4)
  • the treeman dropdown is lys-ui's cards, items and badges (0622de1)
  • the notification dropdown is lys-ui's cards, items and buttons (9a27c97)
  • dropdown text is lys-ui's text size (15afe75)
  • the calendar dropdown takes lys-ui's typography and spacing (cbc1091)
  • the weather dropdown is lys-ui's cards, items and status pages (180708e)
  • the dashboard dropdown is lys-ui's cards, typography and items (91d26d6)
  • the media dropdown is lys-ui's header, buttons and items (085b329)
  • the bitwarden dropdown takes the shared spacing and cards (bbfb35b)
  • a dropdown opens at lys-ui's popover gap, not inside margins (7ee3f75)
  • services that start after the shell bring their modules back (00f5cb5)
  • the network dropdown test drives its view on the loop (a65858b)
  • the bar is lys-ui's Bar in its bar window (2200a25)
  • module buttons are lys-ui's BarButton (b484f70)
  • a module button stays checked while its dropdown is open (59ddebb)
  • dropdowns open on lys-ui's side of the bar edge (40bfea0)
  • the separator module is lys-ui's BarSeparator (1387342)
  • a module button shows lys-ui's BarButton icon and label (e6c754a)
  • the workspaces are lys-ui's SegmentIndicator (6ac7e55)
  • the workspaces and block-prefix lean on lys-ui 35e7374 (7fab270)
  • a network's signal and a device's battery read as rings (4ed5236)
  • a ring's glyph takes the extra-small icon size so it clears the track (e196265)
  • the modules follow lys-wm through its IPC (3dd2566)
  • icons take their logical size once on scaled outputs (d548282)
  • rebuild bars in place on a config reload, make-before-break otherwise (d996690)
  • toggle exclusive in place, drop the make-before-break path (589eda7)
  • compositor-free tests hide every compositor socket (0c8f545)
  • read the screenshot selection back through wl-paste (0b1cc78)
  • hand the session cursor to lys-login with record-cursor (c367d3c)
  • the vault fake serves lys-secrets' write and Send methods (295921a)
  • volume and microphone appear once a default device exists (611c5a4)
  • service-backed modules log a failed re-render instead of dropping it (f15465b)
  • the polling modules share a wall-clock grid and wake together (8477b6e)
  • logout on a server without revocation is no error; the recorder says it has no state dir (1ecae19)

bitwarden

  • a launcher vault mode searches the vault from anywhere (f606730)
  • password and passphrase generator core (5042f2e)
  • generator presets in the dropdown, config and settings (bf68906)
  • a live verification code, cleared from the clipboard at expiry (c57cd83)
  • notify a failing periodic sync and a forced logout (819dce6)
  • the vault widget, launcher and network agent over lys-secrets (161987d)
  • an opt-in unlock-with-session setting for the lock screen (6821f51)
  • Sends in the dropdown (e14f446)

bluetooth

  • a timed scan the adapter already ended is left alone (f351f40)

brightness

  • lys-shell brightness <+N|-N|N> on the focused or a named output (b9d1c74)
  • drift looks with one pread and tells nobody when nothing moved (59cf79f)
  • enable-external follows a reload (cde5c71)

calendar

  • the month grid fills the dropdown's width (5fbbe4b)

capture

  • the frozen frames are still images (lys-ui 0a60ea3) (8c680f4)

cava

  • analyze each frame without allocating (942db10)
  • a silent module parks instead of painting 60 frames a second (22dc792)
  • the FFT gives the same bits on every architecture (026ed9b)

ci

  • every action on its latest release (15a0aa1)
  • every action pinned to a commit, checkouts without stored credentials (1d5f081)
  • Dependabot Go bumps refresh vendorHash through lys-ci (#141) (2d70ac2)
  • documentation commits do not run the code gates (6964809)
  • build, test and release arm64 (87e2cd4)

CLAUDE.md

  • the build makes pure-Go binaries, not static ones (62746d3)

clipboard

  • history bytes bounded and off the Go heap (e2183b7)
  • stream received selections off the heap with ReadTo (b0dc738)

clock

  • wake when the text can change, not once a second (4eeb8a4)

config

  • a dropdown height takes pixels only, and says so when it does not (0d96bb7)
  • a size that is neither a multiplier nor pixels fails to load (1293656)
  • the recorder writes MP4 and MKV only (ad2f275)
  • the schema generator writes the committed form itself (a11d80a)
  • pin that the default lock commands lock the display session (09824d2)
  • bound lock.blur to 0-1000 (1cbe195)
  • one login section for the greeter and the lock screen (61c4e90)
  • the greeter reads its system config without creating it (562f0ac)
  • build the module defaults once for the button views (6f0af3e)
  • the greeter is not pushed failed-attempt keys it does not read (f15621d)
  • DocSection.ArrayEntry describes YAML, not TOML (f41abe9)

cursorrecord

  • record the session's cursor for the greeter (f0f65e4)

custom

  • a module's commands stop whole, children included (025f9b2)

dashboard

  • the system stat gauges are lys-ui's ProgressRing (dc4c4f0)

dbus

  • build on lys-lib's godbus fork, dbusx and dbustest (0c6738a)

dbusx

  • writable properties, and introspection built on demand (8bb82e1)

dependabot

  • docs dependencies, and one PR for the theme's two pins (8352579)

deps

  • lys-ui 392a3fc (ba68918)
  • lys-ui a080561 (9cb7cdc)
  • lys-ui e97de6e; the active card hides its rows again (bff7d70)
  • lys-ui 0ee5c56 (87900c1)
  • lys-ui e402f9a (0b50eb9)
  • lys-ui bf0ac6b (7607f51)
  • lys-ui 5a2c01e (paint speed, bounded resample, key repeat) (aaf4f5a)
  • lys-ui 469b27a (scratch pool by capacity, direct image reads) (f41bf34)
  • lys-ui 31955c6 (dropdown edges follow their spring) (f1b56e2)
  • lys-ui 9a13386 (a long path wraps inside its notification) (bd1026b)
  • lys-ui a79e3a4 (the GPU path is the cheaper one) (7c9f96e)
  • lys-ui df34597 (rotated icons draw natively on the GPU) (a954ae3)
  • lys-ui 8082c9e (gradients native, GPU matches CPU exactly) (5451d31)
  • lys-ui 5d48adb (GPU survives device loss, partial repaints exact) (6e410cd)
  • lys-ui 2963235 (brightness rounds as the GPU does) (45c4bca)
  • lys-ui bf58a9d (GPU crash fix) (1dc6775)
  • lys-ui 59c315c (switches animate, popups on the GPU, bar-less scrolls use the full width) (f4fef07)
  • lys-ui ca7fd5f (dropdowns shrink to their row and ellipsize) (d8eb6b4)
  • lys-ui 6bc3001 (pick lists fit their rows, the selection's heading shows on open) (44604ff)
  • lys-ui 12928d5 (images stay GPU textures) (d490413)
  • lys-ui 2b53779 (popups open on the roomier side, grids reveal their selection) (4d80431)
  • lys-ui 7d78079 (idle popovers stop repainting) (057aca9)
  • lys-ui a356c4b (hover no longer restyles the whole window) (b046703)
  • lys-ui a581882 (a popover's shadow gutter hovers nothing) (0862e3d)
  • lys-ui ccac65d (tiles and swatch checkerboards draw on the GPU) (d84c78c)
  • lys-ui 7b8ca90 (gpu.OpenNode: exportable dmabufs on a chosen render node) (370e803)
  • lys-ui ca33931 (Pile, SwipeDismiss, glass on transparent hosts) (07bd5e7)
  • lys-ui 3aca555 (refract on the GPU, focus keeps its visibility, Pile peeks scale and fade) (89ae708)
  • lys-ui 410edfc (a swiped glass card no longer darkens its surroundings) (fb727db)
  • lys-ui 48e5852 (H.264 encoder, Opus encoder, MP4/MKV muxers, cached readbacks) (6fc8910)
  • lys-ui c21334f (encoder overlay, encoding below the minimum coded size) (8ff9c73)
  • lys-ui f97cb94 (Opus VBR and transient coding) (d60e769)
  • lys-ui 32e4b68 (Mesa audit: primary-node match, exportable modifiers proven, core barriers) (ce99c9f)
  • lys-ui c74158f (concurrent Vulkan devices no longer crash; encoder crop and rotation) (e558b54)
  • lys-ui 1c84923 (codec rejection reasons, CPU-fallback log) (68a86cb)
  • render, GPU and capture come from lys-lib (2e44d7c)
  • PipeWire, EIS, sockdir and clib come from lys-lib (5612295)
  • lys-lib cb73840 (VA-API encoding, Encoder.Backend) (5775b2a)
  • lys-lib 4dd7053 and lys-ui 451c306 (both on go 1.27.3) (c42d829)
  • GStreamer and GLib leave the package, the docs and the dev shell (375a43c)
  • the packages and docs stop asking for libpipewire (5a81189)
  • libva for the recorder's VA-API encoder (e70bad7)
  • dmabufprobe, v4l2 and audiomix come from lys-lib (43cb8e7)
  • Dependabot keeps the Go modules and the workflow actions current (ddcdf40)
  • lys-ui 40a8bda and lys-lib 64b52f3, the flake's lys-lib input with them (df9d5ce)
  • bump the all group with 7 updates (#86) (cd8995b)
  • lys-ui 9be47c1, whose SetFocus reports a refused focus (e489f87)
  • lys-ui 92768be and lys-lib 62f7109 by just bump-lys (d1e90ac)
  • lys-ui f241d2f and lys-lib c12a4ac, the vendored wayland bindings (2953c32)
  • lys-ui 64cc3ea, the GPU renderer on the compositor's device (ae88c08)
  • lys-ui a6f40c2 and lys-lib acfb75c, the overlay gives way (e61d7f3)
  • bump lys-ui and lys-lib to main (f534251)
  • bump lys-ui; the chooser's tests lay out once (454869a)
  • bump lys-ui to 99735cc (a112346)
  • lys-ui c1a464a, the indexed icon theme lookup (f035e2f)
  • lys-ui ebc469d (fe94056)
  • lys-ui 76852bc (49303a5)
  • lys-ui aeca14d, popovers open without a whole-window restyle (6028dfa)
  • lys-ui 92d907d and lys-lib 3dc3050, one Vulkan driver loaded (a41ca6f)
  • lys-ui 541b38d, idle spare buffers released (d79c9c5)
  • lys-ui 894b602, popups repaint only what they owe (c5c1682)
  • lys-ui 342bdbb, widget nodes a third the size (5688ce8)
  • lys-ui 06642b9, lys-lib 2236ab4 and memory-go 8b116b9 (15728e6)
  • lys-ui b21f600 and lys-lib 0ad7ba8, staging shrinks after peaks (03a95bb)
  • memory-go v0.3.0, lys-ui 37171c9 and lys-lib 77eb3c9 (5459ca5)
  • lys-ui d9a9a7f and lys-lib b17d150 (2cab857)
  • lys-ui 9ffc99b, fallback faces load on demand (c1e0bcc)
  • lys-ui 0915f20 (5a81d9e)
  • lys-lib 6ab24e3, every received fd reaches its event (83f82bf)
  • lys-lib b40c8aa and lys-ui 0cae526 (3f81ead)
  • lys-lib f6074bf and lys-ui c648784 (9d16e19)
  • lys-lib 5ff5256, gamma- and CTM-control bindings (19e23b1)
  • lys-lib e10e9a0, golang.org/x/net v0.62.0, modernc.org/libc v1.79.1, flake inputs (17854b8)
  • lys-ui 58eaf38, lys-lib 68a67a2, lys-secrets b3d9628 (729e39d)
  • lys-secrets ae62fe1 (be8541e)
  • update every module to its latest (d2985de)
  • lys-ui 64f8c3c, CSS animation drives no longer orphan (e1ceb22)
  • lys-ui 9e6c634, lys-lib 8d724da (69b0a7b)
  • lys-secrets e618292 (1c61f51)
  • lys-ui 11461fb, so closed surfaces give their pixels back (630bef1)
  • lys-secrets ad14764 (6aa739f)
  • lys-ui 3cdbc72, lys-lib 24455db (14e906b)
  • lys-ui 6b8586f, lys-lib 0d4d7a5; measure a dismissed picker's pixels once presented (a5ca067)
  • lys-ui 3fd2357; assert the idle share picker draws nothing (543b765)
  • lys-ui a72686b; the idle picker check runs in the package's process (e69b0b6)
  • lys-ui 705e2fa, lys-lib 247ea81; closed windows are freed (22af210)
  • bump the all group across 1 directory with 2 updates (69a9180)
  • memory-go v0.5.0 (7e3afe9)
  • lys-lib 71c054b, lys-ui 2c2dfa4, lys-secrets 4d8494b (1ac1c2f)
  • lys-lib 91f5815 (6d9ec0a)
  • lys-lib d927467 (f28a03d)
  • lys-lib's flake, for a dev shell that evaluates on aarch64 (b9ed6d0)
  • lys-lib 6595d87, lys-ui 063b0c5, lys-secrets f73553c, docs: lys-docs-theme v0.1.1 (95670b5)
  • gonum goes with the copied FFT (101eb79)

desktopentry

  • scanning every application lists PATH once (86277f3)

dialoghost

  • the Authenticate dialog for lys-polkit; lys-lib and lys-ui at main (22b8c70)

dialogs

  • portal and print dialogs are lys-ui's Card (6f65afb)

direnv

  • load a local .env when one exists (7bfe018)

dmabufprobe

  • the modifier probe the portal and the recorder share (30a453f)

docs

  • the config sidebar lists every generated page (0ec6c20)
  • build the site on the shared lys-docs-theme (9365df1)
  • correct guide claims the code no longer backs (27bc574)
  • deploy the site only when its sources change (bbc471f)
  • pin the shared theme to its v0.1.0 release (5c55f9c)

dropdowns

  • a list taller than the dropdown scrolls inside it (40ac21d)
  • lists scroll inside their card, which grows when it must (lys-ui 33a39c6) (dab55a4)
  • the card is its content, inset evenly on every side (62d419e)

filechooser

  • the sheet is lys-ui's card of padded bands (78febfa)
  • the panel is lys-ui's FloatingPanel (207b6d6)
  • the panel reveals with its animation again (lys-ui b5a9174) (5a05dd1)
  • the type filter is a dropdown like the dialog's choices (01bbb4f)
  • a long place name ellipsizes inside the sidebar (d1e6d45)
  • the replace notice names the folder and wraps (4bf795b)
  • pad the save name and sidebar headers, no margins (effe172)
  • the stylesheet's tokens reach the chooser, the zebra by index (208bb06)
  • the list's columns give way to the name, headers over values (6e94404)
  • the grid is a GridView, gapped, inset and rounded (44bf178)
  • the sidebar sizes itself, no pin (22649b3)
  • Replace sits beside the notice again (4a4aa1d)
  • the zebra is row:nth-child(even) again (4e7d2b1)
  • columnRow leaves hidden cells to PaintChild (703cecc)
  • columnRow hit-tests its cells through HitChild (38ec92d)
  • thumbnails freed on close, decodes cancelled and byte-budgeted (bc7353a)

flake

  • bump lys-wm to resume input only after a suspend (fd5eece)
  • lys-wm and lys-login at their bumped heads (c867682)

flake.lock

  • lys-lib b40c8aa, lys-wm e245828 (339a934)

gitignore

  • anchor the root entries, ignore test binaries (dc90425)

go

  • 1.27.3 throughout, the godbus copy included, in current idioms (5489368)

godbus

  • setting a property never rewrites a value a reply still holds (af992d4)
  • export and unexport under the handler's lock (5ef3764)

gpuhost

  • the GPU tests hold one Vulkan device for the process (a616a2c)
  • the GPU tests open a device per test again (0afded4)

greeter

  • background resampled to the outputs off the Go heap, freed at the end (2bd7723)

icons

  • bundle the Lucide glyphs that replace Tabler, Material and Adwaita (0a9cfc9)
  • drop the Tabler, Material and Adwaita sets and their licences (4486c3f)
  • the symbolic transform rounds every product, as Rust does (8581d3e)
  • lys-shell's own icons resolve without listing the theme chain (d6bc702)

idleinhibit

  • refuse a duration whose seconds do not fit a uint32 (ed92301)

imagedecode

  • decode JPEGs off the Go heap (74d0fc0)
  • a wallpaper is read through a larger buffer (26dffa6)

input

  • bar and launcher presses ride lys-ui's pointer and scroll hooks (500afdc)
  • lys-shell reads keymaps with lys-lib's xkb (63a1777)

intconv

  • integer conversions that refuse or saturate instead of wrapping (eb51771)

jpeg

  • progressive coefficients are stored in 16 bits (6e9deb3)

just

  • docker runs any recipe in a container; check is vet, lint, test, race, schema, build (3b42518)
  • bump-lys moves lys-ui and lys-lib to their main heads (9f69061)

keytest

  • Tap returns once the application handled the key (abef29a)

keytoggles

  • probe keyboards through SyscallConn so Close ends their reads (4bc878c)

launcher

  • the launcher is lys-ui's command palette (9e9de20)
  • focus the entry after the surface is shown (b038233)

lint

  • gosec G115 holds for the whole tree (cbd4b27)

lock

  • the lock and greeter prompt is lys-ui's card (3cb49ff)
  • the decoded background is dropped when the lock ends (a5cc5ae)
  • background resampled to the outputs, blurred off the Go heap (1dfc264)

login

  • the greeter and the lock screen build one screen (8fa0e18)
  • lys-login, one binary for the greeter and the lock (e63973a)
  • lys-login as the display manager, greeter in a lys-wm kiosk (836d8c5)
  • lys-login lives in its own repository now (30aad9e)

logout

  • resolve the session through logind, not XDG_SESSION_ID (70a6247)
  • exit lys-wm through its IPC while it runs (e27069f)

lyswm

  • the lys-wm IPC client (a4cee8c)
  • seed the watcher's layout and submap from lys-wm's requests (7c9d53e)
  • a watcher seeds and holds only the state it follows (5d5c350)

mail

  • provider icons come from the bundle, not a startup download (16f534e)

mango

  • the watch test sends its frames when it asserts on them (4cfcbd7)

netstat

  • read every interface from /proc/net/dev in one go (c714f1e)

network

  • the tests wait on a liveness bound, not a speed bound (5291163)
  • a sweep that sees a tunnel go down stamps it, and guesses no state (537073a)
  • the wifi row's status sits at its end, its address whole (471b237)
  • the fake NM waits out its calls before it closes its bus (910db2f)

nightlight

  • apply the colour temperature natively, without hyprsunset (ce0a9e5)
  • ease over 15 minutes at civil dawn and dusk where the machine is (3f8a9b2)
  • an ease crosses the whitepoint fit's seam without a step (892c2cd)
  • save the override atomically and say when it fails (892bc9c)
  • catch up the moment the clock jumps, as a resume does (e5c6e66)
  • send a matrix or ramps only when the wire value changes (5098e71)
  • GeoClue works with no agent in the session (d4919da)
  • a record that cannot be cleared, or kept, says so (07b6652)

nix

  • the binaries no longer load libpipewire (9ddfdf4)
  • the dev shell finds the GPU drivers off NixOS too (6587561)
  • vendorHash for the gputest import (0435665)
  • the dev shell keeps its own Go, the package builds with buildGo127Module (48895a4)
  • a VM check runs the shell on lys-wm (be0901c)
  • the lys-wm VM check binds and presses a global shortcut (7992154)
  • the lys-wm VM check runs the shell on its default renderer (a5e1a9c)
  • refresh vendorHash for lys-login's imports (613dcb8)
  • lys-wm and lys-login inputs follow their latest (f5d0d3d)
  • lys-wm and lys-login inputs follow 024322c (c624a41)
  • the module's GeoClue comment says what the schedule does now (f70629c)

notifications

  • the store round trip loads at the time it sent (3b8a096)
  • write the store in the order the history changed (c93b324)
  • bound the in-memory history, page the rest from disk (3b8664a)
  • clear all removes notifications from both clear-all buttons (ccc961f)

notifyui

  • grouping by key is shared (42e3813)

osd

  • the OSD is lys-ui's card at an explicit width (13b405e)
  • flash keyboard layout switches (1c7a8b7)
  • lock-key toggles from lys-wm's IPC on lys-wm (4342905)
  • a disabled OSD opens no input devices (9c2cf35)

overlays

  • read every overlay's keys through the keymap, in one place (c083348)

pipewire

  • speak the native protocol instead of dlopening libpipewire (0149b94)
  • drive a PipeWire 1.0 server's node activation too (5b6399e)

popups

  • a notification popup is lys-ui's card around an Item (262b571)
  • notifications stack per app and fan out on hover (#84) (214fc13)
  • stacks inset from the screen edge, the count inside its card (562e400)
  • the urgency bar runs down the card's left edge (c89be18)
  • a swiped card darkens nothing outside itself (8abde6e)

portal

  • remote-desktop input applies in the order it was sent (ef047d8)
  • allocate zero-copy screencast buffers through lys-ui's Vulkan device (d263e3d)
  • a ScreenCast stream ends when its producer loses PipeWire (457f1a7)
  • screencast allocates on the compositor's device, in a modifier it imports (230d3ee)
  • name the PipeWire client, ScreenCast streams and EIS seat (c296476)
  • a ScreenCast stream's frame rate is never made up (d76f28c)
  • lys-shell serves the lys-wm desktop (a8010a2)
  • keep the per-app master secrets in the Secret Service (03d7ce2)
  • read GTK settings through lys-ui's gtksettings (59f1ee8)
  • stream shared windows zero-copy over dmabuf (cdd71f6)
  • pin that a window share follows the window from its first second (d46812a)
  • keep apps' Secret portal keys in the Bitwarden vault (3a6f472)
  • a still shared window stays live, and new buffers get a frame (7a19f4c)
  • a window's ended copy wakes the stream (238c63b)
  • say why a window's new buffers take a new session (1fde27d)
  • a region's frames land in a dmabuf too (cf21cc3)

portaldialogs

  • the dialogs are lys-ui cards with its buttons (7b678d4)
  • a password dialog, and the UI host in its own package (cc01e58)
  • serve and call lys-lib's PortalDialogs1 contract (2760d08)

powermenu

  • the power menu is a lys-ui card of outline tiles (d031cbd)

printdialog

  • the print sheet is the shared lys-ui dialog (26f1885)

pulse

  • the audio service reconnects instead of freezing (920fe52)

pulsetest

  • the fake server's socket lives in a short dir (13f808e)

README

  • a front door, with the reference on the site (84d8d76)
  • use the site images, drop the duplicates in assets/ (328a1c6)

recorder

  • the webcam position picker fits its card (47c56fc)
  • the device selects stay inside their cards (ac78698)
  • capture, encode and mux on the GPU instead of GStreamer (dc4da3a)
  • decode MJPEG webcam frames that leave out the Huffman tables (804eeb3)
  • record a region, and turned outputs upright (33206fa)
  • a GPU that cannot encode H.264 says why (e076fd5)
  • each recording logs its device and encoder backend (a94a91c)
  • the pause test runs on a clock it moves (542dd99)
  • the GPU recording test runs on a clock it moves (d2504e8)
  • wait for the reconfigured screen to settle in the region test (b264bae)
  • tests wait on what they need instead of fixed sleeps (030004f)

regionoverlay

  • the size label and hint are lys-ui pills (f808522)
  • read keys through the keymap, so Enter confirms from any keyboard (4bd9ba7)

render

  • lys-shell draws through lys-ui's GPU path (#85, lys-ui 5795124) (a4d3f1d)

screenshot

  • the focused output, active window and window picks from lys-wm (7d43f27)
  • overlay frames off the Go heap, freed on close (4bd6560)
  • copy to the clipboard through data-control (d389ff0)
  • the focused output from sway and niri too (0b01e68)

secrets

  • lys-secrets, a Secret Service of the lys desktop's own (bd8035d)
  • a DH secret every client derives the same key from (4ae87ed)
  • lys-secrets lives in its own repository now (a4e7bc9)

security

  • govulncheck findings in code scanning, a license allow-list for new dependencies (ff10141)

settings

  • the window is lys-ui's cards, item groups and controls (62da9e8)
  • an idle window owes no frame (lys-ui 4d8b099) (7721e1d)
  • colors are lys-ui's color button and swatches (lys-ui e93ff98) (3a76854)
  • the bar layout's chips are lys-ui's Chip and ChipBox (871afbc)
  • controls line up on lys-ui's sizes and the theme's spacing (d1bcca1)
  • the color button and bar zones take lys-ui's boxes (lys-ui 97d6967) (e6ae304)
  • the icon picker offers the icons the theme resolves (30dbc01)
  • the icon picker is a padded grid as wide as its trigger (6eb09ac)
  • a picker opens with its search entry taking the keys (28180f0)
  • the icon grid opens at the current icon (d0d949f)
  • the module and theme pickers list like a dropdown (9ad4cb9)
  • the icon picker builds only the cells in view (7565d82)
  • path fields rest on a middle-ellipsized path at one width (2a08c3a)
  • an empty path field reads a placeholder (8e79a5a)
  • path fields ellipsize through the entry itself (ad9f5c9)
  • every path page fits a 760px window, at the widest field (5d813f5)
  • compare enum list rows by identity (fb78aad)
  • apply the greeter config as the user, admin only on request (cca82d5)

sharepicker

  • the picker is lys-ui's card of source cards (b8cc585)
  • the reply's targets live with the picker that writes them (9b74867)
  • choose a source with the keyboard (dcb0f4a)
  • arrows keep to the cards in line with the focused one (ea9e284)
  • stop a card's spinner once its preview lands (2999b5d)
  • key tests wait for the compositor to focus the picker (0446b5d)
  • a dismissed picker leaves exactly what was resident before (0aba54a)
  • the headless memory and idle tests tolerate a loaded machine (1a50ae5)
  • a tall window's preview stays in its card (c8df1c0)
  • the idle test waits for the frame it owes, not for a quiet window (e50df5d)

shell

  • the styling scale is read as configured, without a fallback (bf5caf0)
  • every UI glyph is Lucide (315851d)
  • warn about config icons no theme provides (8945052)
  • size Go-built text from the type scale (79c87d6)
  • lys-ui's measure protocol, lys-ui 83e7ada (#108) (db291a6)

sliders

  • one write at a time, and no stale level while it lands (80af382)

sni

  • keep only the tray pixmap the bar draws (27404ac)

spawn

  • launched apps run in a systemd scope of their own (1d1ef2e)

styling

  • rounding and scale default to lys-ui's own (332018e)
  • one type scale, and lys-ui's text classes on it (4efb584)
  • color mixes round the same on arm64 (2ceff13)

swaytest

  • export it for lys-login's lock contract test (cc4ebec)

sysinfo

  • read only the temperature input the cpu lookup settles on (6224249)
  • read the cpu poll's files without per-file allocations (8491d82)
  • the cpu and memory polls stop rescanning hwmon and allocating per line (51b8ca7)
  • the bar's polls read what the format shows, through kept descriptors (1dc3c8e)

systray

  • tray icons sit in the middle of the bar (a0c1f10)
  • a layout update re-reads the open menu without AboutToShow (1e1e578)
  • a submenu sends its own AboutToShow as it opens (0a9a8b8)
  • draw the attention icon and the overlay icon (4069bd9)
  • draw once before following the store (2d970ee)

test

  • one private headless sway helper, internal/swaytest (c045e47)
  • GPU tests need a Vulkan device behind the node, and probes say why they stop (2db7519)
  • a GPU check run on purpose fails when it cannot reach the GPU (a4d829d)

tests

  • grid cells come from the view's Children, not a pixel scan (05aaafc)
  • one golden and one hash on every architecture (a3140fc)

toast

  • --preset help names the real config key (cf1ef1a)

treeman

  • wait on the daemon's socket instead of spawning the CLI every 5 s (6d80e4c)

wallpaper

  • device rasters off the Go heap, shared and freed (33966c8)
  • resample through lys-lib's ResampleTo, delete the copy (532644f)
  • free rasters a resample finishes after shutdown (5010dd2)
  • decode the wallpaper off the Go heap, freed once rasterized (d5976c9)
  • the raster hashes pin amd64's rounding (318b3a8)

widgets

  • the empty state is shared, not the bar's (c24bc59)
  • a pinned size is lys-ui's size request and maximum (b2a0262)

workspaces

  • the active fill covers its whole segment, not a pill (73e3f19)

xdg

  • resolve lys-shell's directories through lys-lib's xdg and version.Name (0bcefaa)

Other

  • v4l2, audiomix: the webcam reader and the mixer become packages (8194b93)
  • lock, greeter: decode the background off the Go heap (803dcc5)
  • Remove the lys-login binary committed by mistake (dd3b6a7)
  • update lys-shell (40f8685)
  • screencast, recorder: carry dmabuf formats and modifiers as fourcc types (7e332da)
  • intconv, atomicfile, xdg: use lys-lib's shared copies (08a54f2)
  • export the packages lys-login shares; lockclient moves to shell/ (009398e)
  • runtime dir: lys-shell's sockets and markers only under XDG_RUNTIME_DIR (3fe223a)
  • network, bitwarden: the secret agent answers from the vault before it asks (6a3cdac)
  • build(deps-dev): bump vite from 6.4.4 to 6.4.5 in /docs (#132) (5a61a27)
  • network, bitwarden: offer a typed sign-in to the vault once it connected (48b9751)
  • lys-lock, lys-settings: parse arguments before touching the session (5b63f14)
  • float products round the same on every architecture (39b14ce)
  • math and fused products stay out of this repository (372b1f3)