From 7f1fdf242744675004c54b9cf68c75b700e088a0 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 7 Aug 2026 22:36:56 -0700 Subject: [PATCH] Reorder configurator: disk before keyboard, skip keyboard for OEM MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The wizard now opens on disk selection; keyboard moves to after the install mode is chosen and stays before the user step (so the LUKS passphrase is still typed under the chosen layout). OEM installs skip keyboard and user entirely — the machine's owner picks both at first boot — so the emitted config just carries a default 'us' keymap as a placeholder. The QEMU harness drives the new order and the OEM first-boot keyboard step. Co-Authored-By: Claude Fable 5 --- bin/omarchy-iso-test | 38 +++++++++++++++++------------- configs/airootfs/root/configurator | 15 ++++++++---- 2 files changed, 33 insertions(+), 20 deletions(-) diff --git a/bin/omarchy-iso-test b/bin/omarchy-iso-test index dd49ab6..0af38f5 100755 --- a/bin/omarchy-iso-test +++ b/bin/omarchy-iso-test @@ -606,19 +606,16 @@ audio-panel|meta_l-ctrl-a|omarchy-keyboard-panel|omarchy.audio' drive_configurator() { log "Driving the installer wizard" - wait_for_screen "keyboard layout" 300 - capture_console "success-installer-01-keyboard-layout" - press ret # English (US) is preselected - - wait_for_screen "install disk" 120 - capture_console "success-installer-02-install-disk" + # Disk first (the keyboard step moved after mode selection, and OEM skips it). + wait_for_screen "install disk" 300 + capture_console "success-installer-01-install-disk" press ret # the single virtio disk # A blank disk shows the mode picker only when the bundled runtime supports # OEM mode; otherwise the wizard goes straight to the overwrite confirm. wait_for_screen "installation mode\|recovery possible" 60 if ocr_screen | grep -qi "installation mode"; then - capture_console "success-installer-03-install-mode" + capture_console "success-installer-02-install-mode" if $OEM; then press down # "OEM install" sits below "Full disk install" on a blank disk fi @@ -630,21 +627,25 @@ drive_configurator() { fi wait_for_screen "recovery possible" 60 - capture_console "success-installer-04-disk-warning-encrypted" + capture_console "success-installer-03-disk-warning-encrypted" if ! $ENCRYPT; then press ctrl-c # toggles the confirm to the unencrypted flow wait_for_screen "without encryption" 30 - capture_console "success-installer-05-disk-warning-unencrypted" + capture_console "success-installer-04-disk-warning-unencrypted" fi press ret if $OEM; then - # OEM installs skip the user step entirely; the install starts right away. + # OEM installs skip the keyboard and user steps; the install starts now. sleep 2 capture_console "success-installer-13-install-started" return 0 fi + wait_for_screen "keyboard layout" 60 + capture_console "success-installer-05-keyboard-layout" + press ret # English (US) is preselected + wait_for_screen "Username" 120 type_text "$GUEST_USER" capture_console "success-installer-06-username" @@ -693,14 +694,19 @@ drive_configurator() { drive_oem_setup() { log "Driving the OEM first-boot setup" - wait_for_screen "Username" 600 - capture_console "success-oem-01-username" + # OEM defers the keyboard step to first boot; it comes before the user form. + wait_for_screen "keyboard layout" 600 + capture_console "success-oem-01-keyboard-layout" + press ret # English (US) preselected + + wait_for_screen "Username" 120 + capture_console "success-oem-02-username" type_text "$GUEST_USER" press ret wait_for_screen "Password" 60 type_text "$GUEST_PASSWORD" - capture_console "success-oem-02-password" + capture_console "success-oem-03-password" press ret wait_for_screen "Conf *irm" 60 @@ -713,16 +719,16 @@ drive_oem_setup() { wait_for_screen "Email address" 60 type_text "test@omarchy.org" - capture_console "success-oem-03-email" + capture_console "success-oem-04-email" press ret wait_for_screen "look right" 60 - capture_console "success-oem-04-review" + capture_console "success-oem-05-review" press ret # Finalization (offline Node unpack, LUKS re-key on encrypted installs) # runs before SDDM appears. - capture_console "success-oem-05-finalizing" + capture_console "success-oem-06-finalizing" } wait_for_install() { diff --git a/configs/airootfs/root/configurator b/configs/airootfs/root/configurator index 9678d31..566e4b0 100644 --- a/configs/airootfs/root/configurator +++ b/configs/airootfs/root/configurator @@ -134,9 +134,9 @@ Ukrainian|ua' fi } -keyboard_form - -# STEP 2: USER (run after the install mode is chosen — OEM installs skip it) +# Keyboard and user run after the install mode is chosen. OEM installs skip +# both — the machine's first owner picks their keyboard and creates their user +# in the first-boot setup, so the OEM operator sets nothing user-specific. user_form() { step "Let's setup your user account..." @@ -944,9 +944,13 @@ install_target="full_disk" disk_form select_installation -# STEP 4: USER (OEM installs defer this to the machine's first boot) +# STEP 3: KEYBOARD + USER (OEM defers both to the machine's first boot) if $oem_install; then + # A defined default keymap so the system boots before first-boot setup; the + # owner picks their real layout in the OOBE, which re-keys the console and, + # on encrypted installs, rebuilds the initramfs so the LUKS prompt matches. + keyboard="us" username="" password="" password_hash="" @@ -955,6 +959,9 @@ if $oem_install; then hostname="omarchy" timezone="UTC" else + # Keyboard before the user step so the LUKS passphrase is typed under the + # chosen layout (typing it under the wrong one locks the user out at boot). + keyboard_form user_step fi