Repository navigation
Releases: stubbedev/lys-shell
Releases · stubbedev/lys-shell
Release list
v0.3.1
Needs lys-wm v0.4.1 for reduced motion over IPC and the look it was tuned against.
The default look changed. The bar is a floating frosted bar with workspaces, tray, notifications and power, there's a built-in wallpaper, and the OSD matches notifications. docs/guide/editing-config.md lists the keys for the old look.
Added
- A Spotlight-style launcher.
lys-shell launcheropens a search panel across apps, windows, files, clipboard, emoji, settings and system commands, with a calculator, an actions panel, script commands and a web fallback. rofi flags keep their own code path. Seedocs/guide/launcher.md. Bind it yourself if your compositor config replaces the defaults:exec lys-shell launcher. lys-settings --page.- The portal serves
org.freedesktop.appearance reduced-motion.
Changed
- On lys-wm,
animations.reduced_motionthere owns reduced motion, and lys-shell'sanimations.reduced-motionwarns that it has no effect. launcher.monitornow works for both the panel and rofi sessions.
Not verified
The panel's blur and spring motion haven't been seen on a display. The Hyprland, niri and mango window backends haven't run live.
v0.3.0
Needs lys-wm v0.4.0 for Esc, frost and the minimized state.
Changed
bar.dropdown-opacitynow defaults to 75 instead of 100, because at 100 a dropdown asks for no blur. Set it back to 100 for solid dropdowns.- On lys-wm, Esc closes an open dropdown even when you haven't clicked into it. That Esc doesn't reach the focused window.
Added
- Bar dropdowns frost over the desktop.
- The lys-wm integration reports whether a window is minimized.
v0.2.2
Fixed
- Bar dropdowns no longer take the keyboard while open. Keys stay with the focused window until you click into the dropdown. A dropdown that focuses its own input as it opens, such as the Bitwarden vault, still takes them from the start.
- Dropdowns play their exit animation however they close, including a click outside and Esc.
- With
dropdown-autohide: false, a menu inside a dropdown no longer kills the bar with a protocol error.
v0.2.1
Adds the greeter's wording for why a login was refused, and moves to lys-lib, lys-secrets and lys-ui at this round's commits.
deps
- lys repos at their heads, every module at its latest (49d0268)
- lys repos at their heads, every module at its latest (919cf9e)
i18n
- the greeter words why a login was refused (70edce8)
v0.2.0
Changes for users
max-attemptsandshow-failed-attemptsare 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.bitwardenserver on plainhttp://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)...
v0.1.0
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
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
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
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...