Skip to content

feat: add sysext feature selection page to first-boot setup#28

Merged
bketelsen merged 1 commit into
mainfrom
feat/sysext-page
Jul 7, 2026
Merged

feat: add sysext feature selection page to first-boot setup#28
bketelsen merged 1 commit into
mainfrom
feat/sysext-page

Conversation

@bketelsen

Copy link
Copy Markdown
Contributor

Closes #27

What

Adds an Extensions page to the configure-system (first-boot) flow, between the user page and the core-progress page, letting the user pick which sysext features to enable. Selected features are enabled and downloaded with updex (per the issue comment — not systemd-sysupdate) before the first GNOME login, so desktop apps appear in the app grid without a re-login and services (docker, incus, tailscale) activate on merge.

How

  • Discovery: backend.list_sysext_features() parses <name>.feature files from the sysupdate.d directories (/etc, /run, /usr/local/lib, /usr/lib), including .feature.d/*.conf drop-in overrides with systemd-style precedence — so the enablement drop-ins updex writes to /etc/sysupdate.d/<name>.feature.d/00-updex.conf are reflected in the switch state. Output verified identical to updex features list --json.
  • Curation: a Recommended group (edge, vscode, bitwarden — what the loaded variants used to bake in) with switches on by default, and a collapsed More Extensions expander with everything else off by default. The page is skipped entirely on images that ship no .feature files.
  • Enable + download: each selected feature becomes a deferred action running the new sysext-features pkexec script (updex --silent features enable <name> --now), one action per feature so the existing core-progress page shows a per-feature progress row. updex runs systemd-sysext refresh after install, so merges happen during setup.
  • Polkit action added for the new script; the existing snow-first-setup group rule covers it without a prompt.

Design note on backgrounding

The issue suggests backgrounding the downloads if possible. Downloads run on the core-progress page (alongside the core flatpaks) with per-item progress rather than truly in the background: the configure-system flow ends in a logout, which would kill pkexec children of the session. Everything therefore completes, visibly, before the logout page.

Verification

  • meson compile succeeds (54/54 targets), gresource compiles with the new UI
  • Discovery parser output matches updex features list --json exactly on a live snowfield system (11 features, enabled states correct)
  • Headless GTK harness: page constructs, recommended/expander grouping and switch defaults correct; finish() queues exactly the checked features and re-finishing after unchecking removes stale entries
  • sudo updex --silent --dry-run features enable docker --now → "Would enable feature 'docker' and download extensions"
  • App launches cleanly in test.py -d -c (dry-run configure mode)

🤖 Generated with Claude Code

The loaded image variants are retired (frostyard/snosi#379): Edge,
VS Code, Bitwarden, Docker, Incus and friends now ship exclusively as
systemd sysexts, all disabled by default. Add a page to the
configure-system flow that lets the user pick which sysext features to
enable, then enables and downloads them via updex before the first
GNOME login (so desktop apps land in the app grid without a re-login).

- Discover features by parsing <name>.feature files (plus .feature.d
  drop-in overrides, matching updex/systemd precedence) from the
  sysupdate.d directories
- Recommended set (edge, vscode, bitwarden) shown on top and enabled
  by default; the full list sits in a collapsed expander, off by default
- Each selected feature is queued as a deferred action running
  `updex --silent features enable <name> --now` via pkexec, with a
  per-feature progress row on the existing core-progress page
- Skip the page entirely when the image ships no feature definitions

Closes #27

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@bketelsen
bketelsen merged commit 4644001 into main Jul 7, 2026
1 check passed
@bketelsen
bketelsen deleted the feat/sysext-page branch July 7, 2026 18:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add a sysext enablement page to first-boot setup

1 participant