Files
wldash/README.md
T
Bendik Aagaard LynghaugandClaude Fable 5.1 9953865128 launcher: scan desktop files directly, keep state in XDG_STATE_HOME
The desktop-entry cache lived in $XDG_CACHE_HOME/wldash/desktop.json.
On an NFS-shared home that is a remote read and write on every start
(unless the session happens to export a machine-local XDG_CACHE_HOME),
and it went stale whenever a package was installed until someone ran
--desktop-refresh. Scanning the applications directories takes a few
milliseconds over local /usr/share and already happened on a background
thread, so the cache bought nothing: drop it, along with simd-json and
the serde derives on Desktop. --desktop-refresh stays as a no-op so old
key bindings keep working.

Calculator history and the prompt saved on Escape are state, not cache:
they move to $XDG_STATE_HOME/wldash (~/.local/state), written only on
Enter/Escape, and the old cache location is still read as a fallback.

With the serde derives gone, two Desktop fields were unused; use them:
Type=Link entries now open their URL with xdg-open, and Terminal=true
entries run under $TERMINAL -e when it is set.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 09:33:12 +00:00

3.2 KiB

wldash

screenshot

A dashboard/launcher/control-panel thing for Wayland. Requires wlr-layer-shell-unstable-v1.

Consider this alpha-quality: While it works, everything is subject to change with a moments notice. You may end up pulling in the latest changes, and poof, wldash suddenly turns into an artisan espresso machine.

Rewrite note

wldash has received a significant rewrite. The old version is available in the wldash1 branch for now.

This fork

This is a maintained fork of kennylevinsen/wldash living at https://project.uhhm.no/bl/wldash. On top of upstream it fixes a number of crashes (non-ASCII input in the launcher, machines without a backlight, battery or PulseAudio, key-repeat rate 0, ...), corrects redraw damage tracking, and prefers a machine-local /etc/wldash/config.yml over the per-user config when present, which keeps per-host layouts apart on NFS-shared homes.

How to use

  1. Checkout: git clone https://project.uhhm.no/bl/wldash
  2. Build: cargo build --release
  3. Put somewhere: cp target/release/wldash /usr/local/bin/wldash
  4. Run: wldash

To generate a new default configuration, run wldash --write-default-config. To configure, edit $XDG_CONFIG_HOME/wldash/config.yml (or if XDG_CONFIG_HOME is not set, ~/.config/wldash/config.yml). If /etc/wldash/config.yml exists it takes precedence over the per-user file; --config FILE overrides both.

Desktop files are scanned every time wldash starts (on a background thread), so there is no cache to refresh; --desktop-refresh is kept as a no-op for old key bindings. Calculator history and the prompt saved on Escape live in $XDG_STATE_HOME/wldash (~/.local/state/wldash); older installs' files under ~/.cache/wldash are still read.

For more info, look in src/config.rs.

System dependencies

dbus. See https://github.com/diwic/dbus-rs#requirements.

How to use launcher

The launcher for wldash is built-in, based on https://github.com/kennylevinsen/dot-desktop. Pluggable systems may come back in the future.

The environment variables XDG_DATA_DIRS and XDG_DATA_HOME are read to find the many applications folders that contain desktop files.

Features

Date and time

In nice, big letters!

3 month calendar

Scroll or click on the months to navigate.

Battery level

Over upower, only visible if upower battery is detected

Audio volume

Over pulseaudio, only visible if pulseaudio connection is successful. Scroll to adjust volume, right-click to toggle mute.

Backlight control

Using backlight sys file, only visible of backlight is detected. Scroll to adjust, right-click to toggle between the extreme values.

Launcher

Loads desktop files from the usual locations.

The launcher also accepts prefix operators to change its mode:

Notable missing features:

  • Scaling of any kind - all sizes are currently hardcoded in pixels

How to discuss

Go to #kennylevinsen @ irc.libera.chat to discuss, or use ~kennylevinsen/public-inbox@lists.sr.ht.