Skip to content

Development

Wiktor edited this page Oct 16, 2026 · 1 revision

Development

Rules and workflow: CONTRIBUTING.md. This page is the practical side.

Build and test

cd native && cargo build --release && cargo test --release
cd scripts/mistd && cargo test --release
native/install.sh          # install and restart the running mist-ui through its guard
scripts/mistd/install.sh   # rebuild mistd

Keep lto = false (Arch rustc with the system LLVM segfaults with LTO).

Check without touching the running session

Prefer these over screenshots: render the old and the new binary, compare with magick compare -metric AE. A refactor must render 0 px different.

Command Output
mist-ui --png out.png '{"app":"Firefox"}' the top bar
mist-ui-bin --desk-png dir desktop stage + cards, and layout.json
mist-ui-bin --dock-png out.png the dock
mist-ui-bin --pane-png spotlight 1920 1080 out.png fi a panel, settled (control, calendar, emoji, ...)
mist-ui-bin --island-frames notif out 30 20 an island demo, frame by frame
mist-ui --test a second bar over the real one
mist-wall-bin --png out.ppm dunes 1920 1080 one wallpaper frame (MIST_WALL_BENCH=N: ms per frame)
mist-ui-bin msg ui stats wake-ups, paints, paint time per surface
bench/measure.sh 30 mist-ui-bin mist-wall-bin mistd idle PSS and CPU

Run renders with a throwaway HOME and env -u HYPRLAND_INSTANCE_SIGNATURE to keep your own windows, notifications and accounts out of them; docs/img/hero.sh shows how.

Screenshots for the docs

Script Makes
docs/img/hero.sh desktop.webp (MIST_LANG=en for desktop-en.webp): offscreen, blur emulated
docs/img/panels.sh panels/*.webp
docs/img/session.sh real grabs of a nested Hyprland session (throwaway HOME, private D-Bus without activation)

All of them use the demo data in docs/demo.

Translations

Every string drawn goes through i18n::tr(), keyed by the Polish text. The table is native/assets/i18n.tsv: one row per string, columns pl en de es, {} for values filled in at run time.

  • Missing strings: run with MIST_LANG=en MIST_I18N_MISS=/tmp/miss.txt, use the UI, read the file.
  • A new language: add a column to the table and an entry to LANGS in native/mist-ui/src/i18n.rs (it also feeds the language picker); date formats per language are in the same file.

CI

.github/workflows/ci.yml, in an Arch container: build, tests, shell syntax, cargo clippy (correctness, suspicious and perf fail the build), cargo deny (licences and sources; advisories are reported, not blocking). Tags v* build release tarballs.

Legacy

The original Quickshell (QML) version is kept under the git tag legacy-qml.

Clone this wiki locally