From 78824fe084fe89d46826c6c7416a08444e50768b Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 25 Jul 2026 09:41:45 -0700 Subject: [PATCH] Skip archinstall's pre-format countdown archinstall's FilesystemHandler.perform_filesystem_operations defaults to show_countdown=True, which runs a ~4.5s "5...4...3...2...1" warning (_final_warning) before wiping the disk. That prompt is meant for archinstall's interactive TUI; in our orchestrated/dashboard install it renders nowhere and just sleeps silently on every full-disk install. Pass show_countdown=False, guarded by an introspection check so it stays safe on newer archinstall releases that dropped both the countdown and the parameter. Generalize _method_accepts_users into _method_accepts for the check. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../orchestrator/archinstall_adapter.py | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/configs/airootfs/usr/share/omarchy-iso/orchestrator/archinstall_adapter.py b/configs/airootfs/usr/share/omarchy-iso/orchestrator/archinstall_adapter.py index 43f71b0..c6a279b 100644 --- a/configs/airootfs/usr/share/omarchy-iso/orchestrator/archinstall_adapter.py +++ b/configs/airootfs/usr/share/omarchy-iso/orchestrator/archinstall_adapter.py @@ -99,11 +99,23 @@ def perform_filesystem_operations(arch_config: ArchConfig) -> None: handler = FilesystemHandler(arch_config.disk_config) + # archinstall's perform_filesystem_operations defaults to a ~4.5s + # "5...4...3...2...1" countdown (FilesystemHandler._final_warning) before it + # wipes the disk. That warning is meant for its interactive TUI; in our + # orchestrated install it renders nowhere and just sleeps. Suppress it when + # the running archinstall still takes the flag — newer releases dropped both + # the countdown and the parameter, so only pass it when it's accepted. + fs_kwargs = ( + {"show_countdown": False} + if _method_accepts(handler.perform_filesystem_operations, "show_countdown") + else {} + ) + attempts = 3 for attempt in range(1, attempts + 1): udev_sync() try: - handler.perform_filesystem_operations() + handler.perform_filesystem_operations(**fs_kwargs) return except Exception as exc: if attempt == attempts or "unable to inform the kernel" not in str(exc): @@ -185,8 +197,8 @@ def _application_handler(): return handler -def _method_accepts_users(method) -> bool: - """Return whether a bound archinstall method accepts the users argument. +def _method_accepts(method, name: str) -> bool: + """Return whether a bound archinstall method accepts a named argument. Do not use inspect.signature here: Python 3.14 may evaluate archinstall's lazy annotations, and some archinstall releases annotate with names that are @@ -199,7 +211,11 @@ def _method_accepts_users(method) -> bool: positional = code.co_varnames[:code.co_argcount] kwonly = code.co_varnames[code.co_argcount:code.co_argcount + code.co_kwonlyargcount] - return "users" in (*positional, *kwonly) + return name in (*positional, *kwonly) + + +def _method_accepts_users(method) -> bool: + return _method_accepts(method, "users") def install_applications(installer: Installer, arch_config: ArchConfig) -> None: