Add kernel enum (#4489)

This commit is contained in:
codefiles 2026-04-28 03:08:19 -04:00 committed by GitHub
parent 074dfbb178
commit 9010ccf9eb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 27 additions and 17 deletions

View File

@ -21,6 +21,7 @@ from archinstall.lib.models.device import DiskEncryption, DiskLayoutConfiguratio
from archinstall.lib.models.locale import LocaleConfiguration from archinstall.lib.models.locale import LocaleConfiguration
from archinstall.lib.models.mirrors import MirrorConfiguration from archinstall.lib.models.mirrors import MirrorConfiguration
from archinstall.lib.models.network import NetworkConfiguration 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.packages import Repository
from archinstall.lib.models.pacman import PacmanConfiguration from archinstall.lib.models.pacman import PacmanConfiguration
from archinstall.lib.models.profile import ProfileConfiguration from archinstall.lib.models.profile import ProfileConfiguration
@ -71,7 +72,7 @@ class ArchConfig:
auth_config: AuthenticationConfiguration | None = None auth_config: AuthenticationConfiguration | None = None
swap: ZramConfiguration | None = None swap: ZramConfiguration | None = None
hostname: str = 'archlinux' hostname: str = 'archlinux'
kernels: list[str] = field(default_factory=lambda: ['linux']) kernels: list[str] = field(default_factory=lambda: [DEFAULT_KERNEL.value])
ntp: bool = True ntp: bool = True
packages: list[str] = field(default_factory=list) packages: list[str] = field(default_factory=list)
pacman_config: PacmanConfiguration = field(default_factory=PacmanConfiguration.default) pacman_config: PacmanConfiguration = field(default_factory=PacmanConfiguration.default)

View File

@ -3,29 +3,24 @@ from typing import assert_never
from archinstall.lib.hardware import GfxDriver, SysInfo from archinstall.lib.hardware import GfxDriver, SysInfo
from archinstall.lib.menu.helpers import Confirmation, Selection from archinstall.lib.menu.helpers import Confirmation, Selection
from archinstall.lib.models.application import ZramAlgorithm, ZramConfiguration 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.lib.translationhandler import tr
from archinstall.tui.ui.menu_item import MenuItem, MenuItemGroup from archinstall.tui.ui.menu_item import MenuItem, MenuItemGroup
from archinstall.tui.ui.result import ResultType 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. Asks the user to select a kernel for system.
:return: The string as a selected kernel :return: The string as a selected kernel
:rtype: string :rtype: string
""" """
kernels = ['linux', 'linux-lts', 'linux-zen', 'linux-hardened'] group = MenuItemGroup.from_enum(Kernel, sort_items=True, preset=preset)
default_kernel = 'linux' group.set_default_by_value(DEFAULT_KERNEL)
group.set_focus_by_value(DEFAULT_KERNEL)
items = [MenuItem(k, value=k) for k in kernels] result = await Selection[Kernel](
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](
group, group,
header=tr('Select which kernel(s) to install'), header=tr('Select which kernel(s) to install'),
allow_skip=True, allow_skip=True,

View File

@ -22,6 +22,7 @@ from archinstall.lib.models.device import DiskLayoutConfiguration, DiskLayoutTyp
from archinstall.lib.models.locale import LocaleConfiguration from archinstall.lib.models.locale import LocaleConfiguration
from archinstall.lib.models.mirrors import MirrorConfiguration from archinstall.lib.models.mirrors import MirrorConfiguration
from archinstall.lib.models.network import NetworkConfiguration, NicType 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.packages import Repository
from archinstall.lib.models.pacman import PacmanConfiguration from archinstall.lib.models.pacman import PacmanConfiguration
from archinstall.lib.models.profile import ProfileConfiguration from archinstall.lib.models.profile import ProfileConfiguration
@ -103,7 +104,7 @@ class GlobalMenu(AbstractMenu[None]):
), ),
MenuItem( MenuItem(
text=tr('Kernels'), text=tr('Kernels'),
value=['linux'], value=[DEFAULT_KERNEL],
action=select_kernel, action=select_kernel,
preview_action=self._prev_kernel, preview_action=self._prev_kernel,
mandatory=True, mandatory=True,

View File

@ -48,6 +48,7 @@ from archinstall.lib.models.device import (
from archinstall.lib.models.locale import LocaleConfiguration from archinstall.lib.models.locale import LocaleConfiguration
from archinstall.lib.models.mirrors import MirrorConfiguration from archinstall.lib.models.mirrors import MirrorConfiguration
from archinstall.lib.models.network import Nic 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.packages import Repository
from archinstall.lib.models.pacman import PacmanConfiguration from archinstall.lib.models.pacman import PacmanConfiguration
from archinstall.lib.models.users import User from archinstall.lib.models.users import User
@ -60,7 +61,7 @@ from archinstall.lib.plugins import plugins
from archinstall.lib.translationhandler import tr from archinstall.lib.translationhandler import tr
# Any package that the Installer() is responsible for (optional and the default ones) # 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 # Additional packages that are installed if the user is running the Live ISO with accessibility tools enabled
__accessibility_packages__ = ['brltty', 'espeakup', 'alsa-utils'] __accessibility_packages__ = ['brltty', 'espeakup', 'alsa-utils']
@ -80,7 +81,7 @@ class Installer:
It also wraps :py:func:`~archinstall.Installer.pacstrap` among other things. It also wraps :py:func:`~archinstall.Installer.pacstrap` among other things.
""" """
self._base_packages = base_packages or __packages__[:3] 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_config = disk_config
self._disk_encryption = disk_config.disk_encryption or DiskEncryption(EncryptionType.NO_ENCRYPTION) self._disk_encryption = disk_config.disk_encryption or DiskEncryption(EncryptionType.NO_ENCRYPTION)

View File

@ -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

View File

@ -1,4 +1,4 @@
from collections.abc import Awaitable, Callable from collections.abc import Awaitable, Callable, Iterable
from dataclasses import dataclass, field from dataclasses import dataclass, field
from enum import Enum from enum import Enum
from functools import cached_property from functools import cached_property
@ -148,7 +148,7 @@ class MenuItemGroup:
cls, cls,
enum_cls: type[Enum], enum_cls: type[Enum],
sort_items: bool = False, sort_items: bool = False,
preset: Enum | None = None, preset: Iterable[Enum] | Enum | None = None,
) -> Self: ) -> Self:
items = [MenuItem(elem.value, value=elem) for elem in enum_cls] items = [MenuItem(elem.value, value=elem) for elem in enum_cls]
group = cls(items, sort_items=sort_items) group = cls(items, sort_items=sort_items)