feat: add sysext feature selection page to first-boot setup#28
Merged
Conversation
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
backend.list_sysext_features()parses<name>.featurefiles from the sysupdate.d directories (/etc,/run,/usr/local/lib,/usr/lib), including.feature.d/*.confdrop-in overrides with systemd-style precedence — so the enablement drop-ins updex writes to/etc/sysupdate.d/<name>.feature.d/00-updex.confare reflected in the switch state. Output verified identical toupdex features list --json..featurefiles.sysext-featurespkexec script (updex --silent features enable <name> --now), one action per feature so the existing core-progress page shows a per-feature progress row. updex runssystemd-sysext refreshafter install, so merges happen during setup.snow-first-setupgroup 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 compilesucceeds (54/54 targets), gresource compiles with the new UIupdex features list --jsonexactly on a live snowfield system (11 features, enabled states correct)finish()queues exactly the checked features and re-finishing after unchecking removes stale entriessudo updex --silent --dry-run features enable docker --now→ "Would enable feature 'docker' and download extensions"test.py -d -c(dry-run configure mode)🤖 Generated with Claude Code