1- from enum import Enum
1+ from enum import StrEnum
22from typing import override
33
44from archinstall .default_profiles .profile import CustomSetting , DisplayServerType , GreeterType , Profile , ProfileType
55from archinstall .lib .menu .helpers import Selection
6+ from archinstall .lib .packages .packages import available_package , package_group_info
67from archinstall .lib .translationhandler import tr
78from archinstall .tui .ui .menu_item import MenuItem , MenuItemGroup
89from archinstall .tui .ui .result import ResultType
910
1011
11- class PlasmaFlavor (Enum ):
12- Plasma = 'plasma'
12+ class PlasmaFlavor (StrEnum ):
1313 Meta = 'plasma-meta'
14+ Plasma = 'plasma'
1415 Desktop = 'plasma-desktop'
1516
1617 def show (self ) -> str :
1718 match self :
18- case PlasmaFlavor .Plasma :
19- desc = tr ('Extensive KDE Plasma installation' )
2019 case PlasmaFlavor .Meta :
20+ return f'({ tr ("Recommended" )} ) { self .value } '
21+ case PlasmaFlavor .Plasma | PlasmaFlavor .Desktop :
22+ return self .value
23+
24+ def package_details (self ) -> str :
25+ ty = ''
26+ details = ''
27+ desc = ''
28+
29+ match self :
30+ case PlasmaFlavor .Meta :
31+ ty = tr ('Package' )
2132 desc = tr ('Curated selection of KDE Plasma packages' )
33+ info = available_package (self .value )
34+
35+ if info is not None :
36+ details = tr ('Dependencies' ) + '\n '
37+ details += '\n ' .join (f'- { entry } ' for entry in info .get_depends_on )
38+ case PlasmaFlavor .Plasma :
39+ ty = tr ('Package group' )
40+ desc = tr ('Extensive KDE Plasma installation' )
41+ group = package_group_info (self .value )
42+
43+ if group is not None :
44+ details = tr ('Packages in group' ) + '\n '
45+ details += '\n ' .join (f'- { entry } ' for entry in group .packages )
2246 case PlasmaFlavor .Desktop :
47+ ty = tr ('Package group' )
2348 desc = tr ('Minimal KDE Plasma installation' )
24- case _:
25- raise ValueError (f'Unknown Plasma flavor: { self } ' )
49+ info = available_package (self .value )
2650
27- return f'{ self .value } : { desc } '
51+ if info is not None :
52+ details = tr ('Dependencies' ) + '\n '
53+ details += '\n ' .join (f'- { entry } ' for entry in info .get_depends_on )
54+
55+ return f'{ tr ("Type" )} : { ty } \n { tr ("Description" )} : { desc } \n \n { details } '
56+
57+ def packages (self ) -> list [str ]:
58+ match self :
59+ case PlasmaFlavor .Meta :
60+ return ['plasma-meta' ]
61+ case PlasmaFlavor .Plasma :
62+ return ['plasma' ]
63+ case PlasmaFlavor .Desktop :
64+ return ['plasma-desktop' ]
2865
2966
3067class PlasmaProfile (Profile ):
@@ -39,22 +76,13 @@ def __init__(self) -> None:
3976 @property
4077 @override
4178 def packages (self ) -> list [str ]:
42- flavor_str = self .custom_settings .get (CustomSetting .PlasmaFlavor , PlasmaFlavor .Plasma .value )
43- flavor = PlasmaFlavor (flavor_str )
79+ flavor_str = self .custom_settings .get (CustomSetting .PlasmaFlavor )
4480
45- match flavor :
46- case PlasmaFlavor .Plasma :
47- return [
48- 'plasma' ,
49- ]
50- case PlasmaFlavor .Meta :
51- return [
52- 'plasma-meta' ,
53- ]
54- case PlasmaFlavor .Desktop :
55- return [
56- 'plasma-desktop' ,
57- ]
81+ if flavor_str is not None :
82+ flavor = PlasmaFlavor (flavor_str )
83+ return flavor .packages ()
84+ else :
85+ return PlasmaFlavor .Meta .packages () # use plasma-meta as the recommended default
5886
5987 @property
6088 @override
@@ -64,7 +92,14 @@ def default_greeter_type(self) -> GreeterType:
6492 async def _select_flavor (self ) -> None :
6593 header = tr ('Select a flavor of KDE Plasma to install' ) + '\n '
6694
67- items = [MenuItem (s .show (), value = s ) for s in PlasmaFlavor ]
95+ items = [
96+ MenuItem (
97+ s .show (),
98+ value = s ,
99+ preview_action = lambda x : x .value .package_details () if x .value else None ,
100+ )
101+ for s in PlasmaFlavor
102+ ]
68103 group = MenuItemGroup (items , sort_items = False )
69104
70105 default = self .custom_settings .get (CustomSetting .PlasmaFlavor , None )
@@ -74,6 +109,7 @@ async def _select_flavor(self) -> None:
74109 group ,
75110 header = header ,
76111 allow_skip = False ,
112+ preview_location = 'right' ,
77113 ).show ()
78114
79115 if result .type_ == ResultType .Selection :
0 commit comments