OEM mode via Ctrl+C on the first screen, not a mode-picker entry

Restore the original screen order (keyboard first, then disk) and make Ctrl+C
on the keyboard screen the entry into OEM mode — the same hidden-Ctrl+C idiom
the disk-overwrite screen already uses for unencrypted installs. A confirm
guards against an accidental Ctrl+C; once confirmed, OEM jumps straight to
disk selection and the overwrite confirmation (no keyboard, no user), since
OEM is always a full-disk install. The 'OEM install' entry leaves the mode
picker. The harness drives the new path.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
David Heinemeier HanssonandClaude Fable 5 committed 2026-08-08 01:08:58 -07:00
1 parent 30759f2082
commit 2f54e5579b
2 files changed
+104 -61

No files matched your search

+41 -31
View File
@@ -606,46 +606,56 @@ audio-panel|meta_l-ctrl-a|omarchy-keyboard-panel|omarchy.audio'
drive_configurator() {
log "Driving the installer wizard"
# 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-02-install-mode"
if $OEM; then
press down # "OEM install" sits below "Full disk install" on a blank disk
fi
press ret
elif $OEM; then
capture_console "failure-installer-no-oem-choice"
echo "OEM flow requested but this ISO does not offer OEM mode" >&2
return 1
fi
wait_for_screen "recovery possible" 60
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-04-disk-warning-unencrypted"
fi
press ret
# Keyboard is the first screen. Ctrl+C there is the hidden entry into OEM
# mode; a normal install just selects the layout.
wait_for_screen "keyboard layout" 300
capture_console "success-installer-01-keyboard-layout"
if $OEM; then
# OEM installs skip the keyboard and user steps; the install starts now.
press ctrl-c # arm OEM mode
wait_for_screen "new owner" 30
capture_console "success-installer-02-oem-confirm"
press ret # "Yes, prepare for a new owner" is the affirmative default
# OEM jumps straight to disk selection, then the overwrite confirm.
wait_for_screen "install disk" 60
capture_console "success-installer-03-oem-install-disk"
press ret
wait_for_screen "recovery possible" 60
capture_console "success-installer-04-oem-disk-warning-encrypted"
if ! $ENCRYPT; then
press ctrl-c
wait_for_screen "without encryption" 30
capture_console "success-installer-05-oem-disk-warning-unencrypted"
fi
press ret
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 "install disk" 60
capture_console "success-installer-02-install-disk"
press ret # the single virtio disk
wait_for_screen "installation mode\|recovery possible" 60
if ocr_screen | grep -qi "installation mode"; then
capture_console "success-installer-03-install-mode"
press ret # "Full disk install" is preselected
fi
wait_for_screen "recovery possible" 60
capture_console "success-installer-04-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"
fi
press ret
wait_for_screen "Username" 120
type_text "$GUEST_USER"
capture_console "success-installer-06-username"
+63 -30
View File
@@ -74,6 +74,17 @@ notice() {
keyboard_form() {
step "Let's setup your machine..."
# On the first screen, Ctrl+C is the hidden entry into OEM mode — the same
# idiom the disk-overwrite screen uses for unencrypted. $1 is "true" only for
# that first invocation; the review-loop re-edit passes nothing so a stray
# Ctrl+C there can't flip an in-progress user install into OEM.
local allow_oem="${1:-false}"
if $allow_oem; then
say --foreground 8 "Press Ctrl+C to prepare this machine for a new owner (OEM install)."
echo
fi
keyboards=$'Azerbaijani|azerty
Belarusian|by
Belgian|be-latin1
@@ -124,7 +135,19 @@ Swedish|sv-latin1
Tajik|tj_alt-UTF8
Turkish|trq
Ukrainian|ua'
choice=$(printf '%s\n' "$keyboards" | cut -d'|' -f1 | gum choose --height 10 --selected "English (US)" --header "Select keyboard layout") || abort
choice=$(printf '%s\n' "$keyboards" | cut -d'|' -f1 | gum choose --height 10 --selected "English (US)" --header "Select keyboard layout")
local status=$?
if $allow_oem && (( status == 130 )); then
if confirm_oem_install; then
oem_install=true
return 0
fi
keyboard_form true # declined OEM: back to the keyboard picker
return
fi
(( status == 0 )) || abort
keyboard=$(printf '%s\n' "$keyboards" | awk -F'|' -v c="$choice" '$1==c{print $2; exit}')
# Only attempt to load keyboard layout if we're on a real console
@@ -134,9 +157,22 @@ Ukrainian|ua'
fi
}
# 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.
# Ctrl+C on the first screen offers OEM mode. Confirm it before committing, so
# an accidental Ctrl+C doesn't silently switch the whole install.
confirm_oem_install() {
clear_logo
echo
say "OEM install prepares this machine for someone else."
say --foreground 8 "The system installs now, but the new owner picks their keyboard and"
say --foreground 8 "creates their user on the machine's first boot."
echo
gum confirm --affirmative "Yes, prepare for a new owner" --negative "No, keep setting up" \
"Prepare this machine for a new owner?"
}
# The user step. OEM installs skip it entirely — 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..."
@@ -812,9 +848,6 @@ install_mode_form() {
if [[ -d /sys/firmware/efi ]] && ! $full_disk_only; then
choices+=("Free space install (alongside existing data)")
fi
# OEM: install the whole system now, defer user setup to the machine's
# first boot — for machines built to be sold or handed on.
choices+=("OEM install (new owner creates their user on first boot)")
choices+=("Choose a different disk")
step "Let's select how to install Omarchy..."
@@ -860,8 +893,10 @@ confirm_disk_overwrite() {
}
# Decide what and how to install: sets install_target (full_disk|free_space),
# oem_install, and encrypt_installation. Nothing is written to disk yet — the
# user step (skipped for OEM) runs between this and the execution below.
# install_target and encrypt_installation. Nothing is written to disk yet —
# the user step runs between this and the execution below. (OEM mode never
# reaches here; it's armed by Ctrl+C on the first screen and goes straight to
# disk selection.)
select_installation() {
local full_disk_only
@@ -876,22 +911,12 @@ select_installation() {
case "$install_mode" in
"Full disk install")
oem_install=false
if confirm_disk_overwrite; then
install_target="full_disk"
return 0
fi
;;
"OEM install"*)
oem_install=true
if confirm_disk_overwrite; then
install_target="full_disk"
return 0
fi
oem_install=false
;;
"Free space install"*)
oem_install=false
if run_partition_decide; then
install_target="free_space"
return 0
@@ -904,20 +929,18 @@ select_installation() {
done
}
# STEP 3: WHERE AND HOW TO INSTALL
# STEP 1: KEYBOARD (Ctrl+C here arms OEM mode and jumps to disk selection)
oem_install=false
install_target="full_disk"
disk_form
select_installation
# STEP 3: KEYBOARD + USER (OEM defers both to the machine's first boot)
keyboard_form true
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.
# OEM: no user setup, and the keyboard is deferred to the machine's first
# boot. A defined default keymap so it boots before then; 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=""
@@ -926,10 +949,20 @@ if $oem_install; then
email_address=""
hostname="omarchy"
timezone="UTC"
# Jump straight to disk selection + overwrite confirmation (encrypted by
# default, Ctrl+C toggles unencrypted). OEM is always a full-disk install.
disk_form
until confirm_disk_overwrite; do
disk_form
done
install_target="full_disk"
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
# Normal install: pick the disk, then the install mode, then the user. The
# keyboard chosen above is already loaded, so the LUKS passphrase entered in
# the user step is typed under the right layout.
disk_form
select_installation
user_step
fi