Skip to content

Commit

Permalink
Fix 2215 | Display installed packages for all profile submenus (#2355)
Browse files Browse the repository at this point in the history
* Display all packages to be installed

* Display all packages to be installed
  • Loading branch information
svartkanin committed Mar 7, 2024
1 parent f927fb6 commit 08a6d40
Show file tree
Hide file tree
Showing 8 changed files with 68 additions and 46 deletions.
25 changes: 0 additions & 25 deletions archinstall/default_profiles/desktops/bspwm.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,28 +25,3 @@ def packages(self) -> List[str]:
@property
def default_greeter_type(self) -> Optional[GreeterType]:
return GreeterType.Lightdm

def preview_text(self) -> Optional[str]:
text = str(_('Environment type: {}')).format(self.profile_type.value)
return text + '\n' + self.packages_text()

# The wiki specified xinit, but we already use greeter?
# https://wiki.archlinux.org/title/Bspwm#Starting
#
# # TODO: check if we selected a greeter, else run this:
# with open(f"{install_session.target}/etc/X11/xinit/xinitrc", 'r') as xinitrc:
# xinitrc_data = xinitrc.read()

# for line in xinitrc_data.split('\n'):
# if "twm &" in line:
# xinitrc_data = xinitrc_data.replace(line, f"# {line}")
# if "xclock" in line:
# xinitrc_data = xinitrc_data.replace(line, f"# {line}")
# if "xterm" in line:
# xinitrc_data = xinitrc_data.replace(line, f"# {line}")

# xinitrc_data += '\n'
# xinitrc_data += 'exec bspwn\n'

# with open(f"{install_session.target}/etc/X11/xinit/xinitrc", 'w') as xinitrc:
# xinitrc.write(xinitrc_data)
31 changes: 22 additions & 9 deletions archinstall/default_profiles/profile.py
Original file line number Diff line number Diff line change
Expand Up @@ -178,15 +178,28 @@ def is_greeter_supported(self) -> bool:

def preview_text(self) -> Optional[str]:
"""
Used for preview text in profiles_bck. If a description is set for a
profile it will automatically display that one in the preview.
If no preview or a different text should be displayed just
Override this method to provide a preview text for the profile
"""
if self.description:
return self.description
return None
return self.packages_text()

def packages_text(self) -> str:
def packages_text(self, include_sub_packages: bool = False) -> Optional[str]:
header = str(_('Installed packages'))
output = format_cols(self.packages, header)
return output

text = ''
packages = []

if self.packages:
packages = self.packages

if include_sub_packages:
for p in self.current_selection:
if p.packages:
packages += p.packages

text += format_cols(sorted(set(packages)))

if text:
text = f'{header}: \n{text}'
return text

return None
5 changes: 4 additions & 1 deletion archinstall/default_profiles/xorg.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,10 @@ def __init__(

def preview_text(self) -> Optional[str]:
text = str(_('Environment type: {}')).format(self.profile_type.value)
return text + '\n' + self.packages_text()
if packages := self.packages_text():
text += f'\n{packages}'

return text

@property
def packages(self) -> List[str]:
Expand Down
12 changes: 11 additions & 1 deletion archinstall/lib/hardware.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,16 @@
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):
Expand Down Expand Up @@ -73,6 +77,12 @@ def is_nvidia(self) -> bool:
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]

Expand Down
7 changes: 4 additions & 3 deletions archinstall/lib/interactions/system_conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
4 changes: 3 additions & 1 deletion archinstall/lib/menu/menu.py
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,9 @@ def _show_preview(self, preview_command: Optional[Callable], selection: str) ->
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

Expand Down
22 changes: 20 additions & 2 deletions archinstall/lib/profile/profile_menu.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ def setup_selection_menu_options(self):
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
)
Expand Down Expand Up @@ -67,6 +68,7 @@ def run(self, allow_reset: bool = True) -> Optional[ProfileConfiguration]:

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)
Expand Down Expand Up @@ -105,12 +107,28 @@ def _select_gfx_driver(self, preset: Optional[GfxDriver] = None) -> Optional[Gfx

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

Expand Down
8 changes: 4 additions & 4 deletions archinstall/lib/utils/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 08a6d40

Please sign in to comment.