diff --git a/archinstall/lib/configuration.py b/archinstall/lib/configuration.py index 39d39511a8..2a73330ec7 100644 --- a/archinstall/lib/configuration.py +++ b/archinstall/lib/configuration.py @@ -10,6 +10,7 @@ from archinstall.lib.crypt import encrypt from archinstall.lib.menu.helpers import Confirmation, Selection from archinstall.lib.menu.util import get_password, prompt_dir +from archinstall.lib.models.network import NetworkConfiguration from archinstall.lib.output import debug, logger, warn from archinstall.lib.translationhandler import tr from archinstall.tui.ui.menu_item import MenuItem, MenuItemGroup @@ -58,10 +59,13 @@ def write_debug(self) -> None: debug(' -- Chosen configuration --') debug(self.user_config_to_json()) - async def confirm_config(self) -> bool: + async def confirm_config(self, show_install_warnings: bool = False) -> bool: header = f'{tr("The specified configuration will be applied")}. ' header += tr('Would you like to continue?') + '\n' + if show_install_warnings: + header += self._render_install_warnings() + group = MenuItemGroup.yes_no() group.set_preview_for_all(lambda x: self.user_config_to_json()) @@ -79,6 +83,22 @@ async def confirm_config(self) -> bool: return True + def get_install_warnings(self) -> list[str]: + warnings: list[str] = [] + + if not isinstance(self._config.network_config, NetworkConfiguration): + warnings.append(tr('Warning: no network configuration selected. Network will need to be set up manually on the installed system.')) + + return warnings + + def _render_install_warnings(self) -> str: + warnings = self.get_install_warnings() + + if not warnings: + return '' + + return '\n' + '\n'.join(f'[yellow]{w}[/]' for w in warnings) + '\n' + def _is_valid_path(self, dest_path: Path) -> bool: dest_path_ok = dest_path.exists() and dest_path.is_dir() if not dest_path_ok: diff --git a/archinstall/lib/models/network.py b/archinstall/lib/models/network.py index 71f3dca2b0..c227379917 100644 --- a/archinstall/lib/models/network.py +++ b/archinstall/lib/models/network.py @@ -12,6 +12,7 @@ class NicType(Enum): NM = 'nm' NM_IWD = 'nm_iwd' MANUAL = 'manual' + NONE = 'none' def display_msg(self) -> str: match self: @@ -23,6 +24,8 @@ def display_msg(self) -> str: return tr('Use Network Manager (iwd backend)') case NicType.MANUAL: return tr('Manual configuration') + case NicType.NONE: + return tr('No network configuration') class _NicSerialization(TypedDict): diff --git a/archinstall/lib/network/network_handler.py b/archinstall/lib/network/network_handler.py index 135485847f..48b863fdfd 100644 --- a/archinstall/lib/network/network_handler.py +++ b/archinstall/lib/network/network_handler.py @@ -37,6 +37,8 @@ def install_network_config( installation.configure_nic(nic) installation.enable_service('systemd-networkd') installation.enable_service('systemd-resolved') + case NicType.NONE: + pass def _configure_nm_iwd(installation: Installer) -> None: diff --git a/archinstall/lib/network/network_menu.py b/archinstall/lib/network/network_menu.py index bcf546981a..ebc4ab7da5 100644 --- a/archinstall/lib/network/network_menu.py +++ b/archinstall/lib/network/network_menu.py @@ -172,14 +172,17 @@ async def select_network(preset: NetworkConfiguration | None) -> NetworkConfigur """ items = [MenuItem(n.display_msg(), value=n) for n in NicType] - group = MenuItemGroup(items, sort_items=True) + group = MenuItemGroup(items, sort_items=False) if preset: group.set_selected_by_value(preset.type) + header = tr('Choose network configuration') + '\n' + header += tr('Recommended: Network Manager for desktop, Manual for server') + '\n' + result = await Selection[NicType]( group, - header=tr('Choose network configuration'), + header=header, allow_reset=True, allow_skip=True, ).show() @@ -205,5 +208,7 @@ async def select_network(preset: NetworkConfiguration | None) -> NetworkConfigur if nics: return NetworkConfiguration(NicType.MANUAL, nics) + case NicType.NONE: + return NetworkConfiguration(NicType.NONE) return preset diff --git a/archinstall/locales/base.pot b/archinstall/locales/base.pot index ac1728eb34..1c6ba2ee9b 100644 --- a/archinstall/locales/base.pot +++ b/archinstall/locales/base.pot @@ -2174,6 +2174,14 @@ msgstr "" msgid "Choose network configuration" msgstr "" +msgid "Recommended: Network Manager for desktop, Manual for server" +msgstr "" + +msgid "" +"Warning: no network configuration selected. Network will need to be set up " +"manually on the installed system." +msgstr "" + msgid "No packages found" msgstr "" diff --git a/archinstall/locales/uk/LC_MESSAGES/base.po b/archinstall/locales/uk/LC_MESSAGES/base.po index a178ac2d47..033b1701ec 100644 --- a/archinstall/locales/uk/LC_MESSAGES/base.po +++ b/archinstall/locales/uk/LC_MESSAGES/base.po @@ -483,7 +483,7 @@ msgid "Define users with sudo privilege: " msgstr "Визначте користувачів із привілеєм sudo: " msgid "No network configuration" -msgstr "Відсутня конфігурація мережі" +msgstr "Без налаштування мережі" msgid "Set desired subvolumes on a btrfs partition" msgstr "Встановіть потрібні підтома на розділі btrfs" @@ -2115,6 +2115,12 @@ msgstr "Оберіть інтерфейс" msgid "Choose network configuration" msgstr "Оберіть конфігурацію мережі" +msgid "Recommended: Network Manager for desktop, Manual for server" +msgstr "Рекомендовано: Network Manager для робочого столу, ручне налаштування для сервера" + +msgid "Warning: no network configuration selected. Network will need to be set up manually on the installed system." +msgstr "Попередження: конфігурацію мережі не обрано. Мережу доведеться налаштувати вручну на встановленій системі." + msgid "No packages found" msgstr "Пакети не знайдено" diff --git a/archinstall/scripts/guided.py b/archinstall/scripts/guided.py index 3413372253..5cc0340800 100644 --- a/archinstall/scripts/guided.py +++ b/archinstall/scripts/guided.py @@ -216,7 +216,7 @@ def main(arch_config_handler: ArchConfigHandler | None = None) -> None: if not arch_config_handler.args.silent: aborted = False - res: bool = tui.run(config.confirm_config) + res: bool = tui.run(lambda: config.confirm_config(show_install_warnings=True)) if not res: debug('Installation aborted') diff --git a/archinstall/scripts/minimal.py b/archinstall/scripts/minimal.py index 4e89714260..681d4266b0 100644 --- a/archinstall/scripts/minimal.py +++ b/archinstall/scripts/minimal.py @@ -77,7 +77,7 @@ async def main(arch_config_handler: ArchConfigHandler | None = None) -> None: if not arch_config_handler.args.silent: aborted = False - res: bool = tui.run(config.confirm_config) + res: bool = tui.run(lambda: config.confirm_config(show_install_warnings=True)) if not res: debug('Installation aborted')