You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
desktops: document status tri-state + availability/status filter flags
- Document the community tier in the status field (editorial label joins
supported / community / unsupported).
- Rename DESKTOP_SUPPORTED -> DESKTOP_AVAILABLE throughout, explain it
is the computed release+arch-declared axis, distinct from editorial
status.
- Document parse_desktop_yaml.py's --filter available|unavailable|all
and --status <csv> flags, plus the reshaped JSON list shape.
- Document module_desktops supported's filter= and status= params.
- Note the short menu slot allocation (*01-*04) used for community
[CSC] DEs, and that unsupported DEs stay out of the menu.
- Refresh the audit.py skipped_desktops example now that community is
its own tier (only unsupported DEs are skipped).
|`status`| string | yes |`supported` or`unsupported`. Reported via `DESKTOP_STATUS`. Affects only labelling — does not block install. |
110
+
|`status`| string | yes |Editorial label — one of `supported`, `community`,`unsupported`. Reported via `DESKTOP_STATUS`. Affects only labelling and catalog filtering — does not block install. `community` is used for DEs that work but are maintained on a best-effort basis; `unsupported` for DEs that are known-broken or not vetted. |
111
111
|`tiers`| mapping | yes | Per-tier package lists, keyed by `minimal`, `mid`, `full`. See [Tier blocks](#tier-blocks). |
112
112
|`tier_overrides`| mapping | optional | Per-arch and/or per-release-per-arch package removals (and additions) for tier holes. See [tier_overrides](#tier-overrides). |
@@ -129,7 +129,7 @@ The release block is **orthogonal** to the tier walk: it applies to whatever tie
129
129
130
130
| Field | Type | Description |
131
131
|---|---|---|
132
-
|`architectures`| list | Architectures supported on this release. Used to compute `DESKTOP_SUPPORTED`. |
132
+
|`architectures`| list | Architectures supported on this release. Used to compute `DESKTOP_AVAILABLE` (the "does this YAML declare the requested release+arch combo?" bool — distinct from the editorial `status` above). |
133
133
|`packages`| list | Extra packages added on top of the tier-resolved set. |
134
134
|`packages_remove`| list | Packages filtered out of the merged install list. |
135
135
|`packages_uninstall`| list | Packages purged after install on this release only. |
@@ -250,7 +250,7 @@ tiers:
250
250
name: kde-neon
251
251
description: "KDE Neon - latest Plasma from KDE repos (Ubuntu only)"
The two filter flags on `--list` / `--list-json` select on two orthogonal axes, both default to permissive (backwards-compatible with pre-filter callers):
404
+
405
+
-`--filter` selects on the **computed**`DESKTOP_AVAILABLE` axis (does the YAML declare this release+arch combo?). Values: `available` (default — hides DEs without an entry for this combo), `unavailable` (only the non-declared DEs), or `all` (no filtering on this axis).
406
+
-`--status` selects on the **editorial**`DESKTOP_STATUS` axis. Takes a comma-separated *keep-list* of status values to retain. Omit the flag to keep all statuses. Example: `--status supported,community` drops `unsupported` DEs from the output.
407
+
398
408
### Variables emitted (per-desktop mode)
399
409
400
410
All values are double-quoted and shell-escaped via `shell_escape()` (escapes `\`, `"`, `$`, and `` ` ``), so the bash caller can safely `eval` the output.
@@ -405,8 +415,8 @@ All values are double-quoted and shell-escaped via `shell_escape()` (escapes `\`
405
415
|`DESKTOP_PACKAGES_UNINSTALL`| minimal-tier `packages_uninstall` from common + DE + release | Space-separated. |
406
416
|`DESKTOP_PRIMARY_PKG`| first DE-specific package (not from common) that survives all filters | Used by `module_desktops status` for `dpkg -l` checks. |
|`DESKTOP_SUPPORTED`|`yes` if `arch` is in the release's `architectures` and `release` is a key in `releases`, else `no`||
418
+
|`DESKTOP_STATUS`|editorial `status` from the YAML, default `unsupported`. One of `supported` / `community` / `unsupported`. | Orthogonal to `DESKTOP_AVAILABLE` — a community DE may be available on a combo (its YAML declares the release+arch) or not.|
419
+
|`DESKTOP_AVAILABLE`|`yes` if `arch` is in the release's `architectures` and `release` is a key in `releases`, else `no`| Computed axis — whether the YAML declares this release+arch combo. Named `DESKTOP_SUPPORTED` before 2026-04 (the rename disambiguates this from the editorial `status` field).|
|`DESKTOP_TIER`| the requested tier name | Set verbatim from the `--tier` arg. |
412
422
|`DESKTOP_REPO_URL`|`repo.url`| Only emitted when `repo:` exists. |
@@ -438,7 +448,20 @@ The parser is strict about top-level structure but tolerant of malformed sub-nod
438
448
439
449
### List and JSON list modes
440
450
441
-
Iterates every `*.yaml` (excluding `common.yaml`), parses each one's release block, and prints **only entries supported on the requested (release, arch)**. Used by `module_desktops install` to show available desktops on error and by `module_desktops supported` to expose a machine-readable catalog. These modes do not require `--tier`.
451
+
Iterates every `*.yaml` (excluding `common.yaml`), parses each one's release block, and emits one row per DE. By default only entries with `DESKTOP_AVAILABLE=yes` for the requested `(release, arch)` are printed — pass `--filter unavailable` or `--filter all` to override. Pass `--status <csv>` to additionally narrow by the editorial `status` field. Used by `module_desktops install` to show available desktops on error and by `module_desktops supported` to expose a machine-readable catalog. These modes do not require `--tier`.
452
+
453
+
Each JSON entry has this shape (two orthogonal status axes):
454
+
455
+
```json
456
+
{
457
+
"name": "budgie",
458
+
"description": "Budgie - elegant desktop from Solus project",
|`auto`| Configures auto-login for `DESKTOP_DM` (gdm3/sddm/lightdm). Edits the gdm config in place — never overwrites the file — so user customization is preserved. |`de=`|
|`login`| Returns 0 if auto-login is currently configured. Anchored regex; safely ignores commented sample lines in the stock noble `custom.conf`. |`de=`|
470
-
|`supported`| With `de=`: prints `true`/`false`. Without `de=`: prints JSON catalog of supported desktops. | optional |
493
+
|`supported`| With `de=`: prints `true`/`false` based on `DESKTOP_AVAILABLE` for the DE on `arch=`/`release=`. Without `de=`: prints a JSON catalog. Two optional filter knobs: `filter=available\|unavailable\|all` (computed-availability axis, default `available`) and `status=<csv>` (editorial-status keep-list — e.g. `status=supported,community` hides editorially `unsupported` DEs). | optional`de=`, `arch=`, `release=`, `filter=`, `status=`|
471
494
|`installed`| Returns 0 if any desktop is installed (uses cached `--primaries` lookup). | — |
472
495
|`help`| Shows help and exits. | — |
473
496
@@ -524,7 +547,7 @@ Calls the parser with `--list` and prints TSV to stdout. Used to assemble the "A
Convenience wrapper around `module_desktop_yamlparse` that returns 0/1 based on `DESKTOP_SUPPORTED`. Suppresses parser stderr — meant for predicates and CI gates.
550
+
Convenience wrapper around `module_desktop_yamlparse` that returns 0/1 based on `DESKTOP_AVAILABLE` (the computed-availability axis). Suppresses parser stderr — meant for predicates and CI gates. Note: this function does not consider the editorial `DESKTOP_STATUS` axis — a DE with `status: unsupported` can still return 0 here if its YAML declares the requested release+arch. Filter on `DESKTOP_STATUS` separately if you need to exclude unsupported DEs.
528
551
529
552
### module_desktop_repo
530
553
@@ -609,7 +632,7 @@ Steps marked with `[R]` are **runtime-only** — skipped when `mode=build` is pa
609
632
2. [R] Resolve target user module_desktop_getuser (skipped in mode=build)
@@ -719,7 +742,7 @@ This makes the same code path usable for image preseeding inside Docker without
719
742
done
720
743
```
721
744
722
-
All `DESKTOP_*` variables should print, `DESKTOP_SUPPORTED="yes"`forany (release, arch) pair you listedin the YAML, and `DESKTOP_TIER` should match the requested tier.
745
+
All `DESKTOP_*` variables should print, `DESKTOP_AVAILABLE="yes"`forany (release, arch) pair you listedin the YAML, and `DESKTOP_TIER` should match the requested tier.
723
746
724
747
8. **List-mode sanity check:**
725
748
@@ -756,6 +779,8 @@ This makes the same code path usable for image preseeding inside Docker without
756
779
757
780
The `*07-*09` change-tier entries use `module_desktops set-tier` and gate visibility with `module_desktops status de=<X>&&! module_desktops at-tier de=<X> tier=<target>`.
758
781
782
+
**`status: community` DEs** (the `[CSC]` tier) follow a shorter allocation — only `*01` (install minimal), `*02` (uninstall), `*03` (autologin), `*04` (manual-login) — matching the `kde-neon` precedent. No 3-tier install, no set-tier. Description and `short` carry a trailing `[CSC]` marker so the UI can distinguish community DEs from first-class supported ones. Do NOT add menu entries for`status: unsupported` DEs — they're intentionally kept out of the dialog so users never land on a broken install path from the menu.
783
+
759
784
## Matrix audit automation
760
785
761
786
The desktop matrix covers several DEs × several releases × several architectures, and two kinds of drift tend to accumulate silently:
Desktops with `status: unsupported`in their YAML are listed in`skipped_desktops` and not audited — drift in an unsupported DE isn't actionable.
827
+
Desktops with `status: unsupported` in their YAML are listed in `skipped_desktops` and not audited — drift in an unsupported DE isn't actionable.`status: community` DEs **are** audited (drift in a community-tier DE is still worth reporting, even if a maintainer may choose not to act on it immediately).
803
828
804
829
Flags: `--tier {minimal,mid,full}` narrows the scope;`--release <codename>` audits a single release;`--skip-network` is a dry-run that only reports `missing_releases`.
0 commit comments