Building Luft
Day-to-day work happens on a Fedora 45 machine, in test sessions that change nothing on it.
What you need
Section titled “What you need”Install Bun, Rust and the Sabine CLI, then the build dependencies:
sudo dnf builddep muttersudo dnf install $(cat os/image/packages/build.txt) greetd gstreamer1-plugin-gtk4 cldr-emoji-annotationKestrel
Section titled “Kestrel”Build Kestrel into kestrel/build and try it in a window:
bun install(cd kestrel/ui && bun install --frozen-lockfile)kestrel/compositor/build.shmeson setup kestrel/build kestrel/engine -Dpkg_config_path="$PWD/kestrel/run/mutter-install/lib/pkgconfig" --prefix="$PWD/kestrel/install"meson compile -C kestrel/buildkestrel/tools/session.sh nestedAfter pulling, meson compile -C kestrel/build is enough. The nested session copies your wallpaper, settings, keyboard layout and favourite apps, and closing its window ends it.
Each app runs from its own folder:
cd apps/roverbun run desktop:dev # the interface with hot reload, in its native windowbun run check # type checksbun run desktop:build # a release buildSome apps, such as Rover and Schelf, also show their interface in a regular browser with sample data through bun run dev. Each app’s README has its details.
Test sessions
Section titled “Test sessions”kestrel/tools/session.sh capture runs every check headless, in isolated sessions with their own D-Bus buses and stand-ins for system services, and saves a screenshot of every surface. Other modes measure frame times, record animations frame by frame, and check the login screen and first-run setup. Testing covers every mode and option.
Test sessions still reach the real system bus for a few services. Point KESTREL_SESSION_DIR and KESTREL_CAPTURE_DIR at scratch folders, and never type a real password into a prompt that appears during a test.
The image
Section titled “The image”The image is built with Podman, without root:
os/image/build.sh # localhost/luft:45os/image/build.sh luft-nvidia # localhost/luft:45-nvidiaos/iso/build.sh # the USB stick, in os/iso/stateThe first build downloads Fedora packages, Mutter’s source and the web runtime, and takes about an hour. Later builds only remake the parts whose sources changed. Without signing keys, builds make throwaway ones.
Virtual machines
Section titled “Virtual machines”Disk, boot and install changes are tested in VMs, never on the host’s drives:
os/vm/disk.sh # install the image onto a virtual diskSECURE_BOOT=1 os/vm/run.sh # start it with Secure Boot and a TPMISO=os/iso/state/luft-VERSION.iso os/vm/run.sh # start the stick insteadapps/setup/installer/vm/run.sh # real installs next to a Windows-like driveTesting on real hardware lists what to try when Luft goes on a new computer.