From 5dd6510e3e2dcdf85abda0747832d7906604a549 Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Mon, 19 Jan 2026 21:57:53 +1100 Subject: [PATCH 1/4] Refactor network config installer --- archinstall/lib/models/network.py | 40 +------------------ archinstall/lib/network/network_handler.py | 45 ++++++++++++++++++++++ archinstall/scripts/guided.py | 10 ++--- archinstall/scripts/minimal.py | 8 ++-- 4 files changed, 54 insertions(+), 49 deletions(-) create mode 100644 archinstall/lib/network/network_handler.py diff --git a/archinstall/lib/models/network.py b/archinstall/lib/models/network.py index cf3595e3ef..a9672b58e9 100644 --- a/archinstall/lib/models/network.py +++ b/archinstall/lib/models/network.py @@ -8,10 +8,8 @@ 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 + pass class NicType(Enum): @@ -140,42 +138,6 @@ def parse_arg(cls, config: _NetworkConfigurationSerialization) -> Self | None: 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 0000000000..3b0984792b --- /dev/null +++ b/archinstall/lib/network/network_handler.py @@ -0,0 +1,45 @@ +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') + + +network_handler = NetworkHandler() diff --git a/archinstall/scripts/guided.py b/archinstall/scripts/guided.py index f6eb2884e2..59591612cc 100644 --- a/archinstall/scripts/guided.py +++ b/archinstall/scripts/guided.py @@ -19,6 +19,7 @@ EncryptionType, ) from archinstall.lib.models.users import User +from archinstall.lib.network.network_handler import network_handler 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 @@ -106,12 +107,9 @@ def perform_installation(mountpoint: Path) -> None: 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: + network_handler.install_network_config( + config.network_config, installation, config.profile_config, ) diff --git a/archinstall/scripts/minimal.py b/archinstall/scripts/minimal.py index ab71f889a1..28d53ebf5e 100644 --- a/archinstall/scripts/minimal.py +++ b/archinstall/scripts/minimal.py @@ -10,6 +10,7 @@ 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 network_handler from archinstall.lib.output import debug, error, info from archinstall.lib.profile.profiles_handler import profile_handler @@ -36,10 +37,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: + network_handler.install_network_config( + config.network_config, installation, config.profile_config, ) From 88c9c3249ac8c0133b11f84ed02aed2bc064c5c1 Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Mon, 19 Jan 2026 21:59:44 +1100 Subject: [PATCH 2/4] Update --- archinstall/lib/models/network.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/archinstall/lib/models/network.py b/archinstall/lib/models/network.py index a9672b58e9..4e1c12faaf 100644 --- a/archinstall/lib/models/network.py +++ b/archinstall/lib/models/network.py @@ -3,14 +3,11 @@ 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 -if TYPE_CHECKING: - pass - class NicType(Enum): ISO = 'iso' From 5ba200cf20665a04c21eb591f0852f472435684f Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Mon, 19 Jan 2026 22:02:57 +1100 Subject: [PATCH 3/4] Move network menu --- archinstall/lib/global_menu.py | 2 +- archinstall/lib/interactions/__init__.py | 3 --- archinstall/lib/{interactions => network}/network_menu.py | 0 3 files changed, 1 insertion(+), 4 deletions(-) rename archinstall/lib/{interactions => network}/network_menu.py (100%) diff --git a/archinstall/lib/global_menu.py b/archinstall/lib/global_menu.py index 40e114f8a7..49c969887f 100644 --- a/archinstall/lib/global_menu.py +++ b/archinstall/lib/global_menu.py @@ -5,6 +5,7 @@ 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 @@ 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 987a1f8d00..4439e4f088 100644 --- a/archinstall/lib/interactions/__init__.py +++ b/archinstall/lib/interactions/__init__.py @@ -15,11 +15,9 @@ select_archinstall_language, ) from .manage_users_conf import UserList, ask_for_additional_users -from .network_menu import ManualNetworkConfig, ask_to_configure_network from .system_conf import ask_for_swap, select_driver, select_kernel __all__ = [ - 'ManualNetworkConfig', 'UserList', 'add_number_of_parallel_downloads', 'ask_additional_packages_to_install', @@ -28,7 +26,6 @@ '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/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 From c4de17f1921b6e2859f94d3a8a7a825546584d11 Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Thu, 22 Jan 2026 22:11:37 +1100 Subject: [PATCH 4/4] Remove singleton --- archinstall/lib/network/network_handler.py | 3 --- archinstall/scripts/guided.py | 4 ++-- archinstall/scripts/minimal.py | 4 ++-- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/archinstall/lib/network/network_handler.py b/archinstall/lib/network/network_handler.py index 3b0984792b..ceed345296 100644 --- a/archinstall/lib/network/network_handler.py +++ b/archinstall/lib/network/network_handler.py @@ -40,6 +40,3 @@ def install_network_config( installation.configure_nic(nic) installation.enable_service('systemd-networkd') installation.enable_service('systemd-resolved') - - -network_handler = NetworkHandler() diff --git a/archinstall/scripts/guided.py b/archinstall/scripts/guided.py index 59591612cc..9644172c7f 100644 --- a/archinstall/scripts/guided.py +++ b/archinstall/scripts/guided.py @@ -19,7 +19,7 @@ EncryptionType, ) from archinstall.lib.models.users import User -from archinstall.lib.network.network_handler import network_handler +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 @@ -108,7 +108,7 @@ def perform_installation(mountpoint: Path) -> None: installation.add_bootloader(config.bootloader_config.bootloader, config.bootloader_config.uki, config.bootloader_config.removable) if config.network_config: - network_handler.install_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 28d53ebf5e..c349972bb7 100644 --- a/archinstall/scripts/minimal.py +++ b/archinstall/scripts/minimal.py @@ -10,7 +10,7 @@ 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 network_handler +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 @@ -38,7 +38,7 @@ def perform_installation(mountpoint: Path) -> None: installation.add_bootloader(Bootloader.Systemd) if config.network_config: - network_handler.install_network_config( + NetworkHandler().install_network_config( config.network_config, installation, config.profile_config,