diff --git a/archinstall/lib/global_menu.py b/archinstall/lib/global_menu.py index 70a5e35d..6b8ca04e 100644 --- a/archinstall/lib/global_menu.py +++ b/archinstall/lib/global_menu.py @@ -5,6 +5,7 @@ from archinstall.lib.disk.disk_menu import DiskLayoutConfigurationMenu from archinstall.lib.models.application import ApplicationConfiguration, ZramConfiguration from archinstall.lib.models.authentication import AuthenticationConfiguration from archinstall.lib.models.device import DiskLayoutConfiguration, DiskLayoutType, FilesystemType, PartitionModification +from archinstall.lib.network.network_menu import ask_to_configure_network from archinstall.lib.packages import list_available_packages from archinstall.tui.ui.menu_item import MenuItem, MenuItemGroup @@ -21,7 +22,6 @@ from .interactions.general_conf import ( ask_hostname, ask_ntp, ) -from .interactions.network_menu import ask_to_configure_network from .interactions.system_conf import ask_for_swap, select_kernel from .locale.locale_menu import LocaleMenu from .menu.abstract_menu import CONFIG_KEY, AbstractMenu diff --git a/archinstall/lib/interactions/__init__.py b/archinstall/lib/interactions/__init__.py index dd04ea98..a9b527d9 100644 --- a/archinstall/lib/interactions/__init__.py +++ b/archinstall/lib/interactions/__init__.py @@ -14,18 +14,15 @@ from .general_conf import ( ask_ntp, select_archinstall_language, ) -from .network_menu import ManualNetworkConfig, ask_to_configure_network from .system_conf import ask_for_swap, select_driver, select_kernel __all__ = [ - 'ManualNetworkConfig', 'add_number_of_parallel_downloads', 'ask_additional_packages_to_install', 'ask_for_a_timezone', 'ask_for_swap', 'ask_hostname', 'ask_ntp', - 'ask_to_configure_network', 'get_default_partition_layout', 'select_archinstall_language', 'select_devices', diff --git a/archinstall/lib/models/network.py b/archinstall/lib/models/network.py index cf3595e3..4e1c12fa 100644 --- a/archinstall/lib/models/network.py +++ b/archinstall/lib/models/network.py @@ -3,16 +3,11 @@ from __future__ import annotations import re from dataclasses import dataclass, field from enum import Enum -from typing import TYPE_CHECKING, NotRequired, Self, TypedDict, override +from typing import NotRequired, Self, TypedDict, override from archinstall.lib.output import debug from archinstall.lib.translationhandler import tr -from ..models.profile import ProfileConfiguration - -if TYPE_CHECKING: - from archinstall.lib.installer import Installer - class NicType(Enum): ISO = 'iso' @@ -140,42 +135,6 @@ class NetworkConfiguration: return None - def install_network_config( - self, - installation: Installer, - profile_config: ProfileConfiguration | None = None, - ) -> None: - match self.type: - case NicType.ISO: - installation.copy_iso_network_config( - enable_services=True, # Sources the ISO network configuration to the install medium. - ) - case NicType.NM | NicType.NM_IWD: - # Install NetworkManager package for both cases - packages = ['networkmanager'] - # Default back-end only for non-iwd - if self.type == NicType.NM: - packages.append('wpa_supplicant') - - installation.add_additional_packages(packages) - - # Desktop profile -> Always add applet - if profile_config and profile_config.profile: - if profile_config.profile.is_desktop_profile(): - installation.add_additional_packages('network-manager-applet') - - installation.enable_service('NetworkManager.service') - if self.type == NicType.NM_IWD: - # NM_IWD special handling - installation.configure_nm_iwd() - installation.disable_service('iwd.service') - - case NicType.MANUAL: - for nic in self.nics: - installation.configure_nic(nic) - installation.enable_service('systemd-networkd') - installation.enable_service('systemd-resolved') - @dataclass class WifiNetwork: diff --git a/archinstall/lib/network/network_handler.py b/archinstall/lib/network/network_handler.py new file mode 100644 index 00000000..ceed3452 --- /dev/null +++ b/archinstall/lib/network/network_handler.py @@ -0,0 +1,42 @@ +from archinstall.lib.installer import Installer +from archinstall.lib.models.network import NetworkConfiguration, NicType +from archinstall.lib.models.profile import ProfileConfiguration + + +class NetworkHandler: + def install_network_config( + self, + network_config: NetworkConfiguration, + installation: Installer, + profile_config: ProfileConfiguration | None = None, + ) -> None: + match network_config.type: + case NicType.ISO: + _ = installation.copy_iso_network_config( + enable_services=True, # Sources the ISO network configuration to the install medium. + ) + case NicType.NM | NicType.NM_IWD: + # Install NetworkManager package for both cases + packages = ['networkmanager'] + # Default back-end only for non-iwd + if network_config.type == NicType.NM: + packages.append('wpa_supplicant') + + installation.add_additional_packages(packages) + + # Desktop profile -> Always add applet + if profile_config and profile_config.profile: + if profile_config.profile.is_desktop_profile(): + installation.add_additional_packages('network-manager-applet') + + installation.enable_service('NetworkManager.service') + if network_config.type == NicType.NM_IWD: + # NM_IWD special handling + installation.configure_nm_iwd() + installation.disable_service('iwd.service') + + case NicType.MANUAL: + for nic in network_config.nics: + installation.configure_nic(nic) + installation.enable_service('systemd-networkd') + installation.enable_service('systemd-resolved') diff --git a/archinstall/lib/interactions/network_menu.py b/archinstall/lib/network/network_menu.py similarity index 100% rename from archinstall/lib/interactions/network_menu.py rename to archinstall/lib/network/network_menu.py diff --git a/archinstall/scripts/guided.py b/archinstall/scripts/guided.py index c8f6d95a..a45b83b3 100644 --- a/archinstall/scripts/guided.py +++ b/archinstall/scripts/guided.py @@ -19,6 +19,7 @@ from archinstall.lib.models.device import ( EncryptionType, ) from archinstall.lib.models.users import User +from archinstall.lib.network.network_handler import NetworkHandler from archinstall.lib.output import debug, error, info from archinstall.lib.packages.packages import check_version_upgrade from archinstall.lib.profile.profiles_handler import profile_handler @@ -115,12 +116,9 @@ def perform_installation( installation.add_bootloader(config.bootloader_config.bootloader, config.bootloader_config.uki, config.bootloader_config.removable) - # If user selected to copy the current ISO network configuration - # Perform a copy of the config - network_config = config.network_config - - if network_config: - network_config.install_network_config( + if config.network_config: + NetworkHandler().install_network_config( + config.network_config, installation, config.profile_config, ) diff --git a/archinstall/scripts/minimal.py b/archinstall/scripts/minimal.py index d1912318..3725ba55 100644 --- a/archinstall/scripts/minimal.py +++ b/archinstall/scripts/minimal.py @@ -9,6 +9,7 @@ from archinstall.lib.installer import Installer from archinstall.lib.models import Bootloader from archinstall.lib.models.profile import ProfileConfiguration from archinstall.lib.models.users import Password, User +from archinstall.lib.network.network_handler import NetworkHandler from archinstall.lib.output import debug, error, info from archinstall.lib.profile.profiles_handler import profile_handler @@ -35,10 +36,9 @@ def perform_installation(mountpoint: Path) -> None: installation.set_hostname('minimal-arch') installation.add_bootloader(Bootloader.Systemd) - network_config = config.network_config - - if network_config: - network_config.install_network_config( + if config.network_config: + NetworkHandler().install_network_config( + config.network_config, installation, config.profile_config, )