Skip to content

Commit aa442be

Browse files
committed
Refactor SysInfo.has_uefi() to DI for bootloader
1 parent ec9ee80 commit aa442be

File tree

3 files changed

+29
-33
lines changed

3 files changed

+29
-33
lines changed

archinstall/lib/bootloader/bootloader_menu.py

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
from archinstall.tui.ui.menu_item import MenuItem, MenuItemGroup
77
from archinstall.tui.ui.result import ResultType
88

9-
from ..hardware import SysInfo
109
from ..menu.abstract_menu import AbstractSubMenu
1110
from ..models.bootloader import Bootloader, BootloaderConfiguration
1211

@@ -15,10 +14,12 @@ class BootloaderMenu(AbstractSubMenu[BootloaderConfiguration]):
1514
def __init__(
1615
self,
1716
bootloader_conf: BootloaderConfiguration,
17+
uefi: bool,
1818
skip_boot: bool = False,
1919
):
2020
self._bootloader_conf = bootloader_conf
2121
self._skip_boot = skip_boot
22+
self._uefi = uefi
2223
menu_options = self._define_menu_options()
2324

2425
self._item_group = MenuItemGroup(menu_options, sort_items=False, checkmarks=True)
@@ -30,15 +31,14 @@ def __init__(
3031

3132
def _define_menu_options(self) -> list[MenuItem]:
3233
bootloader = self._bootloader_conf.bootloader
33-
has_uefi = SysInfo.has_uefi()
3434

3535
# UKI availability
36-
uki_enabled = has_uefi and bootloader.has_uki_support()
36+
uki_enabled = self._uefi and bootloader.has_uki_support()
3737
if not uki_enabled:
3838
self._bootloader_conf.uki = False
3939

4040
# Removable availability
41-
removable_enabled = has_uefi and bootloader.has_removable_support()
41+
removable_enabled = self._uefi and bootloader.has_removable_support()
4242
if not removable_enabled:
4343
self._bootloader_conf.removable = False
4444

@@ -92,12 +92,12 @@ def run(self) -> BootloaderConfiguration:
9292
return self._bootloader_conf
9393

9494
def _select_bootloader(self, preset: Bootloader | None) -> Bootloader | None:
95-
bootloader = select_bootloader(preset, self._skip_boot)
95+
bootloader = select_bootloader(preset, self._uefi, self._skip_boot)
9696

9797
if bootloader:
9898
# Update UKI option based on bootloader
9999
uki_item = self._menu_item_group.find_by_key('uki')
100-
if not SysInfo.has_uefi() or not bootloader.has_uki_support():
100+
if not self._uefi or not bootloader.has_uki_support():
101101
uki_item.enabled = False
102102
uki_item.value = False
103103
self._bootloader_conf.uki = False
@@ -106,7 +106,7 @@ def _select_bootloader(self, preset: Bootloader | None) -> Bootloader | None:
106106

107107
# Update removable option based on bootloader
108108
removable_item = self._menu_item_group.find_by_key('removable')
109-
if not SysInfo.has_uefi() or not bootloader.has_removable_support():
109+
if not self._uefi or not bootloader.has_removable_support():
110110
removable_item.enabled = False
111111
removable_item.value = False
112112
self._bootloader_conf.removable = False
@@ -180,27 +180,23 @@ def _select_removable(self, preset: bool) -> bool:
180180

181181
def select_bootloader(
182182
preset: Bootloader | None,
183+
uefi: bool,
183184
skip_boot: bool = False,
184185
) -> Bootloader | None:
185186
options = []
186187
hidden_options = []
187-
default = None
188188
header = tr('Select bootloader to install')
189189

190-
if skip_boot:
191-
default = Bootloader.NO_BOOTLOADER
192-
else:
190+
default = Bootloader.get_default(uefi, skip_boot)
191+
192+
if not skip_boot:
193193
hidden_options += [Bootloader.NO_BOOTLOADER]
194194

195-
if not SysInfo.has_uefi():
195+
if not uefi:
196196
options += [Bootloader.Grub, Bootloader.Limine]
197-
if not default:
198-
default = Bootloader.Grub
199197
header += '\n' + tr('UEFI is not detected and some options are disabled')
200198
else:
201199
options += [b for b in Bootloader if b not in hidden_options]
202-
if not default:
203-
default = Bootloader.Systemd
204200

205201
items = [MenuItem(o.value, value=o) for o in options]
206202
group = MenuItemGroup(items)

archinstall/lib/global_menu.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ def __init__(
4747
self._arch_config = arch_config
4848
self._mirror_list_handler = mirror_list_handler
4949
self._skip_boot = skip_boot
50+
self._uefi = SysInfo.has_uefi()
5051
menu_options = self._get_menu_options()
5152

5253
self._item_group = MenuItemGroup(
@@ -94,7 +95,7 @@ def _get_menu_options(self) -> list[MenuItem]:
9495
),
9596
MenuItem(
9697
text=tr('Bootloader'),
97-
value=BootloaderConfiguration.get_default(self._skip_boot),
98+
value=BootloaderConfiguration.get_default(self._uefi, self._skip_boot),
9899
action=self._select_bootloader_config,
99100
preview_action=self._prev_bootloader_config,
100101
key='bootloader_config',
@@ -422,7 +423,7 @@ def _prev_kernel(self, item: MenuItem) -> str | None:
422423
def _prev_bootloader_config(self, item: MenuItem) -> str | None:
423424
bootloader_config: BootloaderConfiguration | None = item.value
424425
if bootloader_config:
425-
return bootloader_config.preview()
426+
return bootloader_config.preview(self._uefi)
426427
return None
427428

428429
def _validate_bootloader(self) -> str | None:
@@ -455,7 +456,7 @@ def _validate_bootloader(self) -> str | None:
455456
for layout in disk_config.device_modifications:
456457
if boot_partition := layout.get_boot_partition():
457458
break
458-
if SysInfo.has_uefi():
459+
if self._uefi:
459460
for layout in disk_config.device_modifications:
460461
if efi_partition := layout.get_efi_partition():
461462
break
@@ -468,7 +469,7 @@ def _validate_bootloader(self) -> str | None:
468469
if boot_partition is None:
469470
return 'Boot partition not found'
470471

471-
if SysInfo.has_uefi():
472+
if self._uefi:
472473
if efi_partition is None:
473474
return 'EFI system partition (ESP) not found'
474475

@@ -480,7 +481,7 @@ def _validate_bootloader(self) -> str | None:
480481
return 'Limine does not support booting with a non-FAT boot partition'
481482

482483
elif bootloader == Bootloader.Refind:
483-
if not SysInfo.has_uefi():
484+
if not self._uefi:
484485
return 'rEFInd can only be used on UEFI systems'
485486

486487
return None
@@ -530,9 +531,9 @@ def _select_bootloader_config(
530531
preset: BootloaderConfiguration | None = None,
531532
) -> BootloaderConfiguration | None:
532533
if preset is None:
533-
preset = BootloaderConfiguration.get_default(self._skip_boot)
534+
preset = BootloaderConfiguration.get_default(self._uefi, self._skip_boot)
534535

535-
bootloader_config = BootloaderMenu(preset, self._skip_boot).run()
536+
bootloader_config = BootloaderMenu(preset, self._uefi, self._skip_boot).run()
536537

537538
return bootloader_config
538539

archinstall/lib/models/bootloader.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
from archinstall.lib.translationhandler import tr
77

8-
from ..hardware import SysInfo
98
from ..output import warn
109

1110

@@ -31,10 +30,10 @@ def json(self) -> str:
3130
return self.value
3231

3332
@classmethod
34-
def get_default(cls, skip_boot: bool = False) -> Self:
33+
def get_default(cls, uefi: bool, skip_boot: bool = False) -> Self:
3534
if skip_boot:
3635
return cls.NO_BOOTLOADER
37-
elif SysInfo.has_uefi():
36+
elif uefi:
3837
return cls.Systemd
3938
else:
4039
return cls.Grub
@@ -71,23 +70,23 @@ def parse_arg(cls, config: dict[str, Any], skip_boot: bool) -> Self:
7170
return cls(bootloader=bootloader, uki=uki, removable=removable)
7271

7372
@classmethod
74-
def get_default(cls, skip_boot: bool = False) -> Self:
75-
bootloader = Bootloader.get_default(skip_boot)
76-
removable = SysInfo.has_uefi() and bootloader.has_removable_support()
77-
uki = SysInfo.has_uefi() and bootloader.has_uki_support()
73+
def get_default(cls, uefi: bool, skip_boot: bool = False) -> Self:
74+
bootloader = Bootloader.get_default(uefi, skip_boot)
75+
removable = uefi and bootloader.has_removable_support()
76+
uki = uefi and bootloader.has_uki_support()
7877
return cls(bootloader=bootloader, uki=uki, removable=removable)
7978

80-
def preview(self) -> str:
79+
def preview(self, uefi: bool) -> str:
8180
text = f'{tr("Bootloader")}: {self.bootloader.value}'
8281
text += '\n'
83-
if SysInfo.has_uefi() and self.bootloader.has_uki_support():
82+
if uefi and self.bootloader.has_uki_support():
8483
if self.uki:
8584
uki_string = tr('Enabled')
8685
else:
8786
uki_string = tr('Disabled')
8887
text += f'UKI: {uki_string}'
8988
text += '\n'
90-
if SysInfo.has_uefi() and self.bootloader.has_removable_support():
89+
if uefi and self.bootloader.has_removable_support():
9190
if self.removable:
9291
removable_string = tr('Enabled')
9392
else:

0 commit comments

Comments
 (0)