diff --git a/archinstall/default_profiles/desktops/hyprland.py b/archinstall/default_profiles/desktops/hyprland.py index 8e4a77d1..e20d1314 100644 --- a/archinstall/default_profiles/desktops/hyprland.py +++ b/archinstall/default_profiles/desktops/hyprland.py @@ -35,7 +35,7 @@ class HyprlandProfile(XorgProfile): "qt6-wayland", "polkit-kde-agent", "grim", - "slurp" + "slurp", ] @property diff --git a/archinstall/default_profiles/desktops/labwc.py b/archinstall/default_profiles/desktops/labwc.py new file mode 100644 index 00000000..023a55f9 --- /dev/null +++ b/archinstall/default_profiles/desktops/labwc.py @@ -0,0 +1,78 @@ +from typing import TYPE_CHECKING, override + +from archinstall.default_profiles.desktops import SeatAccess +from archinstall.default_profiles.profile import GreeterType, ProfileType, SelectResult +from archinstall.default_profiles.xorg import XorgProfile +from archinstall.tui.curses_menu import SelectMenu +from archinstall.tui.menu_item import MenuItem, MenuItemGroup +from archinstall.tui.types import Alignment, FrameProperties, ResultType + +if TYPE_CHECKING: + from collections.abc import Callable + + from archinstall.lib.translationhandler import DeferredTranslation + + _: Callable[[str], DeferredTranslation] + + +class LabwcProfile(XorgProfile): + def __init__(self) -> None: + super().__init__( + 'Labwc', + ProfileType.WindowMgr, + description='' + ) + + self.custom_settings = {'seat_access': None} + + @property + @override + def packages(self) -> list[str]: + additional = [] + if seat := self.custom_settings.get('seat_access', None): + additional = [seat] + + return [ + "alacritty", + "labwc", + ] + additional + + @property + @override + def default_greeter_type(self) -> GreeterType | None: + return GreeterType.Lightdm + + @property + @override + 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(_('labwc needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)')) + header += '\n' + str(_('Choose an option to give labwc 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().value + + @override + def do_on_select(self) -> SelectResult | None: + self._ask_seat_access() + return None diff --git a/archinstall/default_profiles/desktops/niri.py b/archinstall/default_profiles/desktops/niri.py new file mode 100644 index 00000000..c0e84c4a --- /dev/null +++ b/archinstall/default_profiles/desktops/niri.py @@ -0,0 +1,85 @@ +from typing import TYPE_CHECKING, override + +from archinstall.default_profiles.desktops import SeatAccess +from archinstall.default_profiles.profile import GreeterType, ProfileType, SelectResult +from archinstall.default_profiles.xorg import XorgProfile +from archinstall.tui.curses_menu import SelectMenu +from archinstall.tui.menu_item import MenuItem, MenuItemGroup +from archinstall.tui.types import Alignment, FrameProperties, ResultType + +if TYPE_CHECKING: + from collections.abc import Callable + + from archinstall.lib.translationhandler import DeferredTranslation + + _: Callable[[str], DeferredTranslation] + + +class NiriProfile(XorgProfile): + def __init__(self) -> None: + super().__init__( + 'Niri', + ProfileType.WindowMgr, + description='' + ) + + self.custom_settings = {'seat_access': None} + + @property + @override + def packages(self) -> list[str]: + additional = [] + if seat := self.custom_settings.get('seat_access', None): + additional = [seat] + + return [ + "alacritty", + "fuzzel", + "mako", + "xorg-xwayland", + "waybar", + "swaybg", + "swayidle", + "swaylock", + "xdg-desktop-portal-gnome" + ] + additional + + @property + @override + def default_greeter_type(self) -> GreeterType | None: + return GreeterType.Lightdm + + @property + @override + 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(_('niri needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)')) + header += '\n' + str(_('Choose an option to give niri 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().value + + @override + def do_on_select(self) -> SelectResult | None: + self._ask_seat_access() + return None diff --git a/archinstall/default_profiles/desktops/river.py b/archinstall/default_profiles/desktops/river.py new file mode 100644 index 00000000..1ab1a56e --- /dev/null +++ b/archinstall/default_profiles/desktops/river.py @@ -0,0 +1,23 @@ +from typing import override + +from archinstall.default_profiles.profile import GreeterType, ProfileType +from archinstall.default_profiles.xorg import XorgProfile + + +class RiverProfile(XorgProfile): + def __init__(self) -> None: + super().__init__('River', ProfileType.WindowMgr, description='') + + @property + @override + def packages(self) -> list[str]: + return [ + 'foot', + 'xdg-desktop-portal-wlr', + 'river' + ] + + @property + @override + def default_greeter_type(self) -> GreeterType | None: + return GreeterType.Lightdm diff --git a/archinstall/default_profiles/desktops/xmonad.py b/archinstall/default_profiles/desktops/xmonad.py new file mode 100644 index 00000000..13a98916 --- /dev/null +++ b/archinstall/default_profiles/desktops/xmonad.py @@ -0,0 +1,25 @@ +from typing import override + +from archinstall.default_profiles.profile import GreeterType, ProfileType +from archinstall.default_profiles.xorg import XorgProfile + + +class XmonadProfile(XorgProfile): + def __init__(self) -> None: + super().__init__('Xmonad', ProfileType.WindowMgr, description='') + + @property + @override + def packages(self) -> list[str]: + return [ + 'xmonad', + 'xmonad-contrib', + 'xmonad-extra', + 'xterm', + 'dmenu' + ] + + @property + @override + def default_greeter_type(self) -> GreeterType | None: + return GreeterType.Lightdm