Skip to content

Add native boot menu settings for installed drives - #1

Merged
fcjr merged 3 commits into
fcjr:mainfrom
RCGV1:feat/boot-menu-settings
Nov 1, 2026
Merged

fcjr merged 3 commits into
fcjr:mainfrom
RCGV1:feat/boot-menu-settings

Conversation

@RCGV1

@RCGV1 RCGV1 commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Adds a native Boot Menu sheet for installed drives: list/folder menu style, optional automatic boot with a delay, and a default-image file picker restricted to the selected data volume. Changes are saved explicitly to /ventoy/ventoy.json using normal user permissions.

Only edited global controls are changed. Other plugins, unknown controls and firmware-specific settings are preserved. Turning automatic boot off removes the timeout; existing malformed configurations and stale saves are refused. The data volume is resolved by partition identity and its mount path/UUID are checked again before saving.

This is a deliberately small first configuration contribution. It does not change the installer or add a theme editor. Firmware-specific overrides remain outside this sheet and are called out when present.

UI

Before: disk information only After: Boot Menu sheet
Existing disk detail Boot Menu settings

Verification

  • make app: arm64 and x86_64 builds pass (local builds unsigned).
  • make test-config: save/reopen, timeout removal, preservation of plugins and multi-mode controls, stale-save rejection, malformed controls and symlink rejection pass.
  • Exercised the actual sheet against a disposable mounted exFAT disk image: enabled auto-boot, saved, reopened, disabled it, saved, and checked the resulting JSON on disk. The test volume is a settings fixture, not evidence of a bootable Ventoy installation.
  • Physical firmware boot behavior has not been tested for this contribution.

Control semantics follow Ventoy's global control documentation.

Ventoy honours only the first key of each object in the control array,
so edits are now normalised to one key per object; previously a save
could reorder a multi-key object and silently change which setting took
effect. Negative timeouts load as "wait for selection" instead of being
rejected. Unsupported layouts and unmounted data partitions get their
own messages rather than a "reconnect the drive" prompt. JSON syntax
errors surface as the sheet's own invalid-document message.

The sheet keeps Cancel enabled while loading, attaches the image picker
as a sheet so the parent cannot be dismissed underneath it, compares the
search root case-insensitively, and tracks dirty state through a single
Equatable value. The config test now runs in CI.
@fcjr
fcjr merged commit ada28df into fcjr:main Nov 1, 2026
1 check passed
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.

2 participants