LUNADASH / SHELL

Your shell, in Slint.

The panel, dock, launcher, dashboard and settings are plain Slint files run by SlintLu. Edit a copy, reload on save and make LunaDash use it.

How the shell runs

The compositor starts LunaDash-Shell with SlintLu (slintlu --config /usr/share/lunadash/shell). SlintLu compiles the Slint files at runtime, turns each exported PanelWindow into a Wayland layer-shell window and provides the desktop services: audio, network, Bluetooth, notifications, MPRIS, tray, polkit, idle, clipboard, applications and LunaDash's own workspaces, window switcher, wallpaper library and preferences.

In the shellContains
shell.slintExports every window: each component inheriting PanelWindow becomes a layer-shell surface on every screen.
panel/The top or bottom panel and its popups (calendar, audio, network, clipboard, tray).
dock/, launcher/, dashboard/Dock, application launcher and the dashboard with media, performance and notifications.
settings/The settings center and its pages.
wallpaper/The wallpaper with its desktop clock, the Super+W library and the folder browser.
switcher/The Alt+Tab and Super+Tab boxes.
session/, feedback/Lock screen, power menu, polkit dialog, notification pop-ups and on-screen display.
state/, style/, components/Preferences, design tokens (colours, radii, motion) and shared controls.
i18n/Translations: lunadash.pot and one .po file per language.

Edit your own copy

Copy the installed shell (or clone the repository), change it and check it before using it. SlintLu reloads the files when they are saved; a broken edit keeps the running shell and prints the error.

TERMINAL
cp -r /usr/share/lunadash/shell ~/my-shell
/usr/libexec/lunadash/slintlu check ~/my-shell

Make LunaDash run it

~/.config/LunaDash/session.json chooses the shell. custom runs any command, so point it at SlintLu with your copy:

~/.CONFIG/LUNADASH/SESSION.JSON
{
  "shell": "custom",
  "shellCommand": ["/usr/libexec/lunadash/slintlu", "--config", "/home/me/my-shell"]
}

The same file can run a different shell (for example ["waybar"]), none at all ("shell": "none"), a launcher command used when the LunaDash shell is not running, and up to 32 autostart commands. LUNADASH_SHELL=lunadash brings back the built-in shell for one session.

Talk to the running shell

slintlu msg reads and changes the shell's globals, which is useful in keyboard shortcuts and scripts:

TERMINAL
slintlu msg call Shared.set-string overlay settings
slintlu msg get Compositor.wallpaper
slintlu msg call Store.set-string panel-position bottom

See IPC and scripting and the SlintLu API reference for every global, and Translations for adding a language.

A shell is ordinary code with your permissions. It can run commands and read files; only use shells you trust.