Skip to content

Releases: stubbedev/lys-shell

v0.3.1

Choose a tag to compare

@github-actions github-actions released this 03 Nov 01:08

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 launcher opens 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. See docs/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_motion there owns reduced motion, and lys-shell's animations.reduced-motion warns that it has no effect.
  • launcher.monitor now 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

Choose a tag to compare

@github-actions github-actions released this 02 Nov 20:12

Needs lys-wm v0.4.0 for Esc, frost and the minimized state.

Changed

  • bar.dropdown-opacity now 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

Choose a tag to compare

@github-actions github-actions released this 02 Nov 14:32

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

Choose a tag to compare

@github-actions github-actions released this 02 Nov 09:14

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

Choose a tag to compare

@github-actions github-actions released this 02 Nov 05:31

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)...
Read more

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 25 Oct 05:40

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...
Read more