archinstall/archinstall/default_profiles/desktops/hyprland.py

79 lines
2.0 KiB
Python

from enum import Enum
from typing import TYPE_CHECKING, Any
from archinstall.default_profiles.profile import GreeterType, ProfileType, SelectResult
from archinstall.default_profiles.xorg import XorgProfile
from archinstall.tui import Alignment, FrameProperties, MenuItem, MenuItemGroup, ResultType, SelectMenu
if TYPE_CHECKING:
from archinstall.lib.installer import Installer
_: Any
class SeatAccess(Enum):
seatd = 'seatd'
polkit = 'polkit'
class HyprlandProfile(XorgProfile):
def __init__(self) -> None:
super().__init__('Hyprland', ProfileType.DesktopEnv, description='')
self.custom_settings = {'seat_access': None}
@property
def packages(self) -> list[str]:
return [
"hyprland",
"dunst",
"kitty",
"dolphin",
"wofi",
"xdg-desktop-portal-hyprland",
"qt5-wayland",
"qt6-wayland",
"polkit-kde-agent",
"grim",
"slurp"
]
@property
def default_greeter_type(self) -> GreeterType | None:
return GreeterType.Sddm
@property
def services(self) -> list[str]:
if pref := self.custom_settings.get('seat_access', None):
return [pref]
return []
def _ask_seat_access(self) -> None:
# need to activate seat service and add to seat group
header = str(_('Sway needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)'))
header += '\n' + str(_('Choose an option to give Sway access to your hardware')) + '\n'
items = [MenuItem(s.value, value=s) for s in SeatAccess]
group = MenuItemGroup(items, sort_items=True)
default = self.custom_settings.get('seat_access', None)
group.set_default_by_value(default)
result = SelectMenu(
group,
header=header,
allow_skip=False,
frame=FrameProperties.min(str(_('Seat access'))),
alignment=Alignment.CENTER
).run()
if result.type_ == ResultType.Selection:
if result.item() is not None:
self.custom_settings['seat_access'] = result.get_value()
def do_on_select(self) -> SelectResult | None:
self._ask_seat_access()
return None
def install(self, install_session: 'Installer') -> None:
super().install(install_session)