Skip to content

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 25 Oct 05:40
· 815 commits to master since this release

appicons

  • match the icon table case-insensitively, as icons.rs does (7979961)

apptheme

  • keep the bundle attached so a reload never goes global (a99f7ca)
  • lys-ui's theme is the shell palette, in every app (9293cda)

assets

  • rename the preview screenshots the rename missed (b780373)

audio

  • the output/input dropdown card (48fa799)
  • com.wayle.Audio1 and wayle audio (c95fadf)
  • device options are lys-ui's Item (a6449d0)

auth

  • the PAM and greetd conversations (b9f809c)
  • end PAM as nonstick does, and name a failed account check (b8e114f)

bar

  • carry the network service as ModuleContext.Networking (fbe604f)
  • state icons update the widget in the tree; volume swaps to icon-muted (afd91ec)
  • the screenshot module and the in-process capture services (b148ce1)
  • serve the share picker beside the screenshot host (7ea5df1)
  • style the bar with the Rust stylesheet bundle and the BarButton tree; drop the inset and border workarounds (ab94213)
  • threshold colors through the bar button variables (battery, brightness, volume, notifications, cpu, ram, storage) (e6e8ae5)
  • labels, dropdowns, and the OSD brightness label through i18n (c9c2636)
  • a config reload or new palette restyles everything (a7366c3)
  • label-max-length is the button's max-width-chars, as in Rust (7a90a0c)
  • the brightness module's level icon, as in Rust (ea4f3ff)
  • formats render through jinja; sysinfo and custom as in Rust (350ff0d)
  • debouncedSlider, the DebouncedSlider every dropdown slider uses (c0f0892)
  • the dashboard dropdown, section by section from the Rust one (7504960)
  • the calendar dropdown as in Rust (cb6b340)
  • the mail dropdown as in Rust (2a65d93)
  • the brightness dropdown as in Rust (946c386)
  • the battery dropdown as in Rust (319092e)
  • the audio dropdown as in Rust (b3a23df)
  • the notification dropdown as in Rust (412c50e)
  • the recorder dropdown as in Rust (0ef62d7)
  • the treeman dropdown as in Rust (3f30232)
  • dropdowns that open, placed and colored, on a real compositor (6f0d77a)
  • the network dropdown's connections, networks, and prompts (924b2a8)
  • the network dropdown's VPN rows and VPN editor (01d17c2)
  • a dropdown's reads go through one reader, so a stale read never lands last (102d86c)
  • dropdown cards enter and leave through the dropdown transition (b4c773b)
  • the stylesheet carries the [animations] CSS overrides (d9d51fc)
  • dropdown page stacks slide and crossfade as Rust's do (3e08a5e)
  • the media dropdown slides between the player and the source picker (d26f18b)
  • the bluetooth row's hover swap crossfades as Rust's stack does (2b2d890)
  • the dropdown panels paint from the stylesheet (e859fa6)
  • every dropdown panel paints from the stylesheet; gelm: the last three engine properties (008e05d)
  • nothing hand-painted left; gelm grows what the sites needed (f1693f4)
  • the dropdowns match the Rust shell's trees; the bar buttons act like GTK's (00444bb)
  • the gelm gaps close; the dropdowns take the new primitives (5e58887)
  • serve the widget tree over AT-SPI behind the atspi tag (c05600e)
  • keyboard-input on sway, niri, and mango; pulse tries libpulse's list (ca81e5a)
  • cached dropdown instances, the frozen label, the animated rest click (125007a)
  • dropdown-autohide off and the card tween; gelm 992717e (0374530)
  • an unbuildable layout module is "not implemented", as in Rust (5c9c9b9)
  • bluetooth and microphone labels keep label-color (547b719)
  • headless Invoke reads the retirement under the loop lock (352aa4f)
  • recorder, idle-inhibit and power profiles as Rust colors them (a20807b)
  • clock, netstat, keyboard and icon-only modules carry their icons (417ba11)
  • power and dashboard are icon-only buttons (67e06d8)
  • the sections in a CenterBox, the center at the bar's middle (f56405d)
  • dropdowns attach the theme at the popover's root (0df3980)
  • one compositor detection in Rust's order; hyprsunset on Hyprland only (1f87ff1)
  • empty states center, media keeps its height, bluetooth status hugs the end (40b861b)
  • dashboard tiles and battery card, treeman empty state match Rust (d9353c5)
  • the weather dropdown takes the Rust trees (01b3fde)
  • special workspaces show their name, not Hyprland's id (753af13)
  • dropdown header actions keep their own height (1bd52fd)
  • empty states are lys-ui's StatusPage (daf11dc)
  • the secret box's peek keeps its size (42d43f2)

battery

  • UPower service + battery module (926fc24)

bitwarden

  • the key hierarchy, EncStrings and TOTP (f4abcff)
  • the identity and sync API, and the decrypted vault (357c3a9)
  • the vault service (5e9254e)
  • idle lock and the master password reprompt (1a8a605)
  • the bar module and the vault dropdown (edc98a9)
  • the vault locks with the session (2efa20c)

bluetooth

  • the BlueZ service and bluetooth module (0e9f8a2)
  • the full BlueZ model, controls, pairing agent, and the pairing dropdown (cdf73bd)
  • the pairing notifier runs without a placed module (ad77ac0)
  • device rows are lys-ui's Item (64ee2f4)
  • row actions are icon buttons (dde67d3)

brightness

  • the backlight service and module (06367f5)
  • external monitors over DDC/CI and kernel-uevent hotplug (5e2ab03)

build

  • split the flake into package and dev shell flake-parts modules (1fa36e3)
  • pin the Rust deps layer's version without import-from-derivation (640db34)

buttons

  • the module button chrome (0056034)
  • route hover, press, and click to the inner button (1fd766b)

calendar

  • the dropdown's month is lys-ui's Calendar (2066c04)

cava

  • the audio spectrum module, pure Go (c6a0b68)
  • capture the monitor on the native client, and fall off every frame (2b1ad56)
  • the package comment names the native capture (0de7406)
  • stereo and the wave style, held to the C analyzer frame for frame (82c1e3f)
  • the fifo and shmem inputs; the module ends with its bar (4dbf228)

ci

  • build-essential for the deb; CodeQL builds Go itself (8e4ac9e)

cli

  • a declarative port of the clap subset wayle's CLI uses (d3b18b2)
  • one implementation each for the shared D-Bus pieces (232830f)
  • wayle portal show previews every dialog (027dd56)
  • the version goldens follow internal/version (c0cb597)

click

  • module input bindings with native brightness and audio builtins (6e7bf29)

clipboard

  • the session history over data-control, started with the shell (8723b09)

cmd

  • errors.New for the static idle errors (f12d48f)
  • wayle lock and wayle-lock (6defb09)

cmd/wayle

  • wallpaper subcommand matching the Rust CLI output (4f11d92)
  • the full clap tree on internal/cli (0272367)
  • one D-Bus error mapping for every CLI (a7478df)
  • the launcher subcommand and the rofi symlink, with the socket lifetime contract (d8f5a91)

colorpicker

  • the magnifier-loupe color picker (cac732f)
  • frames matching no output fail instead of cancelling (6d2c9c3)

config

  • the [wallpaper] section and the [styling] color-extractor keys (32fe075)
  • mail's tag:unread default, the notify keys, and typed providers (d8dddcb)
  • [modules.screenshot] and [share-picker] (74049cc)
  • ColorValue text decoding, to_css, and #rgba hex (9e07a4a)
  • the [styling] section, the theme table, bar styling keys, and the bar-button key set (243bd01)
  • the [lock], [greeter], and wallpaper sections (1043ae2)
  • the [launcher] section (b4a73fd)
  • the reflected schema, layers, YAML and imports, and hot reload (d8128a5)
  • wayle config docs writes the VitePress pages (6d06ee1)
  • settings label keys and value sources per field (a5086db)
  • YAML only, a hard cut from TOML (53a67e7)
  • a missing runtime.yaml is no overrides, not a failure (4fab87e)

credential

  • the prompt the lock screen and the greeter share (91c5fb5)

custom

  • the user-defined exec module (2d1437f)
  • widget.update pushes reach the module by id (2d3770b)

dashboard

  • the panel (e7ad55f)
  • the distro-icon bar module and the user-session card (ab91133)
  • the avatar through the shared image decoder (bd3e888)

dbustest

  • a private dbus-daemon for service tests (4da38c8)
  • keep the bus socket short of sun_path's limit (d86646f)

dbusx

  • zbus-style daemon export and a private test bus (97fd3d1)

deps

  • lys-ui ab92f33; RemoteDesktop honours finish and scroll sources (bf26aac)
  • lys-ui 0eff6c8; ring overlay, popover width from PreferredWidth (8387fd3)
  • lys-ui df0f058; app icons resolve through GTK's dash fallbacks (1f2d5df)
  • lys-ui cccb001; padded CenterBox and RichLabel lay out right (3432023)
  • lys-ui e5952ed; the font dialog preselects the configured family (303a081)

desktopentry

  • gio's app list, visibility, Exec expansion, and launching (759ea10)

desktopnotify

  • freedesktop notifications over the session bus (859658d)
  • Ask, a notification with buttons that reports the one pressed (f1e7876)
  • lock the fake daemon's record in the test (fdba467)

devenv

  • migrate dev tooling out of the flake devShells (d56e0a7)

dialogs

  • confirms are lys-ui's alert with a destructive response (16fc18a)

docs

  • record the cava decision and rewrite status (f60a8d6)
  • refresh the rewrite status (ee904ae)
  • refresh the rewrite status (7a9e398)
  • the default layout's module set is fully ported (f93e716)
  • refresh the rewrite status (0d53666)
  • refresh the rewrite status (636603c)
  • refresh the rewrite status (d195ad7)
  • refresh the rewrite status (829c671)
  • refresh the rewrite status (adc902a)
  • refresh the rewrite status (080c1ba)
  • refresh the rewrite status (e1bb7c7)
  • the full parity inventory and the gelm gaps (158dd76)
  • the rewrite status after collecting the port work (5987659)
  • the config port in the rewrite status (147a74e)
  • module lifetime and the smoke test in the rewrite status (1f3e68c)
  • the dropdown ports still owed (276b5fb)
  • the dropdowns ported so far, notification persistence owed (7b04c51)
  • the recorder port, gstreamer for packaging (c8d1d8f)
  • gelm's popover gap closed (bbc7057)
  • the brightness dropdown's device names are at parity (1a61cf4)
  • deploy the site to GitHub Pages, drop upstream's Discord (11ec013)
  • lys-shell's own screenshots (2895af1)

dropdowns

  • the registry, popover plumbing, and the calendar card (98e04d9)
  • the scroll fills its viewport like GTK's (4c1aeb3)
  • the theme through the bar button; the popover's contents node (7a917f1)
  • the card is its content's height, the surface reserves the rest (cd4a24e)
  • icon tiles take their classes one by one (72e1d71)

filechooser

  • a window placed by its margins, sized to the sheet (b9236a7)
  • localized places, Recent, GTK's keys, a location entry (daabd54)
  • read folders off the loop, follow them, GTK's hidden rule (2ccfeab)
  • a Trash place and gvfs network locations (bc9c2d3)
  • drag files out (907b087)
  • tests read the tree as the loop (f34fa75)

fileuri

  • one percent-encoding; desktopentry: MIME associations (c081cd6)

flake

fswatch

  • coalesced inotify ticks, recursive when asked (fee0bd5)

gelm

  • GTK entry text nodes, logical clips, even-odd SVG fills (a09fa40)
  • GTK scale nodes, slider press warp, y-up glyph offsets, popover resize, Box height for width (84460d3)
  • GTK CSS node names; icons need no image override (a2e1b32)
  • the transform initial fix (5a3ec6b); all: unset no longer computes a zero scale (d0b9bdc)
  • the CSS animation and transition engines, feature complete (b8bf197)
  • bump to f14e5c6; the a11y seam goes, drags conclude with an action (f54515d)
  • bump to c4eb5db (8c73d9c)
  • c1884df; content-sized layers, the viewport on resize, per-connection registries (c419e01)
  • 63291fa; size requests, squeeze floors, unsized toplevels, ListBox children (a5737a1)
  • 7b72c47; a font family resolves by any of its names (114dabb)
  • 399f4b3; rem is GTK's, from the desktop font (1009772)
  • 8665017; a dropdown's size is the popover's, around real margins (03cf7f0)
  • e53d51a; text at its exact size (1207169)

go

  • scaffold the gelm-based rewrite (9b8c943)

GO-REWRITE

  • collect/launcher is superseded (7eaf565)
  • the portal backend is done; the dialog hosts remain (3084a65)
  • wayle-settings ported (a79b112)
  • the node-parity checklist closed (cd3e82d)
  • the dropdown parity sweep's still-open list (3c721b5)
  • pin the resume state; the sweep's landed work and method (736448c)
  • the live pass's comparison rig; the first findings and the gelm bridge fixes (e9896fc)
  • wallpaper, capture reloads, launcher, lock i18n, bar modules (294a040)
  • bar module audit progress (271ae35)
  • dialog windows and placement (07ca360)

go.mod

  • require gelm with Button.BgExplicit (125d595)
  • require gelm with data-control (66ee323)
  • require gelm with ImageStretch and ImageScaleDown (566ea67)
  • require gelm with screen capture (afbdb8c)
  • require gelm with the GTK-parity CSS engine (000181a)
  • gelm ba87e5b (Canvas.FillPath) (796121f)
  • gelm 23f50d1 (windows request their frame callback before committing) (7e521ad)
  • lys-ui at 04e266d (1df2b9f)
  • lys-ui after its author rewrite (775b12c)

greeter

  • finish the login screen, with its state machine under test (4ea0dc4)
  • maps on sway, its glyphs installed by name, the stylesheet's fonts (c4e1ef3)

hyprland

  • the IPC client (6f8e052)
  • clients, workspace rules, and the v2 window events (4c80b2e)

hyprland-workspaces

  • the workspaces bar module (4d97cfa)
  • the faithful module on the shared widgets (17eacc4)

hyprsunset

  • the night-light toggle module (6f30846)
  • the solar auto-schedule, GeoClue location, socket state, and the persisted override (6ae4096)

i18n

  • the Fluent runtime, locale negotiation, and both embedded domains (ac05459)

icons

  • the icon-* keys across the info modules, and the power module (2792602)
  • wayle icons, the symbolic transform, and the shell's icon theme (ab8b01c)
  • the SVG parser's XML layer is a roxmltree port (5bd788f)
  • stop waits for the watch callback (05db572)

idle-inhibit

  • the shared service, daemon, CLI, and bar module (64c2d17)

imagedecode

  • the wallpaper image formats, with farbfeld, PNM, and TGA (e9f80b8)

internal

  • desktop notifications and the CLI's D-Bus error messages (b47a064)

jinja

  • the minijinja format engine, checked against minijinja itself (435697e)

keybind-mode

  • the Hyprland submap module (7edb6f5)
  • auto-hide collapses the module root from the start (ba2e6c2)

keyboard-input

  • fix the module name to the schema's (2ae5d11)
  • "?" while no layout is known, as Rust shows it (8a5846e)

keyboard-layout

  • the keyboard input module (4d38af4)

launcher

  • the engine - matcher, session, history, hooks, and thumbnails (24d2645)
  • the modes - drun, run, window, ssh, script, dmenu, combi, calc, emoji, clipboard, keys, file browsers (86b15f8)
  • the surface, serving wayle launcher sessions from the shell (0f13052)
  • the surface enters and leaves through its transition (56ece2c)
  • Super key bindings; GO-REWRITE: what is left (ac63169)
  • the Rust tree, window > revealer > surface (dbc6b38)
  • bold and italic in the message and markup rows (2e18bff)
  • script tests print with POSIX escapes (06c2818)

launcheripc

  • the launcher socket protocol, client, and server (80e3d3c)

lock

  • the ext-session-lock screen and its triggers (473e02e)
  • one Shell1 export, the validated HexColor, and the greeter lint (26e6394)
  • a config reload reaches the lock screen (67e8e76)
  • the credential card reveals through the lock transition (059e68a)
  • failure messages from _lock.ftl (6505508)

logging

  • tracing.rs's daily log files for the CLI and the shell (cce96b7)
  • gelm's warnings and errors reach the log (e08f0ec)

logo

  • two tones, matte, simpler (0ec4427)

loupe

  • the magnified pixel grid as its own package (e8ee5d0)

mail

  • the notmuch unread module (e6a3c7a)
  • the inotify-driven unread service with new-mail notifications (58e9417)
  • arm the maildir watch before the seed query (f09d877)
  • a bar button with its icon, hidden at zero (0a76c49)

mango

  • the IPC client and the mango-workspaces module (890a852)

media

  • the MPRIS service and now-playing module (768a4d9)
  • the stateful MPRIS service, the icon modes, and the player dropdown with transport controls (9113eba)
  • com.wayle.Media1 and wayle media (6c50a6f)

microphone

  • the default-input level module (1872e6d)
  • threshold colors by input volume (2ccc79c)

netstat

  • the per-interface traffic module (16245ab)

network

  • the NetworkManager service and network module (b6ff26a)
  • the secret-prompt contract shared by the agent and the VPN sign-ins (99cdf67)
  • the secret agent, native VPNs, and wifi controls (dc5bf2a)
  • wifi reads as connected; frequency, IPv4, and wired speed (33f6709)
  • Rust's link display, device status, and the VPN icon (1e14449)
  • show a tunnel reconnecting when the network under it is gone (eaec5db)
  • Wi-Fi rows are lys-ui's Item (6343873)
  • VPN rows are lys-ui's Item (d8b7a2e)

network-dropdown

  • the VPN rows with their state and failure reason (ec1cb6d)

nix

  • package the Go shell; go.mod pins gelm without the local replace (ae46bc7)
  • vendorHash for gelm ec53dc6 (7381645)
  • vendorHash for gelm c1884df; GO-REWRITE: the 2026-10-15 parity log (046d0fd)
  • vendorHash for gelm 63291fa; GO-REWRITE: greeter, print dialog, sizing (34a9688)
  • vendorHash for gelm aca3f5b; GO-REWRITE: share picker done (cdcb451)
  • vendorHash for gelm cfe2d12 (df5ad73)
  • vendorHash for gelm 3149400 (28031f7)
  • GStreamer plugins from their lib outputs (fd28ff7)

notifications

  • the daemon and the bell module (5b70891)
  • the daemon and the bell module (dee261b)
  • pausable popup countdowns in the service, hover-pause on the cards (d08c2dc)
  • hints, parsed actions, and Rust's id and history rules (f82a781)
  • the history persists in the Rust store's file (25da305)
  • the restored-expiry test leaves setup room under load (9fd2043)
  • keep time by an injectable clock; tests stop racing it (07c35e4)
  • action presses carry an xdg-activation token (f10798d)

notify

  • the control interface and the wayle notify CLI (718f044)

openconnect

  • the native VPN sign-in for every openconnect protocol (9ee917a)

openconnecttest

  • a silent gateway for the VPN sign-in tests (7c4bbbb)

osd

  • the volume, microphone, and brightness flashes (a2ccf08)
  • new() for the label pointers (33f0b5c)
  • drop the string pointer helper (64927f8)
  • osd.layer and tearing mode (37d0533)
  • the OSD and toasts enter and leave through their transitions (d58be41)
  • the Rust OSD, on the stylesheet and the configured monitor (3f9bc61)

packaging

  • install the zsh completion as _lys-shell (422c79d)

panel

  • wayle panel, com.wayle.Shell1, and the shell's application id (c48a730)

pango

  • , and span underline/strikethrough; gelm e86f8a2 (218618e)

pipewire

  • the ScreenCast video producer over libpipewire (7e59642)

popups

  • the notification popup window (c8cae80)
  • the full notification card, and layers that honor tearing mode (1d0f310)
  • notification cards enter and leave through their transitions (a0327d9)
  • the notification cards map, on popup-monitor, as card/mod.rs builds them (1fe164b)

portal

  • the backend core, Settings and Lockdown; wayle portal serves (dfbb853)
  • Background, Usb, Email and Secret; godbus decodes fd arrays (0017b9c)
  • Notification, Wallpaper and Inhibit; the PortalDialogs1 contract (f418a59)
  • Access, Account, AppChooser and DynamicLauncher; manifests pinned (9664cbe)
  • Screenshot, through the shell's Screenshot1 (c9a16e2)
  • FileChooser and Print over the shell's FileChooser1 and Print1 (3240261)
  • Clipboard over the data-control device; godbus replies files (ca966a2)
  • GlobalShortcuts and InputCapture; one Wayland loop (752929c)
  • ScreenCast, streaming picked sources through PipeWire (a4cea76)
  • RemoteDesktop over gelm's virtual pointer and keyboard (c0b5c3b)
  • ConnectToEIS over a pure-Go EIS server (e84a67a)
  • zero-copy screencast over gbm dmabufs; gelm ad40151 (c5e3909)
  • Secret never replaces a stored master secret (594774f)
  • Email reads the attachments the frontend sends (74c6f17)
  • Settings honours globs, owns contrast, serves the GTK keys (1f62c2d)
  • Lockdown reads its policy from config (fd3e1ae)
  • stop advertising InputCapture (9105456)
  • Inhibit takes the reason, holds the shell's idle, adds monitors (e353b4c)
  • Notification replaces by id, clicks "default", speaks v2 (5efbdaf)
  • one session record, kind/owner checks, backend-initiated close (75d038f)
  • a Request for every call, and every shell dialog dismissable (e6c9d51)
  • queue concurrent dialogs, name the app, place on its output (ddb22c0)
  • Access shows the choices it is given and returns them (e2a9528)
  • Account lets the user edit what is shared, one avatar source (94a6ff7)
  • AppChooser speaks app ids, follows UpdateChoices, preselects (d6200d3)
  • DynamicLauncher asks unless allowlisted, shows the launcher (9d3744c)
  • Usb asks which devices an app may open (4ae22aa)
  • Background reports real app states and asks before allowing (41fd1ca)
  • Wallpaper keeps a copy of the picture and honours set-on (e7c77a5)
  • Clipboard tells sessions what the selection is and whose (59851a3)
  • ScreenCast keeps the types and cursor contract, reports geometry (17ed68e)
  • RemoteDesktop shares screens, enables the clipboard, persists (20ef11f)
  • Screenshot v3 targets, side-effect-free captures, real failures (449ac84)
  • GlobalShortcuts ask, share, remember, and time in milliseconds (d33e386)
  • Print returns the page setup, starts from the app, owns its tokens (15b4809)
  • FileChooser takes the app's options and saves safely (7136188)
  • test through the real xdg-desktop-portal; version only where specified (059c4d5)
  • GlobalShortcuts — an unidentified app owns its shortcuts per session (786895d)
  • Screenshot asks what to capture, with or without the pointer (4227168)
  • consent dialogs use the shell's own icons (b812644)

portaldialogs

  • the Rust dialog tree, centered and content-sized (2e4ebb1)

power

  • the :menu session panel (25d9a4b)

power-profiles

  • the power-profiles-daemon module (d511113)

powermenu

  • the native power menu, replacing the power dropdown stand-in (22eaab6)

printdialog

  • the print view! - a ListBox of printers, the form grid, a spin button (afa85d3)
  • a centered content-sized window; rows span the list (b082477)

pulse

  • the native protocol client and a fake server (5d3acd4)
  • the audio service on the native protocol, and its DBus daemon (bac6a59)

README

recorder

  • the state machine, daemon, CLI, and bar module (3064e70)
  • the Rust engine — ScreenCast portal and in-process GStreamer (a0b63cf)
  • hold the fake's stop so the test sees stopping (3df7816)
  • setting rows are lys-ui's Item (b6b548b)

regionoverlay

  • the freeze-frame region selection overlay (280e33b)
  • adjust the selection before confirming; a click picks a window (17d6da2)

release

  • dist binaries start on other distros; packages name this project (05cd683)
  • notes from the history, grouped by area (e52fde0)

screenshot

  • the capture host, com.wayle.Screenshot1, and wayle screenshot (2c4659d)
  • compositor-in-the-loop and bus round-trip tests (38ceb1d)

scss

  • a pure-Go compiler for the user stylesheet's SCSS subset (843ef24)

separator

settings

  • the wayle-settings window, rows and the first editors (6f48196)
  • animations and share-picker pages; optional, size and surface-animation editors (a674886)
  • general, lock and greeter pages; font, color and file editors (8d79030)
  • 27 module pages; color-value, icon, action, list and card editors (e21a3d9)
  • theme, OSD, notifications, dropdowns, launcher and bar-button pages; toast presets, optional sizes, theme selector (2cc2dcf)
  • wallpaper page; cycling reveal and monitor cards; GTK-sized entries (461dfff)
  • hyprland, mango, niri and sway workspace pages; workspace style maps (7d8300b)
  • recorder, mail and systray pages; device selects, mail accounts, tray overrides (58ea3a1)
  • custom modules page; the TOML code view (d38174b)
  • bar general page; the layout editor (a8272c0)
  • the sidebar is lys-ui's Sidebar (e396f4b)
  • the font fields open lys-ui's font dialog (4857afe)
  • colour controls show their swatch (9b021f3)

sharepicker

  • the screencast source picker and com.wayle.SharePicker1 (41efe94)
  • the Rust widget tree on the stylesheet (f95c253)
  • read invoke before the preview capture goroutine starts (9a9fcee)

sharepreview

  • frame images, output transforms, and the XDPH window list (03dee08)

shell

  • reload the wallpaper, extraction, notification, and OSD config (2de9287)
  • bars and OSD faces follow monitor hotplug (c8e70b2)
  • gelm 6f36e2c; surfaces animate only through [animations] (80b8d4a)
  • the portal dialog host behind PortalDialogs1 (b9fe324)
  • portal dialogs render as laid out; gelm 7d6f7bc (a3904e3)
  • the file chooser behind FileChooser1; gelm f0c9eda (49304f0)
  • the print dialog behind Print1, spooling over IPP; gelm ed82f23 (00060f2)
  • containers paint children through widget.PaintChild; gelm 9780c3d (18fc093)
  • the user styles reload on a file watch, not a poll; gelm b50a579 (424213a)
  • gelm ec53dc6; modal alerts, the patched binding, settings guard (f3577e9)
  • gelm c1dd809; toggle buttons and search entries where GTK has them (b70c8ab)
  • treetest.Font, the one test face (77b96e7)
  • sizes through size requests; dynamic CSS above the bundle's reset (3f949a9)

sni

  • drop the unused host fields (c7e2b45)
  • drop the unused host fields (26a63f8)
  • one item per address, whichever form registers it first (753f9e8)

strftime

styling

  • design tokens, palette, and bar chrome (d7eeec6)
  • theme_css with Rust goldens, the palette color math, and the hex palette converter (3668c98)
  • the bar, bar-button, and bar-container inline var blocks (45043a4)
  • the matugen, pywal, and wallust palette providers and resolve_palette (41e8594)
  • the user stylesheet (user_css, try_user_css, scaffold) (1afb944)
  • embed the compiled Rust stylesheet, with a freshness check and just go-css (47d36d3)
  • the engine parses the compiled stylesheet clean; GO-REWRITE (f2552e5)
  • plain CSS only; drop the SCSS sources and compiler (152b101)
  • no universal reset; lys-ui's theme layer reaches the widgets (8ca4c13)
  • lys-ui's theme styles the controls; drop the restating primitives (49051b2)
  • badges are lys-ui's Badge (91fba85)
  • buttons take lys-ui's variants (3555282)
  • drop the stylesheet rules nothing renders (77d9579)
  • icon buttons are lys-ui's icon size; secondary fills from the palette (22930df)
  • the palette tokens are defined once, in Go (4d0e863)

sway

  • the i3 IPC client and the sway-workspaces module (a6f3445)

sysinfo

systray

  • the SNI watcher, host, store, and bar module (3032ab3)
  • drop the unused module mutex (e22beda)
  • the full watcher, item change tracking, DBusMenu menus, and IconPixmap icons (902a1e5)
  • submenus open as their own popovers, as the Rust tray's do (abd7690)
  • a tray menu's shortcuts fire while it is open (52cd6d2)
  • an empty tray hides its module wrapper, as Rust hides the parent (17ac3c2)

tests

  • race-clean tree, and -race in the Go gate (350aa2f)
  • bind sockets in a short directory (436fe9d)
  • run against a scratch home; the shell scaffolds styles, not the theme (850c748)
  • the shell on a live Hyprland in a NixOS VM (8c4c8a6)
  • the Hyprland VM drives the portal and real pointer clicks (d22bc38)

thresholds

  • inclusive bounds, last match wins, per-part colors, and one shared decoder (5dbf0eb)

toasts

  • the widget socket and the wayle toast CLI (2ef41e8)

toplevels

  • give the test sway a private session bus (24084bd)
  • the probe window runs in-process again (190859e)

treeman

  • the worktree health module (6bcb386)
  • the worktree health module (8e8c043)
  • Rust's module states, severity class, and hide-if-empty (8a18d1d)
  • the Rust service loop; status from treeman status --format json (402931b)

volume

  • the pulse service and volume module (c1f8fbd)

vpn

  • wayle vpn sso-callback and the shell's com.wayle.Shell1 (f5713f5)

wallpaper

  • the service, cycling runner, and com.wayle.Wallpaper1 daemon (752f199)
  • native Background-layer surfaces with transitions (77e320a)
  • play the configured [animations] transition, reloaded (8f31867)

wallpaper/extract

  • the color extractor with Rust-recorded goldens (f91cbdf)
  • track the recorded Rust result goldens (05abbdf)

weather

  • the wayle-weather service, its module, and the full dropdown (f281fad)
  • forecast times are the location's, not the viewer's (e556eee)
  • test epochs format with strconv (fcdb850)

widget

  • wayle widget update and the socket at Rust parity (11e31eb)

widgetipc

  • new() for the label pointers (1029f8d)

widgets

  • the slider wrapper asks for the pointer cursor; gelm primitives carry it (70d58b7)

window-title

  • the focused window title module (59e269c)
  • every compositor, the icon mappings, the first snapshot (807a8ce)

workspaces

  • faithful sway and niri modules (879d20c)

world-clock

  • build the bar button once (683b197)

Other

  • cpu, ram, storage: the sysinfo poll modules (6e7d419)
  • weather, world-clock: the HTTP weather module and multi-timezone clock (71bea46)
  • state icons for battery, volume, and network (e784041)
  • state icons for microphone and bluetooth (32e8794)
  • brightness and battery dropdown cards (f68e4f0)
  • dropdown panels: the remaining nine cards (2c18c40)
  • power, systray: the com.wayle daemons and their CLIs (ad7968f)
  • idle, notify, recorder: the Rust D-Bus interfaces and CLI output (0ecd8a2)
  • wip(cli): unfinished agent work, collected when stopped (81c8019)
  • wip(lock): unfinished agent work, collected when stopped (9dee54b)
  • shlex, glob, mime: command lines, case-folded globs, and mimetype guesses (79cc56d)
  • gvariant, emojigen: read GVariant blobs and extract GTK's emoji table (219a69f)
  • feed, module lifetime: one fan-out for service events, modules end with their bar (17577c0)
  • nix, shell: the modules install the Go shell; the dropdown card grows with its page; gelm 6353fcc (be6d974)
  • settings, print, files: the row proxy carries the row node (02062d7)
  • lock, greeter: the credential box and both screens on the _lock.scss rules (b17aa3e)
  • launcher, portal surfaces, power menu: the stylesheet sets the ink (21b826e)
  • sharepicker, portaldialogs: GTK tab labels and labeled check buttons (00e8276)
  • screenshot, regionoverlay: follow config reloads and the theme (973c519)
  • screenshot module: no pinned label-color (bffc1ea)
  • panel test: hand the fake shell its release through a channel (cb3fbdd)
  • bluetooth dropdown: device rows in their cards; the header laid out (66b7e15)
  • Merge master (v0.8.54) into go-rewrite (4c4aa0a)
  • shell tests: one process-wide loop lock for every surface harness (2895299)
  • audio dropdown: the chevron follows the device name (8f62bdc)
  • shell tests: one liveness guard, long enough for the first surface (dd001ec)
  • panel inspect: open gelm's inspector (07604e0)
  • Go-only repo: delete the Rust implementation (db1fda2)
  • Remove the button styling map page (c7f8d3e)
  • Rename wayle to lys-shell (938ee6c)
  • A lys-shell logo of its own (e145b97)
  • remove md (b37a419)