From 2d7a62d7bb3349f7fd241b6481bdb12e4f789568 Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Sun, 1 Mar 2026 16:14:32 +1100 Subject: [PATCH 1/3] Fix 4223 - IWD --- archinstall/default_profiles/desktop.py | 2 - archinstall/lib/installer.py | 8 ---- archinstall/lib/network/network_handler.py | 42 ------------------- archinstall/lib/network/utils.py | 47 ++++++++++++++++++++++ archinstall/scripts/guided.py | 4 +- archinstall/scripts/minimal.py | 4 +- 6 files changed, 51 insertions(+), 56 deletions(-) delete mode 100644 archinstall/lib/network/network_handler.py create mode 100644 archinstall/lib/network/utils.py diff --git a/archinstall/default_profiles/desktop.py b/archinstall/default_profiles/desktop.py index b40eb54e81..17ea1f2b02 100644 --- a/archinstall/default_profiles/desktop.py +++ b/archinstall/default_profiles/desktop.py @@ -31,8 +31,6 @@ def packages(self) -> list[str]: 'openssh', 'htop', 'wget', - 'iwd', - 'wireless_tools', 'smartmontools', 'xdg-utils', ] diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index 0603639add..157a0725b7 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -808,14 +808,6 @@ def post_install_enable_networkd_resolved(*args: str, **kwargs: str) -> None: return True - def configure_nm_iwd(self) -> None: - # Create NetworkManager config directory and write iwd backend conf - nm_conf_dir = self.target / 'etc/NetworkManager/conf.d' - nm_conf_dir.mkdir(parents=True, exist_ok=True) - - iwd_backend_conf = nm_conf_dir / 'wifi_backend.conf' - iwd_backend_conf.write_text('[device]\nwifi.backend=iwd\n') - def mkinitcpio(self, flags: list[str]) -> bool: for plugin in plugins.values(): if hasattr(plugin, 'on_mkinitcpio'): diff --git a/archinstall/lib/network/network_handler.py b/archinstall/lib/network/network_handler.py deleted file mode 100644 index ceed345296..0000000000 --- a/archinstall/lib/network/network_handler.py +++ /dev/null @@ -1,42 +0,0 @@ -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/network/utils.py b/archinstall/lib/network/utils.py new file mode 100644 index 0000000000..135485847f --- /dev/null +++ b/archinstall/lib/network/utils.py @@ -0,0 +1,47 @@ +from archinstall.lib.installer import Installer +from archinstall.lib.models.network import NetworkConfiguration, NicType +from archinstall.lib.models.profile import ProfileConfiguration + + +def install_network_config( + 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: + packages = ['networkmanager'] + + if network_config.type == NicType.NM: + packages.append('wpa_supplicant') + else: + packages.append('iwd') + + if profile_config and profile_config.profile: + if profile_config.profile.is_desktop_profile(): + packages.append('network-manager-applet') + + installation.add_additional_packages(packages) + installation.enable_service('NetworkManager.service') + + if network_config.type == NicType.NM_IWD: + _configure_nm_iwd(installation) + 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') + + +def _configure_nm_iwd(installation: Installer) -> None: + nm_conf_dir = installation.target / 'etc/NetworkManager/conf.d' + nm_conf_dir.mkdir(parents=True, exist_ok=True) + + iwd_backend_conf = nm_conf_dir / 'wifi_backend.conf' + _ = iwd_backend_conf.write_text('[device]\nwifi.backend=iwd\n') diff --git a/archinstall/scripts/guided.py b/archinstall/scripts/guided.py index 64dbbff913..3b658b9e27 100644 --- a/archinstall/scripts/guided.py +++ b/archinstall/scripts/guided.py @@ -16,7 +16,7 @@ from archinstall.lib.models import Bootloader from archinstall.lib.models.device import DiskLayoutType, EncryptionType from archinstall.lib.models.users import User -from archinstall.lib.network.network_handler import NetworkHandler +from archinstall.lib.network.utils import install_network_config from archinstall.lib.output import debug, error, info from archinstall.lib.packages.util import check_version_upgrade from archinstall.lib.profile.profiles_handler import profile_handler @@ -114,7 +114,7 @@ def perform_installation( installation.add_bootloader(config.bootloader_config.bootloader, config.bootloader_config.uki, config.bootloader_config.removable) if config.network_config: - NetworkHandler().install_network_config( + install_network_config( config.network_config, installation, config.profile_config, diff --git a/archinstall/scripts/minimal.py b/archinstall/scripts/minimal.py index 13bdcfd193..a32aa9eed6 100644 --- a/archinstall/scripts/minimal.py +++ b/archinstall/scripts/minimal.py @@ -9,7 +9,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 NetworkHandler +from archinstall.lib.network.utils import install_network_config 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: - NetworkHandler().install_network_config( + install_network_config( config.network_config, installation, config.profile_config, From 04e130953e916130fd7e511a6f92c3a65bcc6d91 Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Sun, 1 Mar 2026 16:24:10 +1100 Subject: [PATCH 2/3] Update --- archinstall/lib/network/{utils.py => network_handler.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename archinstall/lib/network/{utils.py => network_handler.py} (100%) diff --git a/archinstall/lib/network/utils.py b/archinstall/lib/network/network_handler.py similarity index 100% rename from archinstall/lib/network/utils.py rename to archinstall/lib/network/network_handler.py From b3332a9c2c42fc1bebdbf2763e5565682cf4c399 Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Sun, 1 Mar 2026 16:25:02 +1100 Subject: [PATCH 3/3] Update --- archinstall/scripts/guided.py | 2 +- archinstall/scripts/minimal.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/archinstall/scripts/guided.py b/archinstall/scripts/guided.py index 3b658b9e27..b32d0288c9 100644 --- a/archinstall/scripts/guided.py +++ b/archinstall/scripts/guided.py @@ -16,7 +16,7 @@ from archinstall.lib.models import Bootloader from archinstall.lib.models.device import DiskLayoutType, EncryptionType from archinstall.lib.models.users import User -from archinstall.lib.network.utils import install_network_config +from archinstall.lib.network.network_handler import install_network_config from archinstall.lib.output import debug, error, info from archinstall.lib.packages.util import check_version_upgrade from archinstall.lib.profile.profiles_handler import profile_handler diff --git a/archinstall/scripts/minimal.py b/archinstall/scripts/minimal.py index a32aa9eed6..7b9ada723a 100644 --- a/archinstall/scripts/minimal.py +++ b/archinstall/scripts/minimal.py @@ -9,7 +9,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.utils import install_network_config +from archinstall.lib.network.network_handler import install_network_config from archinstall.lib.output import debug, error, info from archinstall.lib.profile.profiles_handler import profile_handler