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 shell | Contains |
|---|---|
shell.slint | Exports 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.
cp -r /usr/share/lunadash/shell ~/my-shell
/usr/libexec/lunadash/slintlu check ~/my-shellMake LunaDash run it
~/.config/LunaDash/session.json chooses the shell. custom runs any command, so point it at SlintLu with your copy:
{
"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:
slintlu msg call Shared.set-string overlay settings
slintlu msg get Compositor.wallpaper
slintlu msg call Store.set-string panel-position bottomSee 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.