index

Rendered in CI from the real QML β see the walkthrough.
Quickshell/QML + Go installer for TunaOS, modeled on DankMaterialShell's architecture. Runs on the Niri scrollable-tiling Wayland compositor.
Architectureβ
tuna-installer-niri/
βββ ui/installer.qml # Quickshell QML wizard (welcome β disk β confirm β install β done)
βββ installer/main.go # Go backend (disk discovery + fisherman orchestration)
βββ README.md
Buildβ
Go backendβ
cd installer
go build -o tuna-installer-niri .
./tuna-installer-niri discover-disks # list block devices
./tuna-installer-niri install '{...}' # run fisherman with a JSON recipe
QML frontendβ
Requires Quickshell:
quickshell ui/installer.qml
Workflowβ
- Welcome β intro screen
- Disk Selection β calls
tuna-installer-niri discover-disks, renderslsblk -Joutput - Confirm β summary with hostname input
- Install Progress β polls Go backend output via Timer
- Done β success/failure
DBus Integrationβ
For tighter QML β Go integration (future), expose the backend as a DBus service:
- Service:
org.tunaos.Installer - Object:
/org/tunaos/Installer - Methods:
DiscoverDisks(),StartInstall(disk, hostname),PollOutput(),PollStatus()
Licenseβ
GPL-3.0-only
Offline installsβ
tuna-installer-niri detect reports the live-ISO image and embedded OCI
stores as JSON; the QML layer uses it to offer "install this system, no
download" and passes stores as additionalImageStores.
Developmentβ
cd installer && go build -o tuna-installer-backend .
TUNA_BACKEND=$PWD/tuna-installer-backend quickshell -p ../ui/installer.qml
Flatpakβ
flatpak-builder --user --install --force-clean build flatpak/org.tunaos.InstallerNiri.json
flatpak run org.tunaos.InstallerNiri