The bootc-installer project now supports building three desktop environment variants from a single unified codebase:
- GNOME (default) - GTK4/Libadwaita
- XFCE - GTK4 with XFCE styling
- KDE Plasma - Qt/Kirigami native
chmod +x BUILD_ALL_VARIANTS.sh
./BUILD_ALL_VARIANTS.sh --installThis will build and install all three variants as Flatpaks.
Meson:
meson setup build -Dvariant=gnome -Dbuild-fisherman=false
ninja -C buildFlatpak:
flatpak run org.flatpak.Builder --force-clean --user --install _build \
flatpak/org.bootcinstaller.Installer.jsonLaunch:
flatpak run org.bootcinstaller.InstallerMeson:
meson setup build-xfce -Dvariant=xfce -Dbuild-fisherman=false
ninja -C build-xfceFlatpak:
flatpak run org.flatpak.Builder --force-clean --user --install _build-xfce \
flatpak/org.xfceinstaller.Installer.jsonLaunch:
flatpak run org.xfceinstaller.Installer
xfce-bootc-installer # If installed non-FlatpakMeson:
meson setup build-kde -Dvariant=kde -Dbuild-fisherman=false
ninja -C build-kdeFlatpak:
flatpak run org.flatpak.Builder --force-clean --user --install _build-kde \
flatpak/org.kdeinstaller.Installer.jsonLaunch:
flatpak run org.kdeinstaller.Installer
kde-bootc-installer # If installed non-Flatpaktuna-installer/
├── bootc_installer/
│ ├── core/ # Shared business logic
│ ├── utils/ # Shared utilities
│ ├── views/ # GTK4 views (GNOME + XFCE)
│ ├── widgets/ # GTK4 widgets (GNOME + XFCE)
│ ├── windows/ # GTK4 windows (GNOME + XFCE)
│ ├── gtk/ # GTK4 Blueprint UI files
│ ├── kde/ # QML UI (KDE only)
│ ├── main.py # GTK4 entry point
│ ├── main_qt.py # Qt/Kirigami entry point
│ ├── gnome-bootc-installer.in # (not needed, same as bootc-installer.in)
│ ├── xfce-bootc-installer.in # XFCE launcher
│ └── kde-bootc-installer.in # KDE launcher
├── data/
│ ├── org.bootcinstaller.Installer.desktop.in
│ ├── org.xfceinstaller.Installer.desktop.in
│ ├── org.kdeinstaller.Installer.desktop.in
│ ├── org.bootcinstaller.Installer.appdata.xml.in
│ ├── org.xfceinstaller.Installer.appdata.xml.in
│ ├── org.kdeinstaller.Installer.appdata.xml.in
│ ├── polkit/
│ │ ├── org.bootcinstaller.Installer.policy
│ │ ├── org.xfceinstaller.Installer.policy
│ │ └── org.kdeinstaller.Installer.policy
│ └── icons/ # Shared icon assets
├── flatpak/
│ ├── org.bootcinstaller.Installer.json # GNOME
│ ├── org.xfceinstaller.Installer.json # XFCE (xfce-platform)
│ └── org.kdeinstaller.Installer.json # KDE (kde-platform)
├── meson.build # Main build config with variant option
├── meson_options.txt # variant option definition
└── BUILD_ALL_VARIANTS.sh # Script to build all three
The build variant is controlled via:
meson setup build -Dvariant=<gnome|xfce|kde>The meson build system conditionally includes:
- Launcher scripts (xfce-bootc-installer, kde-bootc-installer)
- Desktop files and app metadata
- Polkit policies
- UI resources (GTK4 Blueprints or KDE QML)
- Flatpak manifests (different runtimes)
For GitHub Actions or other CI systems:
- name: Build all bootc-installer variants
run: |
chmod +x BUILD_ALL_VARIANTS.sh
./BUILD_ALL_VARIANTS.sh --clean --installOr build individually:
- name: Build XFCE variant
run: |
flatpak run org.flatpak.Builder --force-clean --user --install _build-xfce \
flatpak/org.xfceinstaller.Installer.json# Terminal 1 - GNOME
flatpak run org.bootcinstaller.Installer
# Terminal 2 - XFCE
flatpak run org.xfceinstaller.Installer
# Terminal 3 - KDE
flatpak run org.kdeinstaller.Installerflatpak list --app --user | grep installerExpected output:
org.bootcinstaller.Installer 0.1.0 system,user
org.xfceinstaller.Installer 0.1.0 system,user
org.kdeinstaller.Installer 0.1.0 system,user
# GNOME
tail -f ~/.cache/tuna-installer/installer-debug.log
# All variants write to same log, but environment shows variant:
BOOTC_INSTALLER_DEBUG=1 flatpak run org.xfceinstaller.InstallerChanges to core/, utils/, fisherman/, etc. affect all three variants automatically.
- GNOME/XFCE: Add
.blpfile tobootc_installer/gtk/, Python class to appropriateviews//widgets//windows/ - KDE: Add QML component, update
kde/main.qml, add Python backend tomain_qt.py
Each variant can have its own:
- Desktop file (
.desktop.in) - AppData metadata (
.appdata.xml.in) - Launcher script (
.in) - Polkit policy (
.policy) - Flatpak manifest (
.json)
Each variant can be distributed separately:
- GNOME:
org.bootcinstaller.Installer- standard bootc-installer - XFCE:
org.xfceinstaller.Installer- for XFCE desktops - KDE:
org.kdeinstaller.Installer- for KDE Plasma desktops
All three variants can be pushed to:
git push origin dev # Single main branch with all variantsOr maintain separate forks:
git checkout feat/xfce-frontend && git push origin feat/xfce-frontend
git checkout feat/kde-frontend && git push origin feat/kde-frontend
git checkout dev && git push origin devThis is expected for local Meson builds. Build via Flatpak instead, which provides all dependencies.
KDE variant requires PyQt6. Install via:
pip install PyQt6Or build via Flatpak (all dependencies provided).
Check the full Flatpak build logs:
tail -f _build/build.log- Expand KDE QML UI with all installer screens
- Add XFCE-specific theming and colors
- Package all three variants in a single Flathub submission
- Integrate with dakota-iso CI/CD for multi-variant builds
- Update project documentation with variant information
- Kirigami: https://develop.kde.org/
- GTK/Libadwaita: https://gnome.pages.gitlab.gnome.org/libadwaita/
- Blueprint: https://jwestman.pages.gitlab.gnome.org/blueprint-compiler/