Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/archinstall/lib
diff options
context:
space:
mode:
Diffstat (limited to 'archinstall/lib')
-rw-r--r--archinstall/lib/hardware.py12
-rw-r--r--archinstall/lib/interactions/system_conf.py7
-rw-r--r--archinstall/lib/menu/menu.py4
-rw-r--r--archinstall/lib/profile/profile_menu.py22
-rw-r--r--archinstall/lib/utils/util.py8
5 files changed, 42 insertions, 11 deletions
diff --git a/archinstall/lib/hardware.py b/archinstall/lib/hardware.py
index efdae430..c8001c19 100644
--- a/archinstall/lib/hardware.py
+++ b/archinstall/lib/hardware.py
@@ -2,12 +2,16 @@ import os
from enum import Enum
from functools import cached_property
from pathlib import Path
-from typing import Optional, Dict, List
+from typing import Optional, Dict, List, TYPE_CHECKING, Any
from .exceptions import SysCallError
from .general import SysCommand
from .networking import list_interfaces, enrich_iface_types
from .output import debug
+from .utils.util import format_cols
+
+if TYPE_CHECKING:
+ _: Any
class CpuVendor(Enum):
@@ -73,6 +77,12 @@ class GfxDriver(Enum):
case _:
return False
+ def packages_text(self) -> str:
+ text = str(_('Installed packages')) + ':\n'
+ pkg_names = [p.value for p in self.gfx_packages()]
+ text += format_cols(sorted(pkg_names))
+ return text
+
def gfx_packages(self) -> List[GfxPackage]:
packages = [GfxPackage.XorgServer, GfxPackage.XorgXinit]
diff --git a/archinstall/lib/interactions/system_conf.py b/archinstall/lib/interactions/system_conf.py
index aa72748e..35ba5a8b 100644
--- a/archinstall/lib/interactions/system_conf.py
+++ b/archinstall/lib/interactions/system_conf.py
@@ -103,14 +103,15 @@ def select_driver(options: List[GfxDriver] = [], current_value: Optional[GfxDriv
if SysInfo.has_nvidia_graphics():
title += str(_('For the best compatibility with your Nvidia hardware, you may want to use the Nvidia proprietary driver.\n'))
- title += str(_('\nSelect a graphics driver or leave blank to install all open-source drivers'))
-
preset = current_value.value if current_value else None
+
choice = Menu(
title,
drivers,
preset_values=preset,
- default_option=GfxDriver.AllOpenSource.value
+ default_option=GfxDriver.AllOpenSource.value,
+ preview_command=lambda x: GfxDriver(x).packages_text(),
+ preview_size=0.3
).run()
if choice.type_ != MenuSelectionType.Selection:
diff --git a/archinstall/lib/menu/menu.py b/archinstall/lib/menu/menu.py
index 3bd31b88..f14b855d 100644
--- a/archinstall/lib/menu/menu.py
+++ b/archinstall/lib/menu/menu.py
@@ -235,7 +235,9 @@ class Menu(TerminalMenu):
if preview_command:
if self._default_option is not None and self._default_menu_value == selection:
selection = self._default_option
- return preview_command(selection)
+
+ if res := preview_command(selection):
+ return res.rstrip('\n')
return None
diff --git a/archinstall/lib/profile/profile_menu.py b/archinstall/lib/profile/profile_menu.py
index d9e47190..aba75a88 100644
--- a/archinstall/lib/profile/profile_menu.py
+++ b/archinstall/lib/profile/profile_menu.py
@@ -40,6 +40,7 @@ class ProfileMenu(AbstractSubMenu):
lambda preset: self._select_gfx_driver(preset),
display_func=lambda x: x.value if x else None,
dependencies=['profile'],
+ preview_func=self._preview_gfx,
default=self._preset.gfx_driver if self._preset.profile and self._preset.profile.is_graphic_driver_supported() else None,
enabled=self._preset.profile.is_graphic_driver_supported() if self._preset.profile else False
)
@@ -67,6 +68,7 @@ class ProfileMenu(AbstractSubMenu):
def _select_profile(self, preset: Optional[Profile]) -> Optional[Profile]:
profile = select_profile(preset)
+
if profile is not None:
if not profile.is_graphic_driver_supported():
self._menu_options['gfx_driver'].set_enabled(False)
@@ -105,12 +107,28 @@ class ProfileMenu(AbstractSubMenu):
return driver
+ def _preview_gfx(self) -> Optional[str]:
+ driver: Optional[GfxDriver] = self._menu_options['gfx_driver'].current_selection
+
+ if driver:
+ return driver.packages_text()
+
+ return None
+
def _preview_profile(self) -> Optional[str]:
profile: Optional[Profile] = self._menu_options['profile'].current_selection
+ text = ''
if profile:
- names = profile.current_selection_names()
- return '\n'.join(names)
+ if (sub_profiles := profile.current_selection) is not None:
+ text += str(_('Selected profiles: '))
+ text += ', '.join([p.name for p in sub_profiles]) + '\n'
+
+ if packages := profile.packages_text(include_sub_packages=True):
+ text += f'{packages}'
+
+ if text:
+ return text
return None
diff --git a/archinstall/lib/utils/util.py b/archinstall/lib/utils/util.py
index 8df75ab1..2e42b3cf 100644
--- a/archinstall/lib/utils/util.py
+++ b/archinstall/lib/utils/util.py
@@ -31,18 +31,18 @@ def is_subpath(first: Path, second: Path):
return False
-def format_cols(items: List[str], header: Optional[str]) -> str:
+def format_cols(items: List[str], header: Optional[str] = None) -> str:
if header:
text = f'{header}:\n'
else:
text = ''
nr_items = len(items)
- if nr_items <= 5:
+ if nr_items <= 4:
col = 1
- elif nr_items <= 10:
+ elif nr_items <= 8:
col = 2
- elif nr_items <= 15:
+ elif nr_items <= 12:
col = 3
else:
col = 4