Skip to content

desktops: migrate from config/desktop/ tree to armbian-config module_desktops#9683

Open
igorpecovnik wants to merge 7 commits intomainfrom
desktop-to-armbian-config
Open

desktops: migrate from config/desktop/ tree to armbian-config module_desktops#9683
igorpecovnik wants to merge 7 commits intomainfrom
desktop-to-armbian-config

Conversation

@igorpecovnik
Copy link
Copy Markdown
Member

@igorpecovnik igorpecovnik commented Apr 16, 2026

Overview

Replaces Armbian's legacy config/desktop/ machinery (~10,000 lines of package lists, per-DE/per-release postinst scripts, create-package shell scripts, and build-side armbian-desktop/armbian-bsp-desktop meta-package producers) with a single YAML-driven desktop pipeline maintained in armbian/configng under tools/modules/desktops/.

At image-build time the rootfs-create pipeline now calls:

armbian-config --api module_desktops install de=${DESKTOP_ENVIRONMENT} tier=${DESKTOP_TIER:-mid} mode=build

inside the chroot. configng's module_desktops reads its YAML definitions, resolves packages / repo pins / branding / tier overrides for the target (release, arch, DE, tier) and installs the result. The build framework no longer synthesises package lists from config/desktop/…/config_base/packages + appgroup fan-out — that tree is deleted wholesale.

What's in this PR

7 commits, each a self-contained logical unit, in dependency order:

  1. desktops: replace legacy config/desktop/ tree with armbian-config module_desktops — the core wire-up. Rewrites interactive_desktop_main_configuration, hooks module_desktops install mode=build into rootfs-create.sh, deletes config/desktop/ + artifact-armbian-desktop + artifact-armbian-bsp-desktop + rootfs-desktop.sh, drops the duplicate DM-disable, regenerates the library-functions loader. ~9,500 deletions, ~200 insertions.
  2. tools: source desktop inventory from armbian-configng YAMLsarmbian_utils.armbian_get_all_userspace_inventory now subprocesses parse_desktop_yaml.py --list-json instead of walking the removed tree. Keeps status: supported for the auto-generated matrix (community DEs are installable but don't fan out into CI by default; unsupported DEs never).
  3. targets-compositor: add tiers + skip/only-arches to items-from-inventory — two orthogonal knobs for userpatches/targets-*.yaml: tiers: [minimal, mid, full] to emit one rootfs per tier per matched DE, and skip-arches: / only-arches: for arch-level filtering on the items side (mirrors the existing desktops-side filters).
  4. desktops: backwards-compat for legacy DESKTOP_APPGROUPS_SELECTED — userpatches in the wild still set this; map non-empty values to tier=full when DESKTOP_TIER isn't explicit, with "none" treated as empty.
  5. rootfs-create: restore armbian-plymouth-theme install to distro-agnostic — move the install back into the post-cache path so it lands on every desktop image, cache-hit or cache-miss.
  6. artifact-rootfs: stop forcing SKIP_ARMBIAN_REPO=yes; default to noarmbian-config lives in <release>-utils on apt.armbian.com; the new rootfs-create flow needs the repo attached during assembly.
  7. rootfs cache: refresh configng every build; fingerprint tier + hash into cache_type — two cache-correctness bugs: (a) fetch_from_repo armbian-configng was gated on -z $DESKTOP_ENVIRONMENT so non-interactive (CI / items-from-inventory) builds never refreshed the clone and the cache-key input was stale; (b) cache_type encoded DE but not DESKTOP_TIER and not any fingerprint of the configng tree, so tier=minimal and tier=full collided, and configng commits didn't produce cache misses. Both fixed.

Non-desktop-related cleanup commits were split out of this PR into #9704 (verbose mmdebstrap, DOCKER_PRUNE=yes opt-in, broken drm/xe patches disabled). #9704 is not a prerequisite here and vice-versa.

Companion work in other repos

This PR lands alongside a large body of work in the rest of the Armbian org:

armbian/configng — new home of everything desktop

  • New tools/modules/desktops/ subsystem: 11 per-DE YAML files, common.yaml with shared tier definitions + browser substitution table + tier_overrides (arch-wide and per-release-per-arch), the standalone scripts/parse_desktop_yaml.py CLI, the main module_desktops.sh dispatcher, per-module helpers (module_desktop_branding.sh, module_desktop_repo.sh, module_desktop_yamlparse.sh, module_desktop_getuser.sh, module_update_skel.sh), optional postinst/<de>.sh hooks, shared branding (wallpapers, greeters, skel, browser policy files), and greeter configs (lightdm + sddm plasma-chili theme).
  • module_desktops supports: install / remove / upgrade / downgrade / set-tier / tier / at-tier / status / auto / manual / login / supported / installed. install mode=build skips user / DM / skel work for image-build contexts.
  • Install pipeline: apt pin write → custom repo setup → apt install of resolved package list → DM install → armbian-plymouth-theme (runtime only) → manifest + tier marker under /etc/armbian/desktop/ → branding copy → (if live) group adds, skel propagation, DM start, auto-login config.
  • Remove pipeline: manifest-driven purge with essential-package filtering (apt-get -s purge dry-run, drop anything flagged as essential-breaking, then real purge) — avoids the e2fsprogs / libext2fs2t64 vetos that cancel the whole transaction on post-t64 base images.
  • Runtime networking transition: _module_desktops_configure_networking flips /etc/netplan/ from renderer: networkd to renderer: NetworkManager on a live install so the NM applet actually controls the link, mirroring the build-time extension in armbian/build/extensions/network/.
  • parse_desktop_yaml.py emits DESKTOP_PACKAGES / DESKTOP_PACKAGES_UNINSTALL / DESKTOP_DM / DESKTOP_STATUS / DESKTOP_AVAILABLE / DESKTOP_PRIMARY_PKG / DESKTOP_REPO_*, plus --list / --list-json / --primaries modes with --filter available|unavailable|all and --status <csv> axes.
  • Maintenance GHA workflows: maintenance-desktop-audit.yml (weekly, Claude-assisted YAML drift PRs), maintenance-unit-tests.yml (multi-arch matrix with native + qemu-emulated runners, per-test JSON results, publish to armbian.github.io, backfill for runner-killed jobs).
  • Test harness: per-DE tests/<DE>NN.conf with RELEASE / TESTARCH / tier knobs. Current coverage: XFCE01/02 + GNME01/02 on bookworm/trixie/noble/resolute × arm64/amd64/armhf/riscv64 where supported.

armbian/os — targets YAML catch-up

  • userpatches/targets-all-not-eos.yaml rewritten: tiers: [minimal, mid, full] on every items-from-inventory.userspace block, skip-releases: [questing, sid], only-desktops: dropped (rely on configng's status filter in the compositor), loong64 scoped to sid + tiers: [minimal] only.
  • external/widevine-noble.conf added — pulls libwidevinecdm0 arm64/armhf from liujianfeng1994/rockchip-multimedia PPA so Chromium can play DRM-protected streams on noble desktops.
  • external/chromium-*.conf + firefox-*.conf suite aligned with the browser map in configng's common.yaml.

armbian/documentationDeveloper-Guide_Desktops.md

Full rewrite of the Desktops developer guide: YAML schema, tier model, resolution algorithm, browser virtual-token lookup, tier_overrides two-layer schema, module_desktops bash API surface, lifecycle diagrams for install / remove / upgrade / downgrade / set-tier, container/CI awareness, "adding a new desktop" recipe, matrix-audit automation, common pitfalls (packages_uninstall cascade, gdm3 daemon.conf vs custom.conf, login-regex anchoring), security notes (path traversal, shell-escaping, GPG keyring fetch, apt [signed-by=]).

armbian/docker-armbian-build — build-time container images

.github/workflows/build-docker-images.yml gained riscv64 + armhf in its matrix so the configng unit-test workflow can pull per-(release, arch) base images for every slot including the qemu-emulated ones. .github/dependabot.yml added for github-actions ecosystem tracking.

armbian/armbian.github.io — publish + repo plumbing

  • infrastructure-download-external.yml: preclean / postclean purge jobs now gated on CHUNK_INDEX == 0 so the repo-side delete op runs exactly once per workflow instead of 4× in parallel (the fan-out is only useful for per-package download, not for shared-state aptly deletes).
  • infrastructure-repository-update.yml: added Fix workspace ownership pre-checkout steps on every runs-on: repository job so rerun / multi-runner handoffs don't trip actions/checkout@v6 on root-owned workspace leftovers.
  • configng unit-test-results publishing added (new data branch feed) modelled after data-update-jira-excerpt.yml — commits to data branch with retry-rebase, then repository_dispatchWeb: Directory listing to trigger the site rebuild.

Test plan

  • ./compile.sh BOARD=uefi-x86 BRANCH=current RELEASE=trixie BUILD_DESKTOP=yes DESKTOP_ENVIRONMENT=xfce DESKTOP_TIER=mid — rootfs assembles, armbian-config installs from apt.armbian.com, module_desktops install mode=build pulls xfce from configng YAML, image boots with NM-driven network + lightdm + XFCE default wallpaper.
  • Non-desktop builds (BUILD_MINIMAL=yes, CLI) unaffected — no configng clone pulled, no desktop code paths touched.
  • parse_desktop_yaml.py --list-json <release> <arch> resolves the expected supported DEs for every non-eos release we ship.
  • configng unit-test matrix green across (arm64, amd64, armhf, riscv64) × (trixie, noble, resolute) where configng YAML declares support.
  • items-from-inventory expansion produces the right slot count for targets-all-not-eos.yaml (~360 userspace rootfs + board-based all-desktop/all-cli images).
  • Bumping configng's main HEAD and re-running any desktop build produces a cache miss (filename suffix changes due to commit cma error #7's CONFIGNG_DESKTOPS_HASH fingerprint in cache_type).
  • DESKTOP_APPGROUPS_SELECTED=office,multimedia ./compile.sh … logs the back-compat mapping and produces a tier=full rootfs.

Rollback

Revert in reverse order. Commit #1 is the hardest to roll back cleanly (legacy config/desktop/ tree is recoverable from git history but is 10K+ lines). Commits #2#7 are each small and independently revertable.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Apr 16, 2026

Important

Review skipped

Too many files!

This PR contains 300 files, which is 150 over the limit of 150.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 8c3b3e8f-1f90-42f1-b6f3-b5e7fca236fc

📥 Commits

Reviewing files that changed from the base of the PR and between 3697435 and 0f8c676.

📒 Files selected for processing (300)
  • .github/labeler.yml
  • action.yml
  • config/boards/README.md
  • config/boards/aml-t95z-plus.tvb
  • config/boards/ayn-odin2mini.csc
  • config/boards/ayn-odin2portal.csc
  • config/boards/ayn-thor.csc
  • config/boards/gateway-dk.conf
  • config/boards/olimex-som204-a20.eos
  • config/boards/virtual-qemu.eos
  • config/desktop/README.md
  • config/desktop/_all_distributions/appgroups/programming/packages
  • config/desktop/_all_distributions/appgroups/programming/sources/apt/githubcli.gpg
  • config/desktop/_all_distributions/appgroups/programming/sources/apt/githubcli.source
  • config/desktop/bookworm/appgroups/browsers/armbian/create_desktop_package.sh
  • config/desktop/bookworm/appgroups/browsers/debian/postinst
  • config/desktop/bookworm/appgroups/browsers/packages
  • config/desktop/bookworm/appgroups/chat
  • config/desktop/bookworm/appgroups/desktop_tools
  • config/desktop/bookworm/appgroups/editors
  • config/desktop/bookworm/appgroups/internet/packages
  • config/desktop/bookworm/appgroups/multimedia
  • config/desktop/bookworm/appgroups/office
  • config/desktop/bookworm/appgroups/programming/packages
  • config/desktop/bookworm/appgroups/remote_desktop
  • config/desktop/bookworm/environments/budgie/architectures
  • config/desktop/bookworm/environments/budgie/armbian/create_desktop_package.sh
  • config/desktop/bookworm/environments/budgie/config_base/packages
  • config/desktop/bookworm/environments/budgie/debian/postinst
  • config/desktop/bookworm/environments/budgie/support
  • config/desktop/bookworm/environments/cinnamon/architectures
  • config/desktop/bookworm/environments/cinnamon/armbian/create_desktop_package.sh
  • config/desktop/bookworm/environments/cinnamon/config_base/packages
  • config/desktop/bookworm/environments/cinnamon/config_base/packages.uninstall
  • config/desktop/bookworm/environments/cinnamon/debian/postinst
  • config/desktop/bookworm/environments/cinnamon/support
  • config/desktop/bookworm/environments/gnome/architectures
  • config/desktop/bookworm/environments/gnome/armbian/create_desktop_package.sh
  • config/desktop/bookworm/environments/gnome/config_base/packages
  • config/desktop/bookworm/environments/gnome/debian/postinst
  • config/desktop/bookworm/environments/gnome/support
  • config/desktop/bookworm/environments/i3-wm/architectures
  • config/desktop/bookworm/environments/i3-wm/armbian
  • config/desktop/bookworm/environments/i3-wm/config_base/packages
  • config/desktop/bookworm/environments/i3-wm/debian
  • config/desktop/bookworm/environments/i3-wm/support
  • config/desktop/bookworm/environments/kde-plasma/architectures
  • config/desktop/bookworm/environments/kde-plasma/armbian/create_desktop_package.sh
  • config/desktop/bookworm/environments/kde-plasma/config_base/packages
  • config/desktop/bookworm/environments/kde-plasma/debian/postinst
  • config/desktop/bookworm/environments/kde-plasma/support
  • config/desktop/bookworm/environments/mate/architectures
  • config/desktop/bookworm/environments/mate/armbian/create_desktop_package.sh
  • config/desktop/bookworm/environments/mate/config_base/packages
  • config/desktop/bookworm/environments/mate/debian/postinst
  • config/desktop/bookworm/environments/mate/support
  • config/desktop/bookworm/environments/xfce/architectures
  • config/desktop/bookworm/environments/xfce/armbian/create_desktop_package.sh
  • config/desktop/bookworm/environments/xfce/config_base/packages
  • config/desktop/bookworm/environments/xfce/debian/postinst
  • config/desktop/bookworm/environments/xfce/support
  • config/desktop/bookworm/environments/xmonad/architectures
  • config/desktop/bookworm/environments/xmonad/armbian/create_desktop_package.sh
  • config/desktop/bookworm/environments/xmonad/config_base/packages
  • config/desktop/bookworm/environments/xmonad/debian/postinst
  • config/desktop/bookworm/environments/xmonad/support
  • config/desktop/common/appgroups/browsers/armbian/create_desktop_package.sh
  • config/desktop/common/appgroups/browsers/debian/postinst
  • config/desktop/common/appgroups/browsers/packages
  • config/desktop/common/appgroups/chat/packages
  • config/desktop/common/appgroups/desktop_tools/packages
  • config/desktop/common/appgroups/editors/packages
  • config/desktop/common/appgroups/email/packages
  • config/desktop/common/appgroups/internet/packages
  • config/desktop/common/appgroups/multimedia/packages
  • config/desktop/common/appgroups/office/packages
  • config/desktop/common/appgroups/programming/custom/desktops/cinnamon/packages
  • config/desktop/common/appgroups/programming/custom/desktops/gnome/packages
  • config/desktop/common/appgroups/programming/custom/desktops/kde/packages
  • config/desktop/common/appgroups/programming/packages
  • config/desktop/common/appgroups/remote_desktop/packages
  • config/desktop/common/environments/budgie/architectures
  • config/desktop/common/environments/budgie/armbian/create_desktop_package.sh
  • config/desktop/common/environments/budgie/config_base/packages
  • config/desktop/common/environments/budgie/config_base/packages.uninstall
  • config/desktop/common/environments/budgie/debian/postinst
  • config/desktop/common/environments/budgie/support
  • config/desktop/common/environments/cinnamon/architectures
  • config/desktop/common/environments/cinnamon/armbian/create_desktop_package.sh
  • config/desktop/common/environments/cinnamon/config_base/packages
  • config/desktop/common/environments/cinnamon/config_base/packages.uninstall
  • config/desktop/common/environments/cinnamon/debian/postinst
  • config/desktop/common/environments/cinnamon/support
  • config/desktop/common/environments/deepin/architectures
  • config/desktop/common/environments/deepin/armbian/create_desktop_package.sh
  • config/desktop/common/environments/deepin/config_base/packages
  • config/desktop/common/environments/deepin/config_base/packages.uninstall
  • config/desktop/common/environments/deepin/debian/postinst
  • config/desktop/common/environments/deepin/support
  • config/desktop/common/environments/enlightenment/architectures
  • config/desktop/common/environments/enlightenment/armbian/create_desktop_package.sh
  • config/desktop/common/environments/enlightenment/config_base/packages
  • config/desktop/common/environments/enlightenment/config_base/packages.uninstall
  • config/desktop/common/environments/enlightenment/debian/postinst
  • config/desktop/common/environments/enlightenment/support
  • config/desktop/common/environments/gnome/architectures
  • config/desktop/common/environments/gnome/armbian/create_desktop_package.sh
  • config/desktop/common/environments/gnome/config_base/packages
  • config/desktop/common/environments/gnome/debian/postinst
  • config/desktop/common/environments/gnome/support
  • config/desktop/common/environments/i3-wm/architectures
  • config/desktop/common/environments/i3-wm/armbian/create_desktop_package.sh
  • config/desktop/common/environments/i3-wm/config_base/packages
  • config/desktop/common/environments/i3-wm/debian/postinst
  • config/desktop/common/environments/i3-wm/support
  • config/desktop/common/environments/kde-plasma/architectures
  • config/desktop/common/environments/kde-plasma/armbian/create_desktop_package.sh
  • config/desktop/common/environments/kde-plasma/config_base/packages
  • config/desktop/common/environments/kde-plasma/config_base/packages.uninstall
  • config/desktop/common/environments/kde-plasma/debian/postinst
  • config/desktop/common/environments/kde-plasma/support
  • config/desktop/common/environments/mate/architectures
  • config/desktop/common/environments/mate/armbian/create_desktop_package.sh
  • config/desktop/common/environments/mate/config_base/packages
  • config/desktop/common/environments/mate/debian/postinst
  • config/desktop/common/environments/mate/support
  • config/desktop/common/environments/xfce/appgroups/programming/packages
  • config/desktop/common/environments/xfce/architectures
  • config/desktop/common/environments/xfce/armbian/create_desktop_package.sh
  • config/desktop/common/environments/xfce/config_base/packages
  • config/desktop/common/environments/xfce/config_base/packages.uninstall
  • config/desktop/common/environments/xfce/debian/armbian-bsp-desktop/postinst
  • config/desktop/common/environments/xfce/debian/armbian-bsp-desktop/prepare.sh
  • config/desktop/common/environments/xfce/debian/postinst
  • config/desktop/common/environments/xfce/support
  • config/desktop/common/environments/xmonad/architectures
  • config/desktop/common/environments/xmonad/armbian/create_desktop_package.sh
  • config/desktop/common/environments/xmonad/config_base/packages
  • config/desktop/common/environments/xmonad/debian/postinst
  • config/desktop/common/environments/xmonad/support
  • config/desktop/forky
  • config/desktop/jammy/appgroups
  • config/desktop/jammy/environments/budgie/architectures
  • config/desktop/jammy/environments/budgie/armbian
  • config/desktop/jammy/environments/budgie/config_base/packages
  • config/desktop/jammy/environments/budgie/config_base/packages.uninstall
  • config/desktop/jammy/environments/budgie/debian
  • config/desktop/jammy/environments/budgie/support
  • config/desktop/jammy/environments/cinnamon/architectures
  • config/desktop/jammy/environments/cinnamon/armbian
  • config/desktop/jammy/environments/cinnamon/config_base/packages
  • config/desktop/jammy/environments/cinnamon/config_base/packages.uninstall
  • config/desktop/jammy/environments/cinnamon/debian
  • config/desktop/jammy/environments/cinnamon/support
  • config/desktop/jammy/environments/gnome/architectures
  • config/desktop/jammy/environments/gnome/armbian
  • config/desktop/jammy/environments/gnome/config_base/packages
  • config/desktop/jammy/environments/gnome/debian
  • config/desktop/jammy/environments/gnome/support
  • config/desktop/jammy/environments/i3-wm/architectures
  • config/desktop/jammy/environments/i3-wm/armbian
  • config/desktop/jammy/environments/i3-wm/config_base/packages
  • config/desktop/jammy/environments/i3-wm/debian
  • config/desktop/jammy/environments/i3-wm/support
  • config/desktop/jammy/environments/kde-neon/architectures
  • config/desktop/jammy/environments/kde-neon/armbian
  • config/desktop/jammy/environments/kde-neon/config_base/packages
  • config/desktop/jammy/environments/kde-neon/config_base/packages.uninstall
  • config/desktop/jammy/environments/kde-neon/debian
  • config/desktop/jammy/environments/kde-neon/sources/apt/neon.gpg
  • config/desktop/jammy/environments/kde-neon/sources/apt/neon.source
  • config/desktop/jammy/environments/kde-neon/support
  • config/desktop/jammy/environments/kde-plasma/architectures
  • config/desktop/jammy/environments/kde-plasma/armbian
  • config/desktop/jammy/environments/kde-plasma/config_base/packages
  • config/desktop/jammy/environments/kde-plasma/config_base/packages.uninstall
  • config/desktop/jammy/environments/kde-plasma/debian
  • config/desktop/jammy/environments/kde-plasma/support
  • config/desktop/jammy/environments/mate/architectures
  • config/desktop/jammy/environments/mate/armbian
  • config/desktop/jammy/environments/mate/config_base/packages
  • config/desktop/jammy/environments/mate/debian
  • config/desktop/jammy/environments/mate/support
  • config/desktop/jammy/environments/xfce/appgroups
  • config/desktop/jammy/environments/xfce/architectures
  • config/desktop/jammy/environments/xfce/armbian
  • config/desktop/jammy/environments/xfce/config_base/packages
  • config/desktop/jammy/environments/xfce/config_base/packages.uninstall
  • config/desktop/jammy/environments/xfce/debian
  • config/desktop/jammy/environments/xfce/support
  • config/desktop/jammy/environments/xmonad/architectures
  • config/desktop/jammy/environments/xmonad/armbian
  • config/desktop/jammy/environments/xmonad/config_base/packages
  • config/desktop/jammy/environments/xmonad/debian
  • config/desktop/jammy/environments/xmonad/support
  • config/desktop/noble/appgroups
  • config/desktop/noble/environments/cinnamon
  • config/desktop/noble/environments/gnome
  • config/desktop/noble/environments/i3-wm/architectures
  • config/desktop/noble/environments/i3-wm/armbian/create_desktop_package.sh
  • config/desktop/noble/environments/i3-wm/config_base/packages
  • config/desktop/noble/environments/i3-wm/debian/postinst
  • config/desktop/noble/environments/i3-wm/support
  • config/desktop/noble/environments/kde-neon/architectures
  • config/desktop/noble/environments/kde-neon/armbian
  • config/desktop/noble/environments/kde-neon/config_base/packages
  • config/desktop/noble/environments/kde-neon/config_base/packages.uninstall
  • config/desktop/noble/environments/kde-neon/debian
  • config/desktop/noble/environments/kde-neon/sources/apt/neon.gpg
  • config/desktop/noble/environments/kde-neon/sources/apt/neon.source
  • config/desktop/noble/environments/kde-neon/support
  • config/desktop/noble/environments/kde-plasma
  • config/desktop/noble/environments/xfce/appgroups
  • config/desktop/noble/environments/xfce/architectures
  • config/desktop/noble/environments/xfce/armbian
  • config/desktop/noble/environments/xfce/config_base/packages
  • config/desktop/noble/environments/xfce/config_base/packages.uninstall
  • config/desktop/noble/environments/xfce/debian
  • config/desktop/noble/environments/xfce/support
  • config/desktop/oracular
  • config/desktop/plucky/appgroups/browsers/armbian/create_desktop_package.sh
  • config/desktop/plucky/appgroups/browsers/debian/postinst
  • config/desktop/plucky/appgroups/browsers/packages
  • config/desktop/plucky/appgroups/chat/packages
  • config/desktop/plucky/appgroups/desktop_tools/packages
  • config/desktop/plucky/appgroups/editors/packages
  • config/desktop/plucky/appgroups/email/packages
  • config/desktop/plucky/appgroups/internet/packages
  • config/desktop/plucky/appgroups/multimedia/packages
  • config/desktop/plucky/appgroups/office/packages
  • config/desktop/plucky/appgroups/programming/custom/desktops/cinnamon/packages
  • config/desktop/plucky/appgroups/programming/custom/desktops/gnome/packages
  • config/desktop/plucky/appgroups/programming/custom/desktops/kde/packages
  • config/desktop/plucky/appgroups/programming/packages
  • config/desktop/plucky/appgroups/remote_desktop/packages
  • config/desktop/plucky/environments/cinnamon/architectures
  • config/desktop/plucky/environments/cinnamon/armbian/create_desktop_package.sh
  • config/desktop/plucky/environments/cinnamon/config_base/packages
  • config/desktop/plucky/environments/cinnamon/config_base/packages.uninstall
  • config/desktop/plucky/environments/cinnamon/debian/postinst
  • config/desktop/plucky/environments/cinnamon/support
  • config/desktop/plucky/environments/gnome
  • config/desktop/plucky/environments/i3-wm/architectures
  • config/desktop/plucky/environments/i3-wm/armbian/create_desktop_package.sh
  • config/desktop/plucky/environments/i3-wm/config_base/packages
  • config/desktop/plucky/environments/i3-wm/debian/postinst
  • config/desktop/plucky/environments/i3-wm/support
  • config/desktop/plucky/environments/kde-neon/architectures
  • config/desktop/plucky/environments/kde-neon/armbian
  • config/desktop/plucky/environments/kde-neon/config_base/packages
  • config/desktop/plucky/environments/kde-neon/config_base/packages.uninstall
  • config/desktop/plucky/environments/kde-neon/debian
  • config/desktop/plucky/environments/kde-neon/sources/apt/neon.gpg
  • config/desktop/plucky/environments/kde-neon/sources/apt/neon.source
  • config/desktop/plucky/environments/kde-neon/support
  • config/desktop/plucky/environments/kde-plasma/architectures
  • config/desktop/plucky/environments/kde-plasma/armbian
  • config/desktop/plucky/environments/kde-plasma/config_base/packages
  • config/desktop/plucky/environments/kde-plasma/config_base/packages.uninstall
  • config/desktop/plucky/environments/kde-plasma/debian
  • config/desktop/plucky/environments/kde-plasma/support
  • config/desktop/plucky/environments/xfce/appgroups
  • config/desktop/plucky/environments/xfce/architectures
  • config/desktop/plucky/environments/xfce/armbian
  • config/desktop/plucky/environments/xfce/config_base/packages
  • config/desktop/plucky/environments/xfce/config_base/packages.uninstall
  • config/desktop/plucky/environments/xfce/debian
  • config/desktop/plucky/environments/xfce/support
  • config/desktop/sid/appgroups
  • config/desktop/sid/environments/cinnamon
  • config/desktop/sid/environments/gnome
  • config/desktop/sid/environments/kde-plasma
  • config/desktop/sid/environments/mate
  • config/desktop/sid/environments/xfce/architectures
  • config/desktop/sid/environments/xfce/armbian/create_desktop_package.sh
  • config/desktop/sid/environments/xfce/config_base/packages
  • config/desktop/sid/environments/xfce/debian/postinst
  • config/desktop/sid/environments/xfce/support
  • config/desktop/trixie/appgroups/browsers/armbian/create_desktop_package.sh
  • config/desktop/trixie/appgroups/browsers/debian/postinst
  • config/desktop/trixie/appgroups/browsers/packages
  • config/desktop/trixie/appgroups/chat
  • config/desktop/trixie/appgroups/desktop_tools
  • config/desktop/trixie/appgroups/editors
  • config/desktop/trixie/appgroups/internet/packages
  • config/desktop/trixie/appgroups/multimedia
  • config/desktop/trixie/appgroups/office
  • config/desktop/trixie/appgroups/programming/packages
  • config/desktop/trixie/appgroups/remote_desktop
  • config/desktop/trixie/environments/budgie/architectures
  • config/desktop/trixie/environments/budgie/armbian/create_desktop_package.sh
  • config/desktop/trixie/environments/budgie/config_base/packages
  • config/desktop/trixie/environments/budgie/debian/postinst
  • config/desktop/trixie/environments/budgie/support
  • config/desktop/trixie/environments/cinnamon/architectures
  • config/desktop/trixie/environments/cinnamon/armbian/create_desktop_package.sh
  • config/desktop/trixie/environments/cinnamon/config_base/packages
  • config/desktop/trixie/environments/cinnamon/config_base/packages.uninstall
  • config/desktop/trixie/environments/cinnamon/debian/postinst
  • config/desktop/trixie/environments/cinnamon/support

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch desktop-to-armbian-config

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions github-actions bot added 05 Milestone: Second quarter release size/large PR with 250 lines or more Desktop Graphical user interface Needs review Seeking for review Framework Framework components Documentation Documentation changes or additions labels Apr 16, 2026
igorpecovnik added a commit to armbian/documentation that referenced this pull request Apr 16, 2026
Adds the `mode=build` parameter to the command synopsis and the
install lifecycle table. Each step is now tagged:

  [B] = runs in both modes (build + runtime)
  [R] = runtime-only (skipped when mode=build)

Explains when/why mode=build is used (image-build time, no user)
and how the first boot inherits skel + graphical.target.

Matches armbian/configng#859 (implementation) and armbian/build#9683
(build framework consumer).
@igorpecovnik igorpecovnik force-pushed the desktop-to-armbian-config branch from ddbbcc0 to bda6655 Compare April 16, 2026 12:15
@igorpecovnik igorpecovnik changed the title desktops: replace legacy machinery with armbian-config module_desktops desktops: replace legacy machinery with armbian-config + silence build log noise Apr 16, 2026
@igorpecovnik igorpecovnik force-pushed the desktop-to-armbian-config branch 4 times, most recently from 9e10a14 to e7fbcdc Compare April 16, 2026 22:22
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Apr 16, 2026

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
{}

@igorpecovnik igorpecovnik force-pushed the desktop-to-armbian-config branch 6 times, most recently from bef77d3 to f2b2344 Compare April 16, 2026 23:58
@igorpecovnik igorpecovnik changed the title desktops: replace legacy machinery with armbian-config + silence build log noise desktops: replace legacy machinery with armbian-config module_desktops Apr 16, 2026
@igorpecovnik igorpecovnik force-pushed the desktop-to-armbian-config branch from 4e957b7 to 8cefebb Compare April 17, 2026 09:38
@github-actions github-actions bot added the GitHub GitHub-related changes like labels, templates, ... label Apr 17, 2026
@igorpecovnik igorpecovnik force-pushed the desktop-to-armbian-config branch from 4dfe80e to ca3f9e9 Compare April 18, 2026 05:35
@igorpecovnik igorpecovnik added Work in progress Unfinished / work in progress and removed Needs review Seeking for review labels Apr 19, 2026
@github-actions github-actions bot added Needs review Seeking for review Patches Patches related to kernel, U-Boot, ... labels Apr 19, 2026
@igorpecovnik igorpecovnik force-pushed the desktop-to-armbian-config branch from 0ea3727 to 43eae27 Compare April 20, 2026 13:03
@igorpecovnik igorpecovnik changed the title desktops: replace legacy machinery with armbian-config module_desktops desktops: migrate from config/desktop/ tree to armbian-config module_desktops Apr 20, 2026
@igorpecovnik igorpecovnik changed the title desktops: migrate from config/desktop/ tree to armbian-config module_desktops desktops: migrate from config/desktop/ tree to armbian-config module_desktops Apr 20, 2026
…ule_desktops

Desktop builds no longer synthesise a per-DE, per-release, per-appgroup
package list from config/desktop/*/environments/*/config_base/packages
plus config/desktop/*/appgroups/*/packages. Instead, rootfs-create.sh
calls `armbian-config --api module_desktops install de=$DESKTOP_ENVIRONMENT
tier=$DESKTOP_TIER mode=build` inside the chroot, and armbian-config's
YAML-driven module_desktops assembles the install from its
tools/modules/desktops/yaml/*.yaml definitions at build time.

  * config/desktop/ tree (hundreds of config_base/packages, postinst,
    create_desktop_package.sh, architectures, support files) is
    deleted wholesale. The source of truth for desktop packages,
    branding, tiers, custom repos, and per-arch/per-release overrides
    now lives in armbian/configng under tools/modules/desktops/.

  * interactive_desktop_main_configuration in config-desktop.sh
    rewritten: clones armbian-configng to cache/sources/, runs the
    standalone Python parser for the DE list, shows the menu with a
    [CSC] marker for community-maintained DEs, collects DESKTOP_TIER
    (minimal / mid / full). Menu filters on the parser's --status
    flag: 'supported' by default, 'supported,community' under EXPERT.

  * rootfs-create.sh installs armbian-config via apt + runs
    `module_desktops install mode=build` while the Armbian apt repo
    is still attached, so apt.armbian.com's <release>-utils and
    <release>-desktop components (armbian-config itself, firefox,
    chromium, GNOME-branded bits) are reachable.

  * aggregation.py simplified: the per-appgroup fan-out is gone, so
    the rootfs package list no longer tries to resolve appgroup paths
    that don't exist anymore.

  * Redundant display-manager disable was in distro-agnostic.sh to
    work around the old post-cache DM auto-enable; module_desktops in
    mode=build already handles srv_disable internally. Drop the
    duplicate.

  * Misc chroot hygiene: systemd disable noise suppressed where the
    service never existed in the chroot; library-functions.sh
    regenerated to match the new loader surface.

No backwards-compat yet for users passing legacy
DESKTOP_ENVIRONMENT_CONFIG_NAME / DESKTOP_APPGROUPS_SELECTED — that
comes in a follow-up commit in this PR.
armbian_utils.armbian_get_all_userspace_inventory used to walk
config/desktop/{release}/environments/ and config/desktop/common/
to discover which desktops a release shipped + which arches each
DE supported. That tree was removed in the previous commit.

Re-derive the same inventory by subprocessing armbian-configng's
standalone parse_desktop_yaml.py with --list-json. The parser
reads tools/modules/desktops/yaml/*.yaml and emits a
{name, status, architectures, ...} record per DE; we keep only
entries with status == 'supported' for the auto-generated build
matrix (status == 'community' is installable on a running system
but shouldn't spawn CI matrix slots by default — that's the
operator's call; status == 'unsupported' is vendor-specific and
never built).

Drop:
  - the now-unreachable per-arch / per-release walkers in
    targets-compositor.py and the tombstone .eos + labeler.yml
    entries that pointed at config/desktop/.
  - the 'any appgroup combination' matrix expansion in
    aggregation.py — the tier model subsumes that axis.

The armbian-configng clone under cache/sources/armbian-configng
is populated by interactive_desktop_main_configuration (see the
earlier commit) and refreshed on every desktop build. The
cli-jsoninfo.sh CLI gained a parallel fetch for the same clone
so 'compile.sh configdump-json' can report the new inventory
without relying on an interactive-path side-effect.
Two orthogonal knobs for userspace blocks in
userpatches/targets-*.yaml:

  * tiers: [minimal, mid, full]
      Emit one item per tier for every matched (release, arch,
      desktop) triple. armbian-config's module_desktops treats
      minimal / mid / full as separate install targets with
      different package sets, so they can't share a rootfs
      artifact — they need separate matrix items. Default stays
      ['mid'] so pre-existing targets that don't know about this
      knob keep producing one userspace per desktop, same as
      before. Targets that want the full fan-out set
      'tiers: [minimal, mid, full]' explicitly.

  * skip-arches: [loong64]
    only-arches: [armhf]
      Post-filter the arch set after the inventory expansion.
      Existed on the desktops axis before ('skip-desktops' /
      'only-desktops'); now mirrored on the arches axis. Used
      by the os-repo targets yaml to e.g. skip loong64 from an
      otherwise all-arches block that would normally pick it up.

Also fold a few per-board ARCH overrides into
config/boards/ (aml-t95z-plus.tvb gains its fourth arch, the
new ayn-odin2* boards declare arm64 explicitly, etc.) since the
inventory expansion is now arch-aware at the target-yaml level
and boards need to declare their arch for the filter to match.
The tier model (minimal / mid / full) subsumes the old per-group
package axis — 'full' already includes everything the old
appgroups provided (office, multimedia, programming, chat,
remote_desktop, desktop_tools, editors, email, internet).

Userpatches and board configs in the wild still set
DESKTOP_APPGROUPS_SELECTED, and silently ignoring it would
produce a thinner desktop than the user expects. Map it to
tier=full when DESKTOP_TIER isn't set explicitly, with one
carve-out: the sentinel 'none' (meaning 'base DE, no extras')
is treated as empty — the user didn't actually pick any
appgroups, so don't upgrade them to tier=full on the basis of
a placeholder value.

Print a one-liner warning so the operator sees the mapping
and can switch to explicit tier= when they next edit the
config.
armbian-plymouth-theme was installed from rootfs-create.sh after
the rootfs cache was extracted. That's the wrong place for it:
distro-agnostic.sh already owns the 'post-cache, pre-image' step
where branding and bsp packages land, and splitting plymouth out
into its own call in rootfs-create means it runs in the
per-chroot pre-cache path on builds that hit a cache miss, but
NOT in the post-cache path on a cache hit — inconsistent.

Move the install back into distro-agnostic.sh where every
desktop build passes through it regardless of rootfs cache
state, and drop the corresponding stanza from rootfs-create.sh.
Net: plymouth ends up on every desktop image, cache-hit or
cache-miss, with no code duplication.
artifact_rootfs_cli_adapter_config_prep set SKIP_ARMBIAN_REPO=yes
unconditionally, which made sense when rootfs assembly only
needed the distro archive. It doesn't anymore: the new desktop
install path runs 'armbian-config --api module_desktops install
mode=build' from inside rootfs-create.sh (see earlier commit in
this PR), and armbian-config itself lives in the <release>-utils
component of apt.armbian.com, with firefox / chromium / GNOME
branding in <release>-desktop.

With SKIP_ARMBIAN_REPO=yes forced on, the install step would hit
'E: Unable to locate package armbian-config' at rootfs-create
time for every desktop build. Default the variable to 'no'
instead, so apt.armbian.com is attached during rootfs assembly,
and make it a readonly '-g -r' declaration so a hook can't flip
it back under our feet. Boards / userpatches that still need the
old repo-free behaviour (air-gapped mirror setups, exotic
embedded use cases) can still pre-set SKIP_ARMBIAN_REPO=yes
before the function runs — the ':-' default only kicks in when
it's unset.
…nto cache_type

Two bugs that conspired to make 'new configng commit but still
served the old rootfs from cache' the default behaviour.

1. The fetch_from_repo for armbian-configng was gated inside the
   '[[ -z $DESKTOP_ENVIRONMENT ]]' branch of
   interactive_desktop_main_configuration, so it only fired when
   the user picked a DE from the interactive dialog. Every
   non-interactive build (CI, items-from-inventory, scripted
   local with DESKTOP_ENVIRONMENT= pre-set) skipped the fetch —
   which left whatever stale clone happened to live in
   cache/sources/armbian-configng/ as the source of truth for
   the CONFIGNG_DESKTOPS_HASH input.

   Hoist the fetch + parser-path sanity check up above the gate
   so every BUILD_DESKTOP=yes invocation pulls branch:main.
   fetch_from_repo is idempotent on an already-cloned tree
   (just a git pull) so the warm-cache cost is one up-to-date
   check.

2. The resolved rootfs tarball filename is
   rootfs-<arch>-<release>-<cache_type>_<yyyymm>-<cache_id>.tar.zst.
   cache_id = packages_hash came from AGGREGATED_ROOTFS_HASH +
   hook hash + bash hash — none of which see armbian-configng.
   cache_type encoded DESKTOP_ENVIRONMENT ('xfce-desktop',
   'gnome-desktop', …) but not DESKTOP_TIER and not any
   fingerprint of the configng tree. Consequences:

   - A tier=minimal rootfs and a tier=full rootfs for the same
     DE collided on one filename. Whichever built first got
     cached; every subsequent tier silently reused its tarball.

   - A configng commit that changed which packages a DE
     installs (yaml edit, tier_override bump, new browser
     mapping) produced a different CONFIGNG_DESKTOPS_HASH in
     artifact_input_variables, but the local tarball was still
     named the same, so the lookup kept hitting the pre-change
     artifact.

   Fold both into cache_type. Net rename:
     rootfs-arm64-trixie-xfce-desktop_…tar.zst
       →
     rootfs-arm64-trixie-xfce-desktop-mid-a1b2c3d4_…tar.zst

   8-char suffix is the configng commit prefix. Only injected
   for BUILD_DESKTOP=yes; only when the value is a real SHA
   (not the 'undetermined' / 'unknown' sentinels the
   computation falls back to on clone failures).
@igorpecovnik igorpecovnik force-pushed the desktop-to-armbian-config branch from 43eae27 to 0f8c676 Compare April 20, 2026 13:30
@igorpecovnik igorpecovnik changed the title desktops: migrate from config/desktop/ tree to armbian-config module_desktops desktops: migrate from config/desktop/ tree to armbian-config module_desktops Apr 20, 2026
@igorpecovnik igorpecovnik marked this pull request as ready for review April 20, 2026 15:35
@igorpecovnik igorpecovnik removed the Work in progress Unfinished / work in progress label Apr 20, 2026
igorpecovnik added a commit to armbian/documentation that referenced this pull request Apr 20, 2026
Adds the `mode=build` parameter to the command synopsis and the
install lifecycle table. Each step is now tagged:

  [B] = runs in both modes (build + runtime)
  [R] = runtime-only (skipped when mode=build)

Explains when/why mode=build is used (image-build time, no user)
and how the first boot inherits skel + graphical.target.

Matches armbian/configng#859 (implementation) and armbian/build#9683
(build framework consumer).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

05 Milestone: Second quarter release Desktop Graphical user interface Documentation Documentation changes or additions Framework Framework components GitHub GitHub-related changes like labels, templates, ... Needs review Seeking for review Patches Patches related to kernel, U-Boot, ... size/large PR with 250 lines or more

Development

Successfully merging this pull request may close these issues.

1 participant