Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/profiles/desktop.py
diff options
context:
space:
mode:
Diffstat (limited to 'profiles/desktop.py')
-rw-r--r--profiles/desktop.py50
1 files changed, 32 insertions, 18 deletions
diff --git a/profiles/desktop.py b/profiles/desktop.py
index bd3353e8..e94d3505 100644
--- a/profiles/desktop.py
+++ b/profiles/desktop.py
@@ -1,9 +1,16 @@
# A desktop environment selector.
+from typing import Any, TYPE_CHECKING
+
import archinstall
+from archinstall import log, Menu
+from archinstall.lib.menu.menu import MenuSelectionType
+
+if TYPE_CHECKING:
+ _: Any
is_top_level_profile = True
-__description__ = 'Provides a selection of desktop environments and tiling window managers, e.g. gnome, kde, sway'
+__description__ = str(_('Provides a selection of desktop environments and tiling window managers, e.g. gnome, kde, sway'))
# New way of defining packages for a profile, which is iterable and can be used out side
# of the profile to get a list of "what packages will be installed".
@@ -38,29 +45,36 @@ __supported__ = [
]
-def _prep_function(*args, **kwargs):
+def _prep_function(*args, **kwargs) -> bool:
"""
Magic function called by the importing installer
before continuing any further. It also avoids executing any
other code in this stage. So it's a safe way to ask the user
for more input before any other installer steps start.
"""
- desktop = archinstall.Menu('Select your desired desktop environment', __supported__, skip=False).run()
-
- # Temporarily store the selected desktop profile
- # in a session-safe location, since this module will get reloaded
- # the next time it gets executed.
- if not archinstall.storage.get('_desktop_profile', None):
- archinstall.storage['_desktop_profile'] = desktop
- if not archinstall.arguments.get('desktop-environment', None):
- archinstall.arguments['desktop-environment'] = desktop
- profile = archinstall.Profile(None, desktop)
- # Loading the instructions with a custom namespace, ensures that a __name__ comparison is never triggered.
- with profile.load_instructions(namespace=f"{desktop}.py") as imported:
- if hasattr(imported, '_prep_function'):
- return imported._prep_function()
- else:
- print(f"Deprecated (??): {desktop} profile has no _prep_function() anymore")
+ choice = Menu(str(_('Select your desired desktop environment')), __supported__).run()
+
+ if choice.type_ != MenuSelectionType.Selection:
+ return False
+
+ if choice.value:
+ # Temporarily store the selected desktop profile
+ # in a session-safe location, since this module will get reloaded
+ # the next time it gets executed.
+ if not archinstall.storage.get('_desktop_profile', None):
+ archinstall.storage['_desktop_profile'] = choice.value
+ if not archinstall.arguments.get('desktop-environment', None):
+ archinstall.arguments['desktop-environment'] = choice.value
+ profile = archinstall.Profile(None, choice.value)
+ # Loading the instructions with a custom namespace, ensures that a __name__ comparison is never triggered.
+ with profile.load_instructions(namespace=f"{choice.value}.py") as imported:
+ if hasattr(imported, '_prep_function'):
+ return imported._prep_function()
+ else:
+ log(f"Deprecated (??): {choice.value} profile has no _prep_function() anymore")
+ exit(1)
+
+ return False
if __name__ == 'desktop':