Spec
Overviewβ
Aurora Tromso is a bootable OCI/bootc image running KDE Plasma 6. It is built with BuildStream on top of freedesktop-sdk, using the same methodology as GNOME OS and Project Bluefin dakota.
All KDE .bst elements (Qt6, Frameworks, Plasma, Apps, base image) live directly in
this repo's elements/ tree β see AGENTS.md for the current structure.
Reference sources used during development:
| Source | Purpose |
|---|---|
invent.kde.org/kde-linux/kde-linux | Authoritative KDE package list and versions |
projectbluefin/dakota | OCI/bootc composition patterns, Justfile |
GNOME/gnome-build-meta | Build infrastructure patterns (bootc, initramfs, etc.) |
freedesktop-sdk | Base SDK β Qt6, systemd, kernel, Mesa, pipewire, etc. |
Repository Structureβ
tuna-os/tromso (this repo)
βββ project.conf # BuildStream project config (name: tromso)
βββ Justfile # Build recipes (bst, build, boot-vm, etc.)
βββ include/
β βββ aliases.yml # URL aliases (kde:, github:, gnome:, etc.)
βββ elements/
βββ freedesktop-sdk.bst # Junction β freedesktop-sdk (base SDK)
βββ kde/ # KDE stack (consolidated in from kde-build-meta)
β βββ qt6/ # Qt6 base, declarative, multimedia, etc.
β βββ frameworks/ # kcoreaddons, kio, kirigami, kwin deps, etc.
β βββ libs/ # libkscreen, qcoro, phonon, etc.
β βββ plasma/ # plasma-workspace, kwin, sddm, discover, etc.
β βββ apps/ # dolphin, kate, okular, konsole, etc.
β βββ deps.bst # Master KDE stack
βββ kde-linux-deps/ # KDE Linux base deps (consolidated in)
βββ kde-linux-system/ # KDE Linux system config/initramfs (consolidated in)
βββ core/ # Core freedesktop-sdk-facing elements
βββ core-deps/ # Core dependency elements
βββ gnomeos-deps/
β βββ bootc.bst # bootc compiled from source (Rust)
βββ sdk/ # SDK-facing elements
βββ sdk-deps/
βββ plugins/ # BuildStream plugins (junctions)
βββ test.bst # Minimal test element
βββ tromso/ # Aurora-specific additions over KDE Linux base
β βββ deps.bst # Master stack of all Aurora additions
β βββ system-config.bst # dbus, sshd, networkd, system users
β βββ containers-config.bst # containers policy.json for bootc runtime
β βββ ldconfig-paths.bst # ld.so.conf.d for Qt6 libraries in /usr/lib
β βββ hardware-enablement.bst # android-udev, iio-sensor-proxy, etc.
β βββ bluefin-common.bst # Bluefin-compatible common payload
β βββ common.bst # Aurora branding and config
β βββ logos.bst # Aurora logos
β βββ wallpapers.bst # Aurora wallpapers
β βββ docs.bst # Documentation
β βββ brew.bst # Homebrew (Linuxbrew) integration
β βββ tailscale.bst # Tailscale VPN
β βββ image-overlay.bst # Aurora image overlay files
β βββ multimedia-overrides.bst # Codec/multimedia config overrides
β βββ fcitx5-cluster.bst # Input method support (CJK, etc.)
β βββ sudo-rs.bst # sudo-rs to preserve setuid binary
β βββ kcm_ublue.bst # KDE Control Module for ublue-style settings
β βββ krunner-bazaar.bst # KRunner plugin for Bazaar
β βββ kde-linux-noto-fontconfig.bst # Noto font configuration for SDDM
βββ oci/
βββ tromso.bst # β Main build target
βββ tromso-ostree.bst # OSTree variant
βββ os-release.bst # Aurora os-release (overrides KDE Linux)
βββ kde-linux/ # KDE Linux base image composition
β βββ image.bst # Parent OCI image (Aurora fork, no bootc build)
β βββ stack.bst # KDE Linux full stack
β βββ filesystem.bst # Filesystem layout
βββ layers/
βββ tromso.bst # Aurora OCI layer (depends on tromso/deps)
βββ tromso-runtime.bst
βββ tromso-stack.bst # Combined: kde-linux/stack + tromso/deps
All KDE .bst elements live directly in this repo β the former
tuna-os/kde-build-meta junction was removed and its elements consolidated
into elements/ (kde/, kde-linux-deps/, kde-linux-system/, core/,
core-deps/, patches/, files/, keys/, plugins/; see AGENTS.md for
the full history). The role formerly played by the kde-build-meta junction
(gnome-build-meta scaffolding rebranded for KDE) is now filled by this
repo's own elements/ tree plus the freedesktop-sdk junction.
Build Pipelineβ
freedesktop-sdk (base SDK, via elements/freedesktop-sdk.bst junction)
βββ elements/kde/ # Qt6, Frameworks 6, Plasma 6, KDE Applications
βββ elements/kde-linux-deps/ # KDE Linux base deps
βββ elements/kde-linux-system/ # system config, initramfs, signed modules
βββ oci/kde-linux/ # KDE Linux base image
βββ elements/tromso/deps.bst # Aurora additions
βββ oci/tromso.bst # Final OCI image
βββ ghcr.io/tuna-os/tromso:latest
The build is fully reproducible: all sources are pinned by git ref or tarball SHA256. BuildGrid is used for distributed compilation β build jobs run on the home cluster over Tailscale and results are cached as content-addressable artifacts.
Design Decisionsβ
| Decision | Choice | Rationale |
|---|---|---|
| Display protocol | Wayland-only | Matches KDE Linux upstream; no X11 session |
| Display manager | SDDM | KDE's preferred DM; integrates with KWallet PAM |
| Init system | systemd | Via freedesktop-sdk |
| Bootloader | systemd-boot | Via bootc install |
| Image format | OCI/bootc | Enables atomic upgrades via bootc upgrade |
| Build system | BuildStream 2 | Same as GNOME OS and dakota; hermetic builds |
| Artifact cache | BuildGrid (gRPC) | Home cluster via Tailscale; survives runner restarts |
Key .bst Patternsβ
KDE cmake elementβ
kind: cmake
build-depends:
- freedesktop-sdk.bst:public-stacks/buildsystem-cmake.bst
- kde/frameworks/extra-cmake-modules.bst
- kde/qt6/qt6-qtbase.bst # required at configure time for Qt6 CMake detection
variables:
cmake-local: >-
-DBUILD_TESTING=OFF
-DWITH_X11=OFF # most frameworks use this; kwindowsystem uses -DKWINDOWSYSTEM_X11=OFF
Note: Use
cmake-local(notcmake-options) for cmake flags in this project.
Transitive build-dependsβ
BuildStream does not automatically propagate CMake config files through depends.
If foo.bst calls find_package(KF6Bar) at configure time, then kde/frameworks/bar.bst
must appear in foo.bst's build-depends, even if it's already in depends.
Updating a pinned elementβ
There is no second repo to keep in sync β elements live in this repo:
# 1. Edit the .bst element (or its source ref) under elements/
# 2. Update the pinned git ref / tarball SHA256 in the element
# 3. Commit + push tromso
cd /path/to/tromso
TMPDIR=/var/tmp git commit -m "Update <element> to <upstream> <ref>"
git push origin main
The only remaining junction is elements/freedesktop-sdk.bst (and the
BuildStream plugins under elements/plugins/); it is pinned by ref and
tracked with track-bst-sources.yml.
CI/CDβ
Primary workflow: .github/workflows/build-buildgrid.yml
GitHub Actions runner
β Generate CI BuildStream config
β bst2 container pull (pinned image SHA)
β just bst build oci/tromso.bst (local CASD build)
β just export (exports OCI tarball)
β skopeo push ghcr.io/tuna-os/tromso:latest
Triggers: push to main (elements/, project.conf, include/), daily at 06:00 UTC, manual dispatch.
Experimental parallel workflow: .github/workflows/build-tromso-multirunner.yml
Splits the build into 10 parallel chunks across GitHub runners using the shared tuna-os/bst-ci reusable workflow (scripts/ci-build-matrix.py no longer lives in this repo).
Triggered manually or by daily schedule.
Packages Not Yet in Auroraβ
The following packages from the KDE Linux package list require new .bst elements
that have not yet been written:
| Package | Notes |
|---|---|
openrazer-daemon | DKMS-based; needs special handling |
yubikey-full-disk-encryption | Hardware security key disk encryption |
vpl-gpu-rt | Intel VPL GPU runtime |
| Python bindings (Shiboken6/PySide6) | Requires packaging from scratch |