Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 13 additions & 20 deletions archinstall/lib/args.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
from archinstall.lib.models.config import SubConfig
from archinstall.lib.models.device import DiskEncryption, DiskLayoutConfiguration
from archinstall.lib.models.locale import LocaleConfiguration
from archinstall.lib.models.mirrors import MirrorConfiguration
from archinstall.lib.models.network import NetworkConfiguration
from archinstall.lib.models.package_types import DEFAULT_KERNEL
from archinstall.lib.models.packages import Repository
Expand Down Expand Up @@ -66,7 +65,6 @@ class ArchConfigType(StrEnum):
ARCHINSTALL_LANGUAGE = 'archinstall_language'
DISK_CONFIG = 'disk_config'
PROFILE_CONFIG = 'profile_config'
MIRROR_CONFIG = 'mirror_config'
NETWORK_CONFIG = 'network_config'
BOOTLOADER_CONFIG = 'bootloader_config'
APP_CONFIG = 'app_config'
Expand Down Expand Up @@ -98,8 +96,6 @@ def text(self) -> str:
return tr('Disk configuration')
case ArchConfigType.PROFILE_CONFIG:
return tr('Profile')
case ArchConfigType.MIRROR_CONFIG:
return tr('Mirrors and repositories')
case ArchConfigType.NETWORK_CONFIG:
return tr('Network')
case ArchConfigType.BOOTLOADER_CONFIG:
Expand All @@ -123,7 +119,7 @@ def text(self) -> str:
case ArchConfigType.PACKAGES:
return tr('Additional packages')
case ArchConfigType.PACMAN_CONFIG:
return tr('Pacman')
return tr('Pacman configuration')
case ArchConfigType.CUSTOM_COMMANDS:
return tr('Custom commands')
case ArchConfigType.USERS:
Expand All @@ -142,7 +138,7 @@ class ArchConfig:
archinstall_language: Language = field(default_factory=lambda: translation_handler.get_language_by_abbr('en'))
disk_config: DiskLayoutConfiguration | None = None
profile_config: ProfileConfiguration | None = None
mirror_config: MirrorConfiguration | None = None
pacman_config: PacmanConfiguration | None = None
network_config: NetworkConfiguration | None = None
bootloader_config: BootloaderConfiguration | None = None
app_config: ApplicationConfiguration | None = None
Expand All @@ -152,7 +148,6 @@ class ArchConfig:
kernels: list[str] = field(default_factory=lambda: [DEFAULT_KERNEL.value])
ntp: bool = True
packages: list[str] = field(default_factory=list)
pacman_config: PacmanConfiguration = field(default_factory=PacmanConfiguration.default)
timezone: str = 'UTC'
services: list[str] = field(default_factory=list)
custom_commands: list[str] = field(default_factory=list)
Expand Down Expand Up @@ -203,12 +198,10 @@ def plain_cfg(self) -> dict[ArchConfigType, str | list[str] | bool]:
}

def sub_cfg(self) -> dict[ArchConfigType, SubConfig]:
cfg: dict[ArchConfigType, SubConfig] = {
ArchConfigType.PACMAN_CONFIG: self.pacman_config,
}
cfg: dict[ArchConfigType, SubConfig] = {}

if self.mirror_config:
cfg[ArchConfigType.MIRROR_CONFIG] = self.mirror_config
if self.pacman_config:
cfg[ArchConfigType.PACMAN_CONFIG] = self.pacman_config

if self.bootloader_config:
cfg[ArchConfigType.BOOTLOADER_CONFIG] = self.bootloader_config
Expand Down Expand Up @@ -271,16 +264,21 @@ def from_config(cls, args_config: dict[str, Any], args: Arguments) -> Self:
if profile_config := args_config.get('profile_config', None):
arch_config.profile_config = ProfileConfiguration.parse_arg(profile_config)

if mirror_config := args_config.get('mirror_config', None):
if pacman_config := args_config.get('pacman_config', None):
backwards_compatible_repo = []
if additional_repositories := args_config.get('additional-repositories', []):
backwards_compatible_repo = [Repository(r) for r in additional_repositories]

arch_config.mirror_config = MirrorConfiguration.parse_args(
mirror_config,
arch_config.pacman_config = PacmanConfiguration.parse_args(
pacman_config,
backwards_compatible_repo,
)

if parallel_downloads := args_config.get('parallel_downloads', 0):
if arch_config.pacman_config is None:
arch_config.pacman_config = PacmanConfiguration()
arch_config.pacman_config.parallel_downloads = int(parallel_downloads)

if net_config := args_config.get('network_config', None):
arch_config.network_config = NetworkConfiguration.parse_arg(net_config)

Expand Down Expand Up @@ -315,11 +313,6 @@ def from_config(cls, args_config: dict[str, Any], args: Arguments) -> Self:
if packages := args_config.get('packages', []):
arch_config.packages = packages

if pacman_config := args_config.get('pacman_config', None):
arch_config.pacman_config = PacmanConfiguration.parse_arg(pacman_config)
elif parallel_downloads := args_config.get('parallel_downloads', 0):
arch_config.pacman_config = PacmanConfiguration(parallel_downloads=int(parallel_downloads))

swap_arg = args_config.get('swap')
if swap_arg is not None:
arch_config.swap = ZramConfiguration.parse_arg(swap_arg)
Expand Down
67 changes: 24 additions & 43 deletions archinstall/lib/global_menu.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,11 @@
from archinstall.lib.locale.locale_menu import LocaleMenu
from archinstall.lib.menu.abstract_menu import AbstractMenu, SpecialMenuKey
from archinstall.lib.mirror.mirror_handler import MirrorListHandler
from archinstall.lib.mirror.mirror_menu import MirrorMenu
from archinstall.lib.models.application import ApplicationConfiguration, ZramConfiguration
from archinstall.lib.models.authentication import AuthenticationConfiguration
from archinstall.lib.models.bootloader import Bootloader, BootloaderConfiguration
from archinstall.lib.models.device import DiskLayoutConfiguration, DiskLayoutType, PartitionModification
from archinstall.lib.models.locale import LocaleConfiguration
from archinstall.lib.models.mirrors import MirrorConfiguration
from archinstall.lib.models.network import NetworkConfiguration, NicType
from archinstall.lib.models.package_types import DEFAULT_KERNEL
from archinstall.lib.models.packages import Repository
Expand Down Expand Up @@ -76,10 +74,10 @@ def _get_menu_options(self) -> list[MenuItem]:
key='locale_config',
),
MenuItem(
text=tr('Mirrors and repositories'),
action=self._mirror_configuration,
preview_action=self._prev_mirror_config,
key='mirror_config',
text=tr('Pacman configuration'),
action=self._pacman_configuration,
preview_action=self._prev_pacman_config,
key='pacman_config',
),
MenuItem(
text=tr('Disk configuration'),
Expand Down Expand Up @@ -143,13 +141,6 @@ def _get_menu_options(self) -> list[MenuItem]:
preview_action=self._prev_network_config,
key='network_config',
),
MenuItem(
text=tr('Pacman'),
action=self._pacman_configuration,
value=PacmanConfiguration.default(),
preview_action=self._prev_pacman_config,
key='pacman_config',
),
MenuItem(
text=tr('Additional packages'),
action=self._select_additional_packages,
Expand Down Expand Up @@ -419,19 +410,6 @@ def _prev_hostname(self, item: MenuItem) -> str | None:
return f'{tr("Hostname")}: {item.value}'
return None

async def _pacman_configuration(self, preset: PacmanConfiguration) -> PacmanConfiguration | None:
return await PacmanMenu(preset, advanced=self._advanced).show()

def _prev_pacman_config(self, item: MenuItem) -> str | None:
if not item.value:
return None
config: PacmanConfiguration = item.value
output = ''
if self._advanced:
output += '{}: {}\n'.format(tr('Parallel Downloads'), config.parallel_downloads)
output += '{}: {}'.format(tr('Color'), config.color)
return output

def _prev_kernel(self, item: MenuItem) -> str | None:
if item.value:
kernel = ', '.join(item.value)
Expand Down Expand Up @@ -555,7 +533,7 @@ async def _select_profile(self, current_profile: ProfileConfiguration | None) ->
return profile_config

async def _select_additional_packages(self, preset: list[str]) -> list[str]:
config: MirrorConfiguration | None = self._item_group.find_by_key('mirror_config').value
config: PacmanConfiguration | None = self._item_group.find_by_key('pacman_config').value

repositories: set[Repository] = set()
if config:
Expand All @@ -568,51 +546,54 @@ async def _select_additional_packages(self, preset: list[str]) -> list[str]:

return packages

async def _mirror_configuration(self, preset: MirrorConfiguration | None = None) -> MirrorConfiguration | None:
async def _pacman_configuration(self, preset: PacmanConfiguration | None = None) -> PacmanConfiguration | None:
if self._mirror_list_handler is None:
self._mirror_list_handler = MirrorListHandler()

mirror_configuration = await MirrorMenu(self._mirror_list_handler, preset=preset).run()
pacman_configuration = await PacmanMenu(self._mirror_list_handler, preset=preset).run()

if mirror_configuration and mirror_configuration.optional_repositories:
if pacman_configuration and pacman_configuration.optional_repositories:
# reset the package list cache in case the repository selection has changed
list_available_packages.cache_clear()

# enable the repositories in the config
pacman_config = PacmanConfig(None)
pacman_config.enable(mirror_configuration.optional_repositories)
pacman_config.enable(pacman_configuration.optional_repositories)
pacman_config.apply()

return mirror_configuration
return pacman_configuration

def _prev_mirror_config(self, item: MenuItem) -> str | None:
def _prev_pacman_config(self, item: MenuItem) -> str | None:
if not item.value:
return None

mirror_config: MirrorConfiguration = item.value
pacman_config: PacmanConfiguration = item.value

output = ''
if mirror_config.mirror_regions:
if pacman_config.mirror_regions:
title = tr('Selected mirror regions')
divider = '-' * len(title)
regions = mirror_config.region_names
regions = pacman_config.region_names
output += f'{title}\n{divider}\n{regions}\n\n'

if mirror_config.custom_servers:
if pacman_config.custom_servers:
title = tr('Custom servers')
divider = '-' * len(title)
servers = mirror_config.custom_server_urls
servers = pacman_config.custom_server_urls
output += f'{title}\n{divider}\n{servers}\n\n'

if mirror_config.optional_repositories:
if pacman_config.optional_repositories:
title = tr('Optional repositories')
divider = '-' * len(title)
repos = ', '.join(r.value for r in mirror_config.optional_repositories)
repos = ', '.join(r.value for r in pacman_config.optional_repositories)
output += f'{title}\n{divider}\n{repos}\n\n'

if mirror_config.custom_repositories:
if pacman_config.custom_repositories:
title = tr('Custom repositories')
table = FormattedOutput.as_table(mirror_config.custom_repositories)
output += f'{title}:\n\n{table}'
table = FormattedOutput.as_table(pacman_config.custom_repositories)
output += f'{title}:\n\n{table}\n\n'

output += '{}: {}\n'.format(tr('Parallel Downloads'), pacman_config.parallel_downloads)
output += '{}: {}'.format(tr('Color'), pacman_config.color)

return output.strip()
23 changes: 11 additions & 12 deletions archinstall/lib/installer.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@
Unit,
)
from archinstall.lib.models.locale import LocaleConfiguration
from archinstall.lib.models.mirrors import MirrorConfiguration
from archinstall.lib.models.network import Nic
from archinstall.lib.models.package_types import DEFAULT_KERNEL, Kernel
from archinstall.lib.models.packages import Repository
Expand Down Expand Up @@ -553,14 +552,14 @@ def post_install_check(self, *args: str, **kwargs: str) -> list[str]:
def set_mirrors(
self,
mirror_list_handler: MirrorListHandler,
mirror_config: MirrorConfiguration,
pacman_config: PacmanConfiguration,
on_target: bool = False,
) -> None:
"""
Set the mirror configuration for the installation.

:param mirror_config: The mirror configuration to use.
:type mirror_config: MirrorConfiguration
:param pacman_config: The mirror configuration to use.
:type pacman_config: PacmanConfiguration

:on_target: Whether to set the mirrors on the target system or the live system.
:param on_target: bool
Expand All @@ -569,29 +568,29 @@ def set_mirrors(

for plugin in plugins.values():
if hasattr(plugin, 'on_mirrors'):
if result := plugin.on_mirrors(mirror_config):
mirror_config = result
if result := plugin.on_mirrors(pacman_config):
pacman_config = result

if on_target:
mirrorlist_config = self.target / MIRRORLIST.relative_to_root()
pacman_config = self.target / PACMAN_CONF.relative_to_root()
pacman_conf_path = self.target / PACMAN_CONF.relative_to_root()
else:
mirrorlist_config = MIRRORLIST
pacman_config = PACMAN_CONF
pacman_conf_path = PACMAN_CONF

repositories_config = mirror_config.repositories_config()
repositories_config = pacman_config.repositories_config()
if repositories_config:
debug(f'Pacman config: {repositories_config}')

with open(pacman_config, 'a') as fp:
with open(pacman_conf_path, 'a') as fp:
fp.write(repositories_config)

regions_config = mirror_config.regions_config(mirror_list_handler, speed_sort=True)
regions_config = pacman_config.regions_config(mirror_list_handler, speed_sort=True)
if regions_config:
debug(f'Mirrorlist:\n{regions_config}')
mirrorlist_config.write_text(regions_config)

custom_servers = mirror_config.custom_servers_config()
custom_servers = pacman_config.custom_servers_config()
if custom_servers:
debug(f'Custom servers:\n{custom_servers}')

Expand Down
2 changes: 1 addition & 1 deletion archinstall/lib/mirror/mirror_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from pathlib import Path

from archinstall.lib.models import MirrorRegion
from archinstall.lib.models.mirrors import MirrorStatusEntryV3, MirrorStatusListV3
from archinstall.lib.models.pacman import MirrorStatusEntryV3, MirrorStatusListV3
from archinstall.lib.networking import fetch_data_from_url
from archinstall.lib.output import debug, info
from archinstall.lib.pathnames import MIRRORLIST
Expand Down
Loading
Loading