From 2f5b1fa6b1911f83c9c230e789f3489776a8c820 Mon Sep 17 00:00:00 2001 From: codefiles <11915375+codefiles@users.noreply.github.com> Date: Mon, 27 Apr 2026 20:44:25 -0400 Subject: [PATCH] Add kernel enum --- archinstall/lib/args.py | 3 ++- archinstall/lib/general/system_menu.py | 17 ++++++----------- archinstall/lib/global_menu.py | 3 ++- archinstall/lib/installer.py | 5 +++-- archinstall/lib/models/package_types.py | 12 ++++++++++++ archinstall/tui/ui/menu_item.py | 4 ++-- 6 files changed, 27 insertions(+), 17 deletions(-) create mode 100644 archinstall/lib/models/package_types.py diff --git a/archinstall/lib/args.py b/archinstall/lib/args.py index 79441a064b..77545736e0 100644 --- a/archinstall/lib/args.py +++ b/archinstall/lib/args.py @@ -21,6 +21,7 @@ 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 from archinstall.lib.models.pacman import PacmanConfiguration from archinstall.lib.models.profile import ProfileConfiguration @@ -71,7 +72,7 @@ class ArchConfig: auth_config: AuthenticationConfiguration | None = None swap: ZramConfiguration | None = None hostname: str = 'archlinux' - kernels: list[str] = field(default_factory=lambda: ['linux']) + 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) diff --git a/archinstall/lib/general/system_menu.py b/archinstall/lib/general/system_menu.py index 5c4d4634d2..7fa0d1f2e6 100644 --- a/archinstall/lib/general/system_menu.py +++ b/archinstall/lib/general/system_menu.py @@ -3,29 +3,24 @@ from archinstall.lib.hardware import GfxDriver, SysInfo from archinstall.lib.menu.helpers import Confirmation, Selection from archinstall.lib.models.application import ZramAlgorithm, ZramConfiguration +from archinstall.lib.models.package_types import DEFAULT_KERNEL, Kernel from archinstall.lib.translationhandler import tr from archinstall.tui.ui.menu_item import MenuItem, MenuItemGroup from archinstall.tui.ui.result import ResultType -async def select_kernel(preset: list[str] = []) -> list[str]: +async def select_kernel(preset: list[Kernel] = []) -> list[Kernel]: """ Asks the user to select a kernel for system. :return: The string as a selected kernel :rtype: string """ - kernels = ['linux', 'linux-lts', 'linux-zen', 'linux-hardened'] - default_kernel = 'linux' + group = MenuItemGroup.from_enum(Kernel, sort_items=True, preset=preset) + group.set_default_by_value(DEFAULT_KERNEL) + group.set_focus_by_value(DEFAULT_KERNEL) - items = [MenuItem(k, value=k) for k in kernels] - - group = MenuItemGroup(items, sort_items=True) - group.set_default_by_value(default_kernel) - group.set_focus_by_value(default_kernel) - group.set_selected_by_value(preset) - - result = await Selection[str]( + result = await Selection[Kernel]( group, header=tr('Select which kernel(s) to install'), allow_skip=True, diff --git a/archinstall/lib/global_menu.py b/archinstall/lib/global_menu.py index e327b38858..3bfefce7aa 100644 --- a/archinstall/lib/global_menu.py +++ b/archinstall/lib/global_menu.py @@ -22,6 +22,7 @@ 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 from archinstall.lib.models.pacman import PacmanConfiguration from archinstall.lib.models.profile import ProfileConfiguration @@ -103,7 +104,7 @@ def _get_menu_options(self) -> list[MenuItem]: ), MenuItem( text=tr('Kernels'), - value=['linux'], + value=[DEFAULT_KERNEL], action=select_kernel, preview_action=self._prev_kernel, mandatory=True, diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index ff530df046..ca98fdb959 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -48,6 +48,7 @@ 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 from archinstall.lib.models.pacman import PacmanConfiguration from archinstall.lib.models.users import User @@ -60,7 +61,7 @@ from archinstall.lib.translationhandler import tr # Any package that the Installer() is responsible for (optional and the default ones) -__packages__ = ['base', 'sudo', 'linux-firmware', 'linux', 'linux-lts', 'linux-zen', 'linux-hardened'] +__packages__ = ['base', 'sudo', 'linux-firmware'] + [k.value for k in Kernel] # Additional packages that are installed if the user is running the Live ISO with accessibility tools enabled __accessibility_packages__ = ['brltty', 'espeakup', 'alsa-utils'] @@ -80,7 +81,7 @@ def __init__( It also wraps :py:func:`~archinstall.Installer.pacstrap` among other things. """ self._base_packages = base_packages or __packages__[:3] - self.kernels = kernels or ['linux'] + self.kernels = kernels or [DEFAULT_KERNEL.value] self._disk_config = disk_config self._disk_encryption = disk_config.disk_encryption or DiskEncryption(EncryptionType.NO_ENCRYPTION) diff --git a/archinstall/lib/models/package_types.py b/archinstall/lib/models/package_types.py new file mode 100644 index 0000000000..e314c30a97 --- /dev/null +++ b/archinstall/lib/models/package_types.py @@ -0,0 +1,12 @@ +from enum import StrEnum, auto +from typing import Final + + +class Kernel(StrEnum): + LINUX = auto() + LINUX_LTS = 'linux-lts' + LINUX_ZEN = 'linux-zen' + LINUX_HARDENED = 'linux-hardened' + + +DEFAULT_KERNEL: Final = Kernel.LINUX diff --git a/archinstall/tui/ui/menu_item.py b/archinstall/tui/ui/menu_item.py index ed5a16ec54..4c10e275ef 100644 --- a/archinstall/tui/ui/menu_item.py +++ b/archinstall/tui/ui/menu_item.py @@ -1,4 +1,4 @@ -from collections.abc import Awaitable, Callable +from collections.abc import Awaitable, Callable, Iterable from dataclasses import dataclass, field from enum import Enum from functools import cached_property @@ -148,7 +148,7 @@ def from_enum( cls, enum_cls: type[Enum], sort_items: bool = False, - preset: Enum | None = None, + preset: Iterable[Enum] | Enum | None = None, ) -> Self: items = [MenuItem(elem.value, value=elem) for elem in enum_cls] group = cls(items, sort_items=sort_items)