From 603a772024c74d6971572c6859ca3541a0bcca10 Mon Sep 17 00:00:00 2001 From: h8d13 Date: Thu, 1 Jan 2026 10:58:02 +0100 Subject: [PATCH 01/31] Fix x11 vs wayland --- .../default_profiles/desktops/cosmic.py | 6 +++- .../default_profiles/desktops/gnome.py | 6 +++- .../default_profiles/desktops/hyprland.py | 6 +++- .../default_profiles/desktops/labwc.py | 6 +++- archinstall/default_profiles/desktops/niri.py | 6 +++- .../default_profiles/desktops/plasma.py | 6 +++- .../default_profiles/desktops/river.py | 6 +++- archinstall/default_profiles/desktops/sway.py | 6 +++- archinstall/default_profiles/profile.py | 20 +++++++++++++ archinstall/default_profiles/xorg.py | 6 +++- archinstall/lib/hardware.py | 24 ++++++++++++--- archinstall/lib/interactions/system_conf.py | 11 +++++-- archinstall/lib/profile/profile_menu.py | 29 ++++--------------- archinstall/lib/profile/profiles_handler.py | 8 +++-- 14 files changed, 104 insertions(+), 42 deletions(-) diff --git a/archinstall/default_profiles/desktops/cosmic.py b/archinstall/default_profiles/desktops/cosmic.py index 96742de6f6..c98397ec4f 100644 --- a/archinstall/default_profiles/desktops/cosmic.py +++ b/archinstall/default_profiles/desktops/cosmic.py @@ -1,6 +1,6 @@ from typing import override -from archinstall.default_profiles.profile import GreeterType, ProfileType +from archinstall.default_profiles.profile import DisplayServer, GreeterType, ProfileType from archinstall.default_profiles.xorg import XorgProfile @@ -20,3 +20,7 @@ def packages(self) -> list[str]: @override def default_greeter_type(self) -> GreeterType: return GreeterType.CosmicSession + + @override + def display_servers(self) -> set[DisplayServer]: + return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/gnome.py b/archinstall/default_profiles/desktops/gnome.py index 58936434b1..62c9e385bc 100644 --- a/archinstall/default_profiles/desktops/gnome.py +++ b/archinstall/default_profiles/desktops/gnome.py @@ -1,6 +1,6 @@ from typing import override -from archinstall.default_profiles.profile import GreeterType, ProfileType +from archinstall.default_profiles.profile import DisplayServer, GreeterType, ProfileType from archinstall.default_profiles.xorg import XorgProfile @@ -20,3 +20,7 @@ def packages(self) -> list[str]: @override def default_greeter_type(self) -> GreeterType: return GreeterType.Gdm + + @override + def display_servers(self) -> set[DisplayServer]: + return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/hyprland.py b/archinstall/default_profiles/desktops/hyprland.py index 82aa4f6d7b..3b089eabd7 100644 --- a/archinstall/default_profiles/desktops/hyprland.py +++ b/archinstall/default_profiles/desktops/hyprland.py @@ -1,7 +1,7 @@ from typing import override from archinstall.default_profiles.desktops import SeatAccess -from archinstall.default_profiles.profile import GreeterType, ProfileType +from archinstall.default_profiles.profile import DisplayServer, GreeterType, ProfileType from archinstall.default_profiles.xorg import XorgProfile from archinstall.lib.translationhandler import tr from archinstall.tui.curses_menu import SelectMenu @@ -72,3 +72,7 @@ def _ask_seat_access(self) -> None: def do_on_select(self) -> None: self._ask_seat_access() return None + + @override + def display_servers(self) -> set[DisplayServer]: + return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/labwc.py b/archinstall/default_profiles/desktops/labwc.py index 98f93b04cf..b04ba42a96 100644 --- a/archinstall/default_profiles/desktops/labwc.py +++ b/archinstall/default_profiles/desktops/labwc.py @@ -1,7 +1,7 @@ from typing import override from archinstall.default_profiles.desktops import SeatAccess -from archinstall.default_profiles.profile import GreeterType, ProfileType +from archinstall.default_profiles.profile import DisplayServer, GreeterType, ProfileType from archinstall.default_profiles.xorg import XorgProfile from archinstall.lib.translationhandler import tr from archinstall.tui.curses_menu import SelectMenu @@ -69,3 +69,7 @@ def _ask_seat_access(self) -> None: def do_on_select(self) -> None: self._ask_seat_access() return None + + @override + def display_servers(self) -> set[DisplayServer]: + return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/niri.py b/archinstall/default_profiles/desktops/niri.py index ff4edf9945..6ce2c57611 100644 --- a/archinstall/default_profiles/desktops/niri.py +++ b/archinstall/default_profiles/desktops/niri.py @@ -1,7 +1,7 @@ from typing import override from archinstall.default_profiles.desktops import SeatAccess -from archinstall.default_profiles.profile import GreeterType, ProfileType +from archinstall.default_profiles.profile import DisplayServer, GreeterType, ProfileType from archinstall.default_profiles.xorg import XorgProfile from archinstall.lib.translationhandler import tr from archinstall.tui.curses_menu import SelectMenu @@ -77,3 +77,7 @@ def _ask_seat_access(self) -> None: def do_on_select(self) -> None: self._ask_seat_access() return None + + @override + def display_servers(self) -> set[DisplayServer]: + return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/plasma.py b/archinstall/default_profiles/desktops/plasma.py index 8f5836e234..0c3aa34f3e 100644 --- a/archinstall/default_profiles/desktops/plasma.py +++ b/archinstall/default_profiles/desktops/plasma.py @@ -1,6 +1,6 @@ from typing import override -from archinstall.default_profiles.profile import GreeterType, ProfileType +from archinstall.default_profiles.profile import DisplayServer, GreeterType, ProfileType from archinstall.default_profiles.xorg import XorgProfile @@ -24,3 +24,7 @@ def packages(self) -> list[str]: @override def default_greeter_type(self) -> GreeterType: return GreeterType.Sddm + + @override + def display_servers(self) -> set[DisplayServer]: + return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/river.py b/archinstall/default_profiles/desktops/river.py index 8e1396bb41..a4d63731bf 100644 --- a/archinstall/default_profiles/desktops/river.py +++ b/archinstall/default_profiles/desktops/river.py @@ -1,6 +1,6 @@ from typing import override -from archinstall.default_profiles.profile import GreeterType, ProfileType +from archinstall.default_profiles.profile import DisplayServer, GreeterType, ProfileType from archinstall.default_profiles.xorg import XorgProfile @@ -21,3 +21,7 @@ def packages(self) -> list[str]: @override def default_greeter_type(self) -> GreeterType: return GreeterType.Lightdm + + @override + def display_servers(self) -> set[DisplayServer]: + return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/sway.py b/archinstall/default_profiles/desktops/sway.py index d01611b0e2..29f171154a 100644 --- a/archinstall/default_profiles/desktops/sway.py +++ b/archinstall/default_profiles/desktops/sway.py @@ -1,7 +1,7 @@ from typing import override from archinstall.default_profiles.desktops import SeatAccess -from archinstall.default_profiles.profile import GreeterType, ProfileType +from archinstall.default_profiles.profile import DisplayServer, GreeterType, ProfileType from archinstall.default_profiles.xorg import XorgProfile from archinstall.lib.translationhandler import tr from archinstall.tui.curses_menu import SelectMenu @@ -79,3 +79,7 @@ def _ask_seat_access(self) -> None: def do_on_select(self) -> None: self._ask_seat_access() return None + + @override + def display_servers(self) -> set[DisplayServer]: + return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/profile.py b/archinstall/default_profiles/profile.py index 8f63df66f9..e727f8c27f 100644 --- a/archinstall/default_profiles/profile.py +++ b/archinstall/default_profiles/profile.py @@ -26,6 +26,12 @@ class ProfileType(Enum): Application = 'Application' +class DisplayServer(Enum): + X11 = 'x11' + Wayland = 'wayland' + Both = 'both' + + class GreeterType(Enum): Lightdm = 'lightdm-gtk-greeter' LightdmSlick = 'lightdm-slick-greeter' @@ -175,6 +181,20 @@ def is_graphic_driver_supported(self) -> bool: def is_greeter_supported(self) -> bool: return self._support_greeter + def display_servers(self) -> set[DisplayServer]: + """ + Returns the set of display servers required by this profile. + By default, returns an empty set (no specific requirements). + Profiles should override this to specify their requirements. + """ + if self.current_selection: + # Aggregate requirements from sub-profiles + servers = set() + for profile in self.current_selection: + servers.update(profile.display_servers()) + return servers + return set() + def preview_text(self) -> str: """ Override this method to provide a preview text for the profile diff --git a/archinstall/default_profiles/xorg.py b/archinstall/default_profiles/xorg.py index 71b9bf6b6e..ae56ae9d48 100644 --- a/archinstall/default_profiles/xorg.py +++ b/archinstall/default_profiles/xorg.py @@ -1,6 +1,6 @@ from typing import override -from archinstall.default_profiles.profile import Profile, ProfileType +from archinstall.default_profiles.profile import DisplayServer, Profile, ProfileType from archinstall.lib.translationhandler import tr @@ -32,3 +32,7 @@ def packages(self) -> list[str]: return [ 'xorg-server', ] + + @override + def display_servers(self) -> set[DisplayServer]: + return {DisplayServer.X11} diff --git a/archinstall/lib/hardware.py b/archinstall/lib/hardware.py index aa5781f951..5c44d6393d 100644 --- a/archinstall/lib/hardware.py +++ b/archinstall/lib/hardware.py @@ -2,6 +2,7 @@ from enum import Enum from functools import cached_property from pathlib import Path +from typing import TYPE_CHECKING from .exceptions import SysCallError from .general import SysCommand @@ -9,6 +10,9 @@ from .output import debug from .translationhandler import tr +if TYPE_CHECKING: + from archinstall.default_profiles.profile import DisplayServer + class CpuVendor(Enum): AuthenticAMD = 'amd' @@ -71,8 +75,8 @@ def is_nvidia(self) -> bool: case _: return False - def packages_text(self) -> str: - pkg_names = [p.value for p in self.gfx_packages()] + def packages_text(self, servers: set['DisplayServer'] | None = None) -> str: + pkg_names = [p.value for p in self.gfx_packages(servers)] text = tr('Installed packages') + ':\n' for p in sorted(pkg_names): @@ -80,8 +84,20 @@ def packages_text(self) -> str: return text - def gfx_packages(self) -> list[GfxPackage]: - packages = [GfxPackage.XorgServer, GfxPackage.XorgXinit] + def gfx_packages(self, servers: set['DisplayServer'] | None = None) -> list[GfxPackage]: + from archinstall.default_profiles.profile import DisplayServer + + packages = [] + + # Only add X11 packages if X11 or Both display servers are required + if servers is None: + # Default behavior when no profile is passed: include X11 for bw-compat + packages = [GfxPackage.XorgServer, GfxPackage.XorgXinit] + elif servers: + # Profile provided display server requirements - respect them + if DisplayServer.X11 in servers or DisplayServer.Both in servers: + packages = [GfxPackage.XorgServer, GfxPackage.XorgXinit] + # else: servers is empty set handled by profile itself match self: case GfxDriver.AllOpenSource: diff --git a/archinstall/lib/interactions/system_conf.py b/archinstall/lib/interactions/system_conf.py index 534e1a7d81..f50d60d8de 100644 --- a/archinstall/lib/interactions/system_conf.py +++ b/archinstall/lib/interactions/system_conf.py @@ -1,5 +1,7 @@ from __future__ import annotations +from typing import TYPE_CHECKING + from archinstall.lib.models.application import ZramAlgorithm, ZramConfiguration from archinstall.lib.translationhandler import tr from archinstall.tui.curses_menu import SelectMenu @@ -9,6 +11,9 @@ from ..hardware import GfxDriver, SysInfo +if TYPE_CHECKING: + from archinstall.default_profiles.profile import Profile + def select_kernel(preset: list[str] = []) -> list[str]: """ @@ -45,7 +50,7 @@ def select_kernel(preset: list[str] = []) -> list[str]: return result.get_values() -def select_driver(options: list[GfxDriver] = [], preset: GfxDriver | None = None) -> GfxDriver | None: +def select_driver(options: list[GfxDriver] = [], preset: GfxDriver | None = None, profile: 'Profile | None' = None) -> GfxDriver | None: """ Somewhat convoluted function, whose job is simple. Select a graphics driver from a pre-defined set of popular options. @@ -56,7 +61,9 @@ def select_driver(options: list[GfxDriver] = [], preset: GfxDriver | None = None if not options: options = [driver for driver in GfxDriver] - items = [MenuItem(o.value, value=o, preview_action=lambda x: x.value.packages_text()) for o in options] + # Get display server requirements from profile if available + servers = profile.display_servers() if profile else None + items = [MenuItem(o.value, value=o, preview_action=lambda x: x.value.packages_text(servers)) for o in options] group = MenuItemGroup(items, sort_items=True) group.set_default_by_value(GfxDriver.AllOpenSource) diff --git a/archinstall/lib/profile/profile_menu.py b/archinstall/lib/profile/profile_menu.py index d434fc2fb3..a1a57d80d6 100644 --- a/archinstall/lib/profile/profile_menu.py +++ b/archinstall/lib/profile/profile_menu.py @@ -7,7 +7,7 @@ from archinstall.tui.curses_menu import SelectMenu from archinstall.tui.menu_item import MenuItem, MenuItemGroup from archinstall.tui.result import ResultType -from archinstall.tui.types import Alignment, FrameProperties, Orientation +from archinstall.tui.types import Alignment, FrameProperties from ..hardware import GfxDriver from ..interactions.system_conf import select_driver @@ -97,35 +97,16 @@ def _select_gfx_driver(self, preset: GfxDriver | None = None) -> GfxDriver | Non if profile: if profile.is_graphic_driver_supported(): - driver = select_driver(preset=preset) - - if driver and 'Sway' in profile.current_selection_names(): - if driver.is_nvidia(): - header = tr('The proprietary Nvidia driver is not supported by Sway.') + '\n' - header += tr('It is likely that you will run into issues, are you okay with that?') + '\n' - - group = MenuItemGroup.yes_no() - group.focus_item = MenuItem.no() - group.default_item = MenuItem.no() - - result = SelectMenu[bool]( - group, - header=header, - allow_skip=False, - columns=2, - orientation=Orientation.HORIZONTAL, - alignment=Alignment.CENTER, - ).run() - - if result.item() == MenuItem.no(): - return preset + driver = select_driver(preset=preset, profile=profile) return driver def _prev_gfx(self, item: MenuItem) -> str | None: if item.value: driver = item.get_value().value - packages = item.get_value().packages_text() + profile: Profile | None = self._item_group.find_by_key('profile').value + servers = profile.display_servers() if profile else None + packages = item.get_value().packages_text(servers) return f'Driver: {driver}\n{packages}' return None diff --git a/archinstall/lib/profile/profiles_handler.py b/archinstall/lib/profile/profiles_handler.py index 96ce476aba..53697d3f93 100644 --- a/archinstall/lib/profile/profiles_handler.py +++ b/archinstall/lib/profile/profiles_handler.py @@ -226,7 +226,7 @@ def install_greeter(self, install_session: 'Installer', greeter: GreeterType) -> with open(path, 'w') as file: file.write(filedata) - def install_gfx_driver(self, install_session: 'Installer', driver: GfxDriver) -> None: + def install_gfx_driver(self, install_session: 'Installer', driver: GfxDriver, profile: Profile | None = None) -> None: debug(f'Installing GFX driver: {driver.value}') if driver in [GfxDriver.NvidiaOpenKernel, GfxDriver.NvidiaProprietary]: @@ -234,7 +234,9 @@ def install_gfx_driver(self, install_session: 'Installer', driver: GfxDriver) -> # Fixes https://github.com/archlinux/archinstall/issues/585 install_session.add_additional_packages(headers) - driver_pkgs = driver.gfx_packages() + # Determine display server requirements from profile + display_servers = profile.display_servers() if profile else None + driver_pkgs = driver.gfx_packages(display_servers) pkg_names = [p.value for p in driver_pkgs] install_session.add_additional_packages(pkg_names) @@ -247,7 +249,7 @@ def install_profile_config(self, install_session: 'Installer', profile_config: P profile.install(install_session) if profile_config.gfx_driver and (profile.is_xorg_type_profile() or profile.is_desktop_profile()): - self.install_gfx_driver(install_session, profile_config.gfx_driver) + self.install_gfx_driver(install_session, profile_config.gfx_driver, profile) if profile_config.greeter: self.install_greeter(install_session, profile_config.greeter) From cb9dbbcddf094c919b81728538ea03be5b27d891 Mon Sep 17 00:00:00 2001 From: h8d13 Date: Thu, 1 Jan 2026 13:15:14 +0100 Subject: [PATCH 02/31] Issue #3005 and x11 related changes --- archinstall/default_profiles/profile.py | 1 - archinstall/lib/hardware.py | 10 +++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/archinstall/default_profiles/profile.py b/archinstall/default_profiles/profile.py index e727f8c27f..0b410b3fcb 100644 --- a/archinstall/default_profiles/profile.py +++ b/archinstall/default_profiles/profile.py @@ -29,7 +29,6 @@ class ProfileType(Enum): class DisplayServer(Enum): X11 = 'x11' Wayland = 'wayland' - Both = 'both' class GreeterType(Enum): diff --git a/archinstall/lib/hardware.py b/archinstall/lib/hardware.py index 5c44d6393d..8d7071a159 100644 --- a/archinstall/lib/hardware.py +++ b/archinstall/lib/hardware.py @@ -86,16 +86,16 @@ def packages_text(self, servers: set['DisplayServer'] | None = None) -> str: def gfx_packages(self, servers: set['DisplayServer'] | None = None) -> list[GfxPackage]: from archinstall.default_profiles.profile import DisplayServer - + # empty list packages = [] - # Only add X11 packages if X11 or Both display servers are required + # Only add X11 packages if required by said profile if servers is None: # Default behavior when no profile is passed: include X11 for bw-compat packages = [GfxPackage.XorgServer, GfxPackage.XorgXinit] elif servers: # Profile provided display server requirements - respect them - if DisplayServer.X11 in servers or DisplayServer.Both in servers: + if DisplayServer.X11 in servers: packages = [GfxPackage.XorgServer, GfxPackage.XorgXinit] # else: servers is empty set handled by profile itself @@ -124,8 +124,8 @@ def gfx_packages(self, servers: set['DisplayServer'] | None = None) -> list[GfxP case GfxDriver.IntelOpenSource: packages += [ GfxPackage.Mesa, - GfxPackage.LibvaIntelDriver, - GfxPackage.IntelMediaDriver, + #GfxPackage.LibvaIntelDriver, #ISSUE#3005 (legacy) + GfxPackage.IntelMediaDriver, GfxPackage.VulkanIntel, ] case GfxDriver.NvidiaOpenKernel: From e27370a113522217b98810a4b5475a46ec5ebe2f Mon Sep 17 00:00:00 2001 From: h8d13 Date: Thu, 1 Jan 2026 13:18:33 +0100 Subject: [PATCH 03/31] ws --- archinstall/lib/hardware.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/archinstall/lib/hardware.py b/archinstall/lib/hardware.py index 8d7071a159..14ca5659d2 100644 --- a/archinstall/lib/hardware.py +++ b/archinstall/lib/hardware.py @@ -125,7 +125,7 @@ def gfx_packages(self, servers: set['DisplayServer'] | None = None) -> list[GfxP packages += [ GfxPackage.Mesa, #GfxPackage.LibvaIntelDriver, #ISSUE#3005 (legacy) - GfxPackage.IntelMediaDriver, + GfxPackage.IntelMediaDriver, GfxPackage.VulkanIntel, ] case GfxDriver.NvidiaOpenKernel: From fb43ca470fe0b1bb57a79f87366d1a2eff0af55b Mon Sep 17 00:00:00 2001 From: h8d13 Date: Thu, 1 Jan 2026 13:19:45 +0100 Subject: [PATCH 04/31] Flake check --- archinstall/lib/hardware.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/archinstall/lib/hardware.py b/archinstall/lib/hardware.py index 14ca5659d2..ed554adab2 100644 --- a/archinstall/lib/hardware.py +++ b/archinstall/lib/hardware.py @@ -124,7 +124,7 @@ def gfx_packages(self, servers: set['DisplayServer'] | None = None) -> list[GfxP case GfxDriver.IntelOpenSource: packages += [ GfxPackage.Mesa, - #GfxPackage.LibvaIntelDriver, #ISSUE#3005 (legacy) + # GfxPackage.LibvaIntelDriver, #ISSUE#3005 (legacy) GfxPackage.IntelMediaDriver, GfxPackage.VulkanIntel, ] From 20ff03419e690eb20cbe03272bd08fd58c4207d2 Mon Sep 17 00:00:00 2001 From: h8d13 Date: Thu, 1 Jan 2026 14:03:36 +0100 Subject: [PATCH 05/31] Add VM drivers and let ICD loader decide. Notably fixes Adw/Gtk apps in VMs --- archinstall/lib/hardware.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/archinstall/lib/hardware.py b/archinstall/lib/hardware.py index ed554adab2..c89d830fa1 100644 --- a/archinstall/lib/hardware.py +++ b/archinstall/lib/hardware.py @@ -52,6 +52,8 @@ class GfxPackage(Enum): VulkanIntel = 'vulkan-intel' VulkanRadeon = 'vulkan-radeon' VulkanNouveau = 'vulkan-nouveau' + VulkanSwrast = 'vulkan-swrast' + VulkanVirtio = 'vulkan-virtio' Xf86VideoAmdgpu = 'xf86-video-amdgpu' Xf86VideoAti = 'xf86-video-ati' Xf86VideoNouveau = 'xf86-video-nouveau' @@ -150,6 +152,8 @@ def gfx_packages(self, servers: set['DisplayServer'] | None = None) -> list[GfxP case GfxDriver.VMOpenSource: packages += [ GfxPackage.Mesa, + GfxPackage.VulkanSwrast, + GfxPackage.VulkanVirtio, ] return packages From ed99d8d587cfca10ba719c6f807afd2d32408b1a Mon Sep 17 00:00:00 2001 From: h8d13 Date: Thu, 1 Jan 2026 14:17:33 +0100 Subject: [PATCH 06/31] icd-loader instead of hardcoding arbitrary pkgs --- archinstall/lib/hardware.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/archinstall/lib/hardware.py b/archinstall/lib/hardware.py index c89d830fa1..34453a3bd8 100644 --- a/archinstall/lib/hardware.py +++ b/archinstall/lib/hardware.py @@ -52,8 +52,7 @@ class GfxPackage(Enum): VulkanIntel = 'vulkan-intel' VulkanRadeon = 'vulkan-radeon' VulkanNouveau = 'vulkan-nouveau' - VulkanSwrast = 'vulkan-swrast' - VulkanVirtio = 'vulkan-virtio' + VulkanIcdLoader = 'vulkan-icd-loader' Xf86VideoAmdgpu = 'xf86-video-amdgpu' Xf86VideoAti = 'xf86-video-ati' Xf86VideoNouveau = 'xf86-video-nouveau' @@ -152,8 +151,7 @@ def gfx_packages(self, servers: set['DisplayServer'] | None = None) -> list[GfxP case GfxDriver.VMOpenSource: packages += [ GfxPackage.Mesa, - GfxPackage.VulkanSwrast, - GfxPackage.VulkanVirtio, + GfxPackage.VulkanIcdLoader, ] return packages From 198f48aab6699dc6ea3dbac687dd567bd17111d4 Mon Sep 17 00:00:00 2001 From: h8d13 Date: Thu, 1 Jan 2026 14:20:32 +0100 Subject: [PATCH 07/31] Add video accel to VM category --- archinstall/lib/hardware.py | 1 + 1 file changed, 1 insertion(+) diff --git a/archinstall/lib/hardware.py b/archinstall/lib/hardware.py index 34453a3bd8..6615701302 100644 --- a/archinstall/lib/hardware.py +++ b/archinstall/lib/hardware.py @@ -152,6 +152,7 @@ def gfx_packages(self, servers: set['DisplayServer'] | None = None) -> list[GfxP packages += [ GfxPackage.Mesa, GfxPackage.VulkanIcdLoader, + GfxPackage.LibvaMesaDriver, ] return packages From 93f3e701f8ed3febcc0ac449ea82fca0781389b6 Mon Sep 17 00:00:00 2001 From: h8d13 Date: Thu, 1 Jan 2026 22:53:07 +0100 Subject: [PATCH 08/31] n ws --- archinstall/lib/hardware.py | 1 + 1 file changed, 1 insertion(+) diff --git a/archinstall/lib/hardware.py b/archinstall/lib/hardware.py index 6615701302..3069229e03 100644 --- a/archinstall/lib/hardware.py +++ b/archinstall/lib/hardware.py @@ -87,6 +87,7 @@ def packages_text(self, servers: set['DisplayServer'] | None = None) -> str: def gfx_packages(self, servers: set['DisplayServer'] | None = None) -> list[GfxPackage]: from archinstall.default_profiles.profile import DisplayServer + # empty list packages = [] From 75d2f62c868ca98d214885ba67081fc2784c8160 Mon Sep 17 00:00:00 2001 From: h8d13 Date: Thu, 1 Jan 2026 22:54:28 +0100 Subject: [PATCH 09/31] bl --- archinstall/lib/hardware.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/archinstall/lib/hardware.py b/archinstall/lib/hardware.py index 3069229e03..295a5ad685 100644 --- a/archinstall/lib/hardware.py +++ b/archinstall/lib/hardware.py @@ -87,7 +87,7 @@ def packages_text(self, servers: set['DisplayServer'] | None = None) -> str: def gfx_packages(self, servers: set['DisplayServer'] | None = None) -> list[GfxPackage]: from archinstall.default_profiles.profile import DisplayServer - + # empty list packages = [] From 84ae1cbb6271d20b38dad1c61de3a6c8f3f0e8ac Mon Sep 17 00:00:00 2001 From: h8d13 Date: Fri, 2 Jan 2026 10:38:04 +0100 Subject: [PATCH 10/31] remove unused logic for sway + nvidia --- archinstall/default_profiles/profile.py | 7 ------- archinstall/lib/profile/profile_menu.py | 17 ++++++----------- 2 files changed, 6 insertions(+), 18 deletions(-) diff --git a/archinstall/default_profiles/profile.py b/archinstall/default_profiles/profile.py index 0b410b3fcb..17ac6e02f1 100644 --- a/archinstall/default_profiles/profile.py +++ b/archinstall/default_profiles/profile.py @@ -169,13 +169,6 @@ def is_tailored(self) -> bool: def is_custom_type_profile(self) -> bool: return self.profile_type == ProfileType.CustomType - def is_graphic_driver_supported(self) -> bool: - if not self.current_selection: - return self._support_gfx_driver - else: - if any([p._support_gfx_driver for p in self.current_selection]): - return True - return False def is_greeter_supported(self) -> bool: return self._support_greeter diff --git a/archinstall/lib/profile/profile_menu.py b/archinstall/lib/profile/profile_menu.py index a1a57d80d6..3128c606c4 100644 --- a/archinstall/lib/profile/profile_menu.py +++ b/archinstall/lib/profile/profile_menu.py @@ -46,9 +46,9 @@ def _define_menu_options(self) -> list[MenuItem]: MenuItem( text=tr('Graphics driver'), action=self._select_gfx_driver, - value=self._profile_config.gfx_driver if self._profile_config.profile and self._profile_config.profile.is_graphic_driver_supported() else None, + value=self._profile_config.gfx_driver if self._profile_config.profile else None, preview_action=self._prev_gfx, - enabled=self._profile_config.profile.is_graphic_driver_supported() if self._profile_config.profile else False, + enabled=self._profile_config.profile is not None, dependencies=['profile'], key='gfx_driver', ), @@ -56,7 +56,7 @@ def _define_menu_options(self) -> list[MenuItem]: text=tr('Greeter'), action=lambda x: select_greeter(preset=x), value=self._profile_config.greeter if self._profile_config.profile and self._profile_config.profile.is_greeter_supported() else None, - enabled=self._profile_config.profile.is_graphic_driver_supported() if self._profile_config.profile else False, + enabled=self._profile_config.profile is not None, preview_action=self._prev_greeter, dependencies=['profile'], key='greeter', @@ -72,12 +72,8 @@ def _select_profile(self, preset: Profile | None) -> Profile | None: profile = select_profile(preset) if profile is not None: - if not profile.is_graphic_driver_supported(): - self._item_group.find_by_key('gfx_driver').enabled = False - self._item_group.find_by_key('gfx_driver').value = None - else: - self._item_group.find_by_key('gfx_driver').enabled = True - self._item_group.find_by_key('gfx_driver').value = GfxDriver.AllOpenSource + self._item_group.find_by_key('gfx_driver').enabled = True + self._item_group.find_by_key('gfx_driver').value = GfxDriver.AllOpenSource if not profile.is_greeter_supported(): self._item_group.find_by_key('greeter').enabled = False @@ -96,8 +92,7 @@ def _select_gfx_driver(self, preset: GfxDriver | None = None) -> GfxDriver | Non profile: Profile | None = self._item_group.find_by_key('profile').value if profile: - if profile.is_graphic_driver_supported(): - driver = select_driver(preset=preset, profile=profile) + driver = select_driver(preset=preset, profile=profile) return driver From 7f58fcf789c135605cb54aa0777f493c343b6c77 Mon Sep 17 00:00:00 2001 From: h8d13 Date: Fri, 2 Jan 2026 10:41:17 +0100 Subject: [PATCH 11/31] Remove more un-used --- archinstall/default_profiles/profile.py | 1 - 1 file changed, 1 deletion(-) diff --git a/archinstall/default_profiles/profile.py b/archinstall/default_profiles/profile.py index 17ac6e02f1..8525e033a7 100644 --- a/archinstall/default_profiles/profile.py +++ b/archinstall/default_profiles/profile.py @@ -169,7 +169,6 @@ def is_tailored(self) -> bool: def is_custom_type_profile(self) -> bool: return self.profile_type == ProfileType.CustomType - def is_greeter_supported(self) -> bool: return self._support_greeter From 112c0826deebcc083a2dca03e84b3234d4619d56 Mon Sep 17 00:00:00 2001 From: h8d13 Date: Fri, 2 Jan 2026 10:52:43 +0100 Subject: [PATCH 12/31] Final reverts, remove is_supported completly --- archinstall/default_profiles/custom.py | 1 - archinstall/default_profiles/xorg.py | 1 - archinstall/lib/profile/profile_menu.py | 12 ++++++++---- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/archinstall/default_profiles/custom.py b/archinstall/default_profiles/custom.py index 9650a4cb75..f54e441590 100644 --- a/archinstall/default_profiles/custom.py +++ b/archinstall/default_profiles/custom.py @@ -203,7 +203,6 @@ # ProfileType.CustomType, # packages=packages, # services=services, -# support_gfx_driver=True # ) # # self.custom_enabled = enabled diff --git a/archinstall/default_profiles/xorg.py b/archinstall/default_profiles/xorg.py index ae56ae9d48..bb731d2654 100644 --- a/archinstall/default_profiles/xorg.py +++ b/archinstall/default_profiles/xorg.py @@ -14,7 +14,6 @@ def __init__( super().__init__( name, profile_type, - support_gfx_driver=True, advanced=advanced, ) diff --git a/archinstall/lib/profile/profile_menu.py b/archinstall/lib/profile/profile_menu.py index 3128c606c4..674697bd27 100644 --- a/archinstall/lib/profile/profile_menu.py +++ b/archinstall/lib/profile/profile_menu.py @@ -48,7 +48,7 @@ def _define_menu_options(self) -> list[MenuItem]: action=self._select_gfx_driver, value=self._profile_config.gfx_driver if self._profile_config.profile else None, preview_action=self._prev_gfx, - enabled=self._profile_config.profile is not None, + enabled=bool(self._profile_config.profile and self._profile_config.profile.display_servers()), dependencies=['profile'], key='gfx_driver', ), @@ -56,7 +56,7 @@ def _define_menu_options(self) -> list[MenuItem]: text=tr('Greeter'), action=lambda x: select_greeter(preset=x), value=self._profile_config.greeter if self._profile_config.profile and self._profile_config.profile.is_greeter_supported() else None, - enabled=self._profile_config.profile is not None, + enabled=bool(self._profile_config.profile and self._profile_config.profile.is_greeter_supported()), preview_action=self._prev_greeter, dependencies=['profile'], key='greeter', @@ -72,8 +72,12 @@ def _select_profile(self, preset: Profile | None) -> Profile | None: profile = select_profile(preset) if profile is not None: - self._item_group.find_by_key('gfx_driver').enabled = True - self._item_group.find_by_key('gfx_driver').value = GfxDriver.AllOpenSource + if profile.display_servers(): + self._item_group.find_by_key('gfx_driver').enabled = True + self._item_group.find_by_key('gfx_driver').value = GfxDriver.AllOpenSource + else: + self._item_group.find_by_key('gfx_driver').enabled = False + self._item_group.find_by_key('gfx_driver').value = None if not profile.is_greeter_supported(): self._item_group.find_by_key('greeter').enabled = False From 207a23d1e63e3f98807a079749ecefa6d486b96b Mon Sep 17 00:00:00 2001 From: h8d13 Date: Sun, 4 Jan 2026 10:31:34 +0100 Subject: [PATCH 13/31] Address all svart feedback (thanks) --- archinstall/default_profiles/custom.py | 217 +----------------- .../default_profiles/desktops/cosmic.py | 2 +- .../default_profiles/desktops/gnome.py | 2 +- .../default_profiles/desktops/hyprland.py | 2 +- .../default_profiles/desktops/labwc.py | 2 +- archinstall/default_profiles/desktops/niri.py | 2 +- .../default_profiles/desktops/plasma.py | 2 +- .../default_profiles/desktops/river.py | 2 +- archinstall/default_profiles/desktops/sway.py | 2 +- archinstall/default_profiles/profile.py | 2 +- archinstall/default_profiles/xorg.py | 2 +- archinstall/lib/hardware.py | 19 +- archinstall/lib/interactions/system_conf.py | 9 +- 13 files changed, 18 insertions(+), 247 deletions(-) diff --git a/archinstall/default_profiles/custom.py b/archinstall/default_profiles/custom.py index f54e441590..31a92535f1 100644 --- a/archinstall/default_profiles/custom.py +++ b/archinstall/default_profiles/custom.py @@ -1,216 +1 @@ -# from typing import List, Dict, Optional, TYPE_CHECKING, Any -# -# from ..lib import menu -# from archinstall.lib.output import log, FormattedOutput -# from archinstall.lib.profile.profiles_handler import profile_handler -# from archinstall.default_profiles.profile import Profile, ProfileType, SelectResult, ProfileInfo, TProfile -# -# if TYPE_CHECKING: -# from archinstall.lib.installer import Installer -# _: Any -# -# -# class CustomProfileList(menu.ListManager): -# def __init__(self, prompt: str, profiles: List[TProfile]): -# self._actions = [ -# str(_('Add profile')), -# str(_('Edit profile')), -# str(_('Delete profile')) -# ] -# super().__init__(prompt, profiles, [self._actions[0]], self._actions[1:]) -# -# def reformat(self, data: List[TProfile]) -> Dict[str, Optional[TProfile]]: -# table = FormattedOutput.as_table(data) -# rows = table.split('\n') -# -# # these are the header rows of the table and do not map to any profile obviously -# # we're adding 2 spaces as prefix because the menu selector '> ' will be put before -# # the selectable rows so the header has to be aligned -# display_data: Dict[str, Optional[TProfile]] = {f' {rows[0]}': None, f' {rows[1]}': None} -# -# for row, profile in zip(rows[2:], data): -# row = row.replace('|', '\\|') -# display_data[row] = profile -# -# return display_data -# -# def selected_action_display(self, profile: TProfile) -> str: -# return profile.name -# -# def handle_action( -# self, -# action: str, -# entry: Optional['CustomTypeProfile'], -# data: List['CustomTypeProfile'] -# ) -> List['CustomTypeProfile']: -# if action == self._actions[0]: # add -# new_profile = self._add_profile() -# if new_profile is not None: -# # in case a profile with the same name as an existing profile -# # was created we'll replace the existing one -# data = [d for d in data if d.name != new_profile.name] -# data += [new_profile] -# elif entry is not None: -# if action == self._actions[1]: # edit -# new_profile = self._add_profile(entry) -# if new_profile is not None: -# # we'll remove the original profile and add the modified version -# data = [d for d in data if d.name != entry.name and d.name != new_profile.name] -# data += [new_profile] -# elif action == self._actions[2]: # delete -# data = [d for d in data if d != entry] -# -# return data -# -# def _is_new_profile_name(self, name: str) -> bool: -# existing_profile = profile_handler.get_profile_by_name(name) -# if existing_profile is not None and existing_profile.profile_type != ProfileType.CustomType: -# return False -# return True -# -# def _add_profile(self, editing: Optional['CustomTypeProfile'] = None) -> Optional['CustomTypeProfile']: -# name_prompt = '\n\n' + str(_('Profile name: ')) -# -# while True: -# profile_name = menu.TextInput(name_prompt, editing.name if editing else '').run().strip() -# -# if not profile_name: -# return None -# -# if not self._is_new_profile_name(profile_name): -# error_prompt = str(_("The profile name you entered is already in use. Try again")) -# print(error_prompt) -# else: -# break -# -# packages_prompt = str(_('Packages to be install with this profile (space separated, leave blank to skip): ')) -# edit_packages = ' '.join(editing.packages) if editing else '' -# packages = menu.TextInput(packages_prompt, edit_packages).run().strip() -# -# services_prompt = str(_('Services to be enabled with this profile (space separated, leave blank to skip): ')) -# edit_services = ' '.join(editing.services) if editing else '' -# services = menu.TextInput(services_prompt, edit_services).run().strip() -# -# choice = menu.Menu( -# str(_('Should this profile be enabled for installation?')), -# menu.Menu.yes_no(), -# skip=False, -# default_option=menu.Menu.no(), -# clear_screen=False, -# show_search_hint=False -# ).run() -# -# enable_profile = True if choice.value == menu.Menu.yes() else False -# -# profile = CustomTypeProfile( -# profile_name, -# enabled=enable_profile, -# packages=packages.split(' '), -# services=services.split(' ') -# ) -# -# return profile -# -# -# # TODO -# # Still needs some ironing out -# class CustomProfile(): -# def __init__(self): -# super().__init__( -# 'Custom', -# ProfileType.Custom, -# ) -# -# def json(self) -> Dict[str, Any]: -# data: Dict[str, Any] = {'main': self.name, 'gfx_driver': self.gfx_driver, 'custom': []} -# -# for profile in self._current_selection: -# data['custom'].append({ -# 'name': profile.name, -# 'packages': profile.packages, -# 'services': profile.services, -# 'enabled': profile.custom_enabled -# }) -# -# return data -# -# def do_on_select(self) -> SelectResult: -# custom_profile_list = CustomProfileList('', profile_handler.get_custom_profiles()) -# custom_profiles = custom_profile_list.run() -# -# # we'll first remove existing custom default_profiles with -# # the same name and then add the new ones this -# # will avoid errors of default_profiles with duplicate naming -# profile_handler.remove_custom_profiles(custom_profiles) -# profile_handler.add_custom_profiles(custom_profiles) -# -# self.set_current_selection(custom_profiles) -# -# if custom_profile_list.is_last_choice_cancel(): -# return SelectResult.SameSelection -# -# enabled_profiles = [p for p in self._current_selection if p.custom_enabled] -# # in case we only created inactive default_profiles we wanna store them but -# # we want to reset the original setting -# if not enabled_profiles: -# return SelectResult.ResetCurrent -# -# return SelectResult.NewSelection -# -# def post_install(self, install_session: 'Installer'): -# for profile in self._current_selection: -# profile.post_install(install_session) -# -# def install(self, install_session: 'Installer'): -# driver_packages = self.gfx_driver_packages() -# install_session.add_additional_packages(driver_packages) -# -# for profile in self._current_selection: -# if profile.custom_enabled: -# log(f'Installing custom profile {profile.name}...') -# -# install_session.add_additional_packages(profile.packages) -# install_session.enable_service(profile.services) -# -# profile.install(install_session) -# -# def info(self) -> Optional[ProfileInfo]: -# enabled_profiles = [p for p in self._current_selection if p.custom_enabled] -# if enabled_profiles: -# details = ', '.join([p.name for p in enabled_profiles]) -# gfx_driver = self.gfx_driver -# return ProfileInfo(self.name, details, gfx_driver) -# -# return None -# -# def reset(self): -# for profile in self._current_selection: -# profile.set_enabled(False) -# -# self.gfx_driver = None -# -# -# class CustomTypeProfile(Profile): -# def __init__( -# self, -# name: str, -# enabled: bool = False, -# packages: List[str] = [], -# services: List[str] = [] -# ): -# super().__init__( -# name, -# ProfileType.CustomType, -# packages=packages, -# services=services, -# ) -# -# self.custom_enabled = enabled -# -# def json(self) -> Dict[str, Any]: -# return { -# 'name': self.name, -# 'packages': self.packages, -# 'services': self.services, -# 'enabled': self.custom_enabled -# } +# Placeholder to make your own diff --git a/archinstall/default_profiles/desktops/cosmic.py b/archinstall/default_profiles/desktops/cosmic.py index c98397ec4f..a1bdf96cab 100644 --- a/archinstall/default_profiles/desktops/cosmic.py +++ b/archinstall/default_profiles/desktops/cosmic.py @@ -22,5 +22,5 @@ def default_greeter_type(self) -> GreeterType: return GreeterType.CosmicSession @override - def display_servers(self) -> set[DisplayServer]: + get_all_display_servers(self) -> set[DisplayServer]: return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/gnome.py b/archinstall/default_profiles/desktops/gnome.py index 62c9e385bc..7894f01341 100644 --- a/archinstall/default_profiles/desktops/gnome.py +++ b/archinstall/default_profiles/desktops/gnome.py @@ -22,5 +22,5 @@ def default_greeter_type(self) -> GreeterType: return GreeterType.Gdm @override - def display_servers(self) -> set[DisplayServer]: + get_all_display_servers(self) -> set[DisplayServer]: return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/hyprland.py b/archinstall/default_profiles/desktops/hyprland.py index 3b089eabd7..68f6576e7e 100644 --- a/archinstall/default_profiles/desktops/hyprland.py +++ b/archinstall/default_profiles/desktops/hyprland.py @@ -74,5 +74,5 @@ def do_on_select(self) -> None: return None @override - def display_servers(self) -> set[DisplayServer]: + get_all_display_servers(self) -> set[DisplayServer]: return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/labwc.py b/archinstall/default_profiles/desktops/labwc.py index b04ba42a96..e7d76a17fc 100644 --- a/archinstall/default_profiles/desktops/labwc.py +++ b/archinstall/default_profiles/desktops/labwc.py @@ -71,5 +71,5 @@ def do_on_select(self) -> None: return None @override - def display_servers(self) -> set[DisplayServer]: + get_all_display_servers(self) -> set[DisplayServer]: return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/niri.py b/archinstall/default_profiles/desktops/niri.py index 6ce2c57611..aa0ed30788 100644 --- a/archinstall/default_profiles/desktops/niri.py +++ b/archinstall/default_profiles/desktops/niri.py @@ -79,5 +79,5 @@ def do_on_select(self) -> None: return None @override - def display_servers(self) -> set[DisplayServer]: + get_all_display_servers(self) -> set[DisplayServer]: return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/plasma.py b/archinstall/default_profiles/desktops/plasma.py index 0c3aa34f3e..299d543487 100644 --- a/archinstall/default_profiles/desktops/plasma.py +++ b/archinstall/default_profiles/desktops/plasma.py @@ -26,5 +26,5 @@ def default_greeter_type(self) -> GreeterType: return GreeterType.Sddm @override - def display_servers(self) -> set[DisplayServer]: + get_all_display_servers(self) -> set[DisplayServer]: return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/river.py b/archinstall/default_profiles/desktops/river.py index a4d63731bf..d22474da16 100644 --- a/archinstall/default_profiles/desktops/river.py +++ b/archinstall/default_profiles/desktops/river.py @@ -23,5 +23,5 @@ def default_greeter_type(self) -> GreeterType: return GreeterType.Lightdm @override - def display_servers(self) -> set[DisplayServer]: + get_all_display_servers(self) -> set[DisplayServer]: return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/sway.py b/archinstall/default_profiles/desktops/sway.py index 29f171154a..3259364307 100644 --- a/archinstall/default_profiles/desktops/sway.py +++ b/archinstall/default_profiles/desktops/sway.py @@ -81,5 +81,5 @@ def do_on_select(self) -> None: return None @override - def display_servers(self) -> set[DisplayServer]: + get_all_display_servers(self) -> set[DisplayServer]: return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/profile.py b/archinstall/default_profiles/profile.py index 8525e033a7..53ba88a4ff 100644 --- a/archinstall/default_profiles/profile.py +++ b/archinstall/default_profiles/profile.py @@ -172,7 +172,7 @@ def is_custom_type_profile(self) -> bool: def is_greeter_supported(self) -> bool: return self._support_greeter - def display_servers(self) -> set[DisplayServer]: + get_all_display_servers(self) -> set[DisplayServer]: """ Returns the set of display servers required by this profile. By default, returns an empty set (no specific requirements). diff --git a/archinstall/default_profiles/xorg.py b/archinstall/default_profiles/xorg.py index bb731d2654..35af8f026c 100644 --- a/archinstall/default_profiles/xorg.py +++ b/archinstall/default_profiles/xorg.py @@ -33,5 +33,5 @@ def packages(self) -> list[str]: ] @override - def display_servers(self) -> set[DisplayServer]: + get_all_display_servers(self) -> set[DisplayServer]: return {DisplayServer.X11} diff --git a/archinstall/lib/hardware.py b/archinstall/lib/hardware.py index 295a5ad685..aec54e8779 100644 --- a/archinstall/lib/hardware.py +++ b/archinstall/lib/hardware.py @@ -2,7 +2,8 @@ from enum import Enum from functools import cached_property from pathlib import Path -from typing import TYPE_CHECKING + +from archinstall.default_profiles.profile import DisplayServer from .exceptions import SysCallError from .general import SysCommand @@ -10,9 +11,6 @@ from .output import debug from .translationhandler import tr -if TYPE_CHECKING: - from archinstall.default_profiles.profile import DisplayServer - class CpuVendor(Enum): AuthenticAMD = 'amd' @@ -76,7 +74,7 @@ def is_nvidia(self) -> bool: case _: return False - def packages_text(self, servers: set['DisplayServer'] | None = None) -> str: + def packages_text(self, servers: set[DisplayServer] | None = None) -> str: pkg_names = [p.value for p in self.gfx_packages(servers)] text = tr('Installed packages') + ':\n' @@ -88,18 +86,11 @@ def packages_text(self, servers: set['DisplayServer'] | None = None) -> str: def gfx_packages(self, servers: set['DisplayServer'] | None = None) -> list[GfxPackage]: from archinstall.default_profiles.profile import DisplayServer - # empty list packages = [] - # Only add X11 packages if required by said profile - if servers is None: - # Default behavior when no profile is passed: include X11 for bw-compat + if servers is None or DisplayServer.X11 in servers: packages = [GfxPackage.XorgServer, GfxPackage.XorgXinit] - elif servers: - # Profile provided display server requirements - respect them - if DisplayServer.X11 in servers: - packages = [GfxPackage.XorgServer, GfxPackage.XorgXinit] - # else: servers is empty set handled by profile itself + # else: servers is empty set or doesn't contain X11 match self: case GfxDriver.AllOpenSource: diff --git a/archinstall/lib/interactions/system_conf.py b/archinstall/lib/interactions/system_conf.py index f50d60d8de..da08f17c81 100644 --- a/archinstall/lib/interactions/system_conf.py +++ b/archinstall/lib/interactions/system_conf.py @@ -1,7 +1,6 @@ from __future__ import annotations -from typing import TYPE_CHECKING - +from archinstall.default_profiles.profile import Profile from archinstall.lib.models.application import ZramAlgorithm, ZramConfiguration from archinstall.lib.translationhandler import tr from archinstall.tui.curses_menu import SelectMenu @@ -11,9 +10,6 @@ from ..hardware import GfxDriver, SysInfo -if TYPE_CHECKING: - from archinstall.default_profiles.profile import Profile - def select_kernel(preset: list[str] = []) -> list[str]: """ @@ -50,7 +46,7 @@ def select_kernel(preset: list[str] = []) -> list[str]: return result.get_values() -def select_driver(options: list[GfxDriver] = [], preset: GfxDriver | None = None, profile: 'Profile | None' = None) -> GfxDriver | None: +def select_driver(options: list[GfxDriver] = [], preset: GfxDriver | None = None, profile: Profile | None = None) -> GfxDriver | None: """ Somewhat convoluted function, whose job is simple. Select a graphics driver from a pre-defined set of popular options. @@ -61,7 +57,6 @@ def select_driver(options: list[GfxDriver] = [], preset: GfxDriver | None = None if not options: options = [driver for driver in GfxDriver] - # Get display server requirements from profile if available servers = profile.display_servers() if profile else None items = [MenuItem(o.value, value=o, preview_action=lambda x: x.value.packages_text(servers)) for o in options] group = MenuItemGroup(items, sort_items=True) From a37d229908a1f3d3e29aa09bc59bfb286a95ec77 Mon Sep 17 00:00:00 2001 From: h8d13 Date: Sun, 4 Jan 2026 10:37:30 +0100 Subject: [PATCH 14/31] Revert issue#3005 --- archinstall/lib/hardware.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/archinstall/lib/hardware.py b/archinstall/lib/hardware.py index aec54e8779..997bc04cbf 100644 --- a/archinstall/lib/hardware.py +++ b/archinstall/lib/hardware.py @@ -117,7 +117,7 @@ def gfx_packages(self, servers: set['DisplayServer'] | None = None) -> list[GfxP case GfxDriver.IntelOpenSource: packages += [ GfxPackage.Mesa, - # GfxPackage.LibvaIntelDriver, #ISSUE#3005 (legacy) + GfxPackage.LibvaIntelDriver, GfxPackage.IntelMediaDriver, GfxPackage.VulkanIntel, ] From f12fbff0fbe712940b493971bdc3872eb67054ac Mon Sep 17 00:00:00 2001 From: h8d13 Date: Sun, 4 Jan 2026 10:40:04 +0100 Subject: [PATCH 15/31] Oopsies missing 'def' --- archinstall/default_profiles/desktops/cosmic.py | 2 +- archinstall/default_profiles/desktops/gnome.py | 2 +- archinstall/default_profiles/desktops/hyprland.py | 2 +- archinstall/default_profiles/desktops/labwc.py | 2 +- archinstall/default_profiles/desktops/niri.py | 2 +- archinstall/default_profiles/desktops/plasma.py | 2 +- archinstall/default_profiles/desktops/river.py | 2 +- archinstall/default_profiles/desktops/sway.py | 2 +- archinstall/default_profiles/profile.py | 2 +- archinstall/default_profiles/xorg.py | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/archinstall/default_profiles/desktops/cosmic.py b/archinstall/default_profiles/desktops/cosmic.py index a1bdf96cab..bc6e17bcea 100644 --- a/archinstall/default_profiles/desktops/cosmic.py +++ b/archinstall/default_profiles/desktops/cosmic.py @@ -22,5 +22,5 @@ def default_greeter_type(self) -> GreeterType: return GreeterType.CosmicSession @override - get_all_display_servers(self) -> set[DisplayServer]: + def get_all_display_servers(self) -> set[DisplayServer]: return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/gnome.py b/archinstall/default_profiles/desktops/gnome.py index 7894f01341..e3a33c0b34 100644 --- a/archinstall/default_profiles/desktops/gnome.py +++ b/archinstall/default_profiles/desktops/gnome.py @@ -22,5 +22,5 @@ def default_greeter_type(self) -> GreeterType: return GreeterType.Gdm @override - get_all_display_servers(self) -> set[DisplayServer]: + def get_all_display_servers(self) -> set[DisplayServer]: return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/hyprland.py b/archinstall/default_profiles/desktops/hyprland.py index 68f6576e7e..4f9bf7023f 100644 --- a/archinstall/default_profiles/desktops/hyprland.py +++ b/archinstall/default_profiles/desktops/hyprland.py @@ -74,5 +74,5 @@ def do_on_select(self) -> None: return None @override - get_all_display_servers(self) -> set[DisplayServer]: + def get_all_display_servers(self) -> set[DisplayServer]: return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/labwc.py b/archinstall/default_profiles/desktops/labwc.py index e7d76a17fc..c06b379455 100644 --- a/archinstall/default_profiles/desktops/labwc.py +++ b/archinstall/default_profiles/desktops/labwc.py @@ -71,5 +71,5 @@ def do_on_select(self) -> None: return None @override - get_all_display_servers(self) -> set[DisplayServer]: + def get_all_display_servers(self) -> set[DisplayServer]: return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/niri.py b/archinstall/default_profiles/desktops/niri.py index aa0ed30788..a3af713dec 100644 --- a/archinstall/default_profiles/desktops/niri.py +++ b/archinstall/default_profiles/desktops/niri.py @@ -79,5 +79,5 @@ def do_on_select(self) -> None: return None @override - get_all_display_servers(self) -> set[DisplayServer]: + def get_all_display_servers(self) -> set[DisplayServer]: return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/plasma.py b/archinstall/default_profiles/desktops/plasma.py index 299d543487..db840cefcd 100644 --- a/archinstall/default_profiles/desktops/plasma.py +++ b/archinstall/default_profiles/desktops/plasma.py @@ -26,5 +26,5 @@ def default_greeter_type(self) -> GreeterType: return GreeterType.Sddm @override - get_all_display_servers(self) -> set[DisplayServer]: + def get_all_display_servers(self) -> set[DisplayServer]: return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/river.py b/archinstall/default_profiles/desktops/river.py index d22474da16..fb3f909f7b 100644 --- a/archinstall/default_profiles/desktops/river.py +++ b/archinstall/default_profiles/desktops/river.py @@ -23,5 +23,5 @@ def default_greeter_type(self) -> GreeterType: return GreeterType.Lightdm @override - get_all_display_servers(self) -> set[DisplayServer]: + def get_all_display_servers(self) -> set[DisplayServer]: return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/sway.py b/archinstall/default_profiles/desktops/sway.py index 3259364307..7e3a50e4b1 100644 --- a/archinstall/default_profiles/desktops/sway.py +++ b/archinstall/default_profiles/desktops/sway.py @@ -81,5 +81,5 @@ def do_on_select(self) -> None: return None @override - get_all_display_servers(self) -> set[DisplayServer]: + def get_all_display_servers(self) -> set[DisplayServer]: return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/profile.py b/archinstall/default_profiles/profile.py index 53ba88a4ff..10cef512c4 100644 --- a/archinstall/default_profiles/profile.py +++ b/archinstall/default_profiles/profile.py @@ -172,7 +172,7 @@ def is_custom_type_profile(self) -> bool: def is_greeter_supported(self) -> bool: return self._support_greeter - get_all_display_servers(self) -> set[DisplayServer]: + def get_all_display_servers(self) -> set[DisplayServer]: """ Returns the set of display servers required by this profile. By default, returns an empty set (no specific requirements). diff --git a/archinstall/default_profiles/xorg.py b/archinstall/default_profiles/xorg.py index 35af8f026c..3044a2f541 100644 --- a/archinstall/default_profiles/xorg.py +++ b/archinstall/default_profiles/xorg.py @@ -33,5 +33,5 @@ def packages(self) -> list[str]: ] @override - get_all_display_servers(self) -> set[DisplayServer]: + def get_all_display_servers(self) -> set[DisplayServer]: return {DisplayServer.X11} From cccc3776c247a390f6784b53ef7d5290e228a3cb Mon Sep 17 00:00:00 2001 From: h8d13 Date: Sun, 4 Jan 2026 10:48:20 +0100 Subject: [PATCH 16/31] One commit to rule them all mypy + pylint --- archinstall/default_profiles/profile.py | 2 +- archinstall/lib/hardware.py | 3 +-- archinstall/lib/interactions/system_conf.py | 2 +- archinstall/lib/profile/profile_menu.py | 6 +++--- archinstall/lib/profile/profiles_handler.py | 2 +- 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/archinstall/default_profiles/profile.py b/archinstall/default_profiles/profile.py index 10cef512c4..da60656188 100644 --- a/archinstall/default_profiles/profile.py +++ b/archinstall/default_profiles/profile.py @@ -182,7 +182,7 @@ def get_all_display_servers(self) -> set[DisplayServer]: # Aggregate requirements from sub-profiles servers = set() for profile in self.current_selection: - servers.update(profile.display_servers()) + servers.update(profile.get_all_display_servers()) return servers return set() diff --git a/archinstall/lib/hardware.py b/archinstall/lib/hardware.py index 997bc04cbf..47c0b17ecb 100644 --- a/archinstall/lib/hardware.py +++ b/archinstall/lib/hardware.py @@ -83,8 +83,7 @@ def packages_text(self, servers: set[DisplayServer] | None = None) -> str: return text - def gfx_packages(self, servers: set['DisplayServer'] | None = None) -> list[GfxPackage]: - from archinstall.default_profiles.profile import DisplayServer + def gfx_packages(self, servers: set[DisplayServer] | None = None) -> list[GfxPackage]: packages = [] diff --git a/archinstall/lib/interactions/system_conf.py b/archinstall/lib/interactions/system_conf.py index da08f17c81..b5127cce48 100644 --- a/archinstall/lib/interactions/system_conf.py +++ b/archinstall/lib/interactions/system_conf.py @@ -57,7 +57,7 @@ def select_driver(options: list[GfxDriver] = [], preset: GfxDriver | None = None if not options: options = [driver for driver in GfxDriver] - servers = profile.display_servers() if profile else None + servers = profile.get_all_display_servers() if profile else None items = [MenuItem(o.value, value=o, preview_action=lambda x: x.value.packages_text(servers)) for o in options] group = MenuItemGroup(items, sort_items=True) group.set_default_by_value(GfxDriver.AllOpenSource) diff --git a/archinstall/lib/profile/profile_menu.py b/archinstall/lib/profile/profile_menu.py index 674697bd27..1c975f805e 100644 --- a/archinstall/lib/profile/profile_menu.py +++ b/archinstall/lib/profile/profile_menu.py @@ -48,7 +48,7 @@ def _define_menu_options(self) -> list[MenuItem]: action=self._select_gfx_driver, value=self._profile_config.gfx_driver if self._profile_config.profile else None, preview_action=self._prev_gfx, - enabled=bool(self._profile_config.profile and self._profile_config.profile.display_servers()), + enabled=bool(self._profile_config.profile and self._profile_config.profile.get_all_display_servers()), dependencies=['profile'], key='gfx_driver', ), @@ -72,7 +72,7 @@ def _select_profile(self, preset: Profile | None) -> Profile | None: profile = select_profile(preset) if profile is not None: - if profile.display_servers(): + if profile.get_all_display_servers(): self._item_group.find_by_key('gfx_driver').enabled = True self._item_group.find_by_key('gfx_driver').value = GfxDriver.AllOpenSource else: @@ -104,7 +104,7 @@ def _prev_gfx(self, item: MenuItem) -> str | None: if item.value: driver = item.get_value().value profile: Profile | None = self._item_group.find_by_key('profile').value - servers = profile.display_servers() if profile else None + servers = profile.get_all_display_servers() if profile else None packages = item.get_value().packages_text(servers) return f'Driver: {driver}\n{packages}' return None diff --git a/archinstall/lib/profile/profiles_handler.py b/archinstall/lib/profile/profiles_handler.py index 53697d3f93..76a2b22a35 100644 --- a/archinstall/lib/profile/profiles_handler.py +++ b/archinstall/lib/profile/profiles_handler.py @@ -235,7 +235,7 @@ def install_gfx_driver(self, install_session: 'Installer', driver: GfxDriver, pr install_session.add_additional_packages(headers) # Determine display server requirements from profile - display_servers = profile.display_servers() if profile else None + display_servers = profile.get_all_display_servers() if profile else None driver_pkgs = driver.gfx_packages(display_servers) pkg_names = [p.value for p in driver_pkgs] install_session.add_additional_packages(pkg_names) From fb104d1c9e3a049d2515108ec06d03a0b1413b81 Mon Sep 17 00:00:00 2001 From: h8d13 Date: Sun, 4 Jan 2026 10:50:35 +0100 Subject: [PATCH 17/31] Ruff --- archinstall/lib/hardware.py | 1 - 1 file changed, 1 deletion(-) diff --git a/archinstall/lib/hardware.py b/archinstall/lib/hardware.py index 47c0b17ecb..449b71116c 100644 --- a/archinstall/lib/hardware.py +++ b/archinstall/lib/hardware.py @@ -84,7 +84,6 @@ def packages_text(self, servers: set[DisplayServer] | None = None) -> str: return text def gfx_packages(self, servers: set[DisplayServer] | None = None) -> list[GfxPackage]: - packages = [] if servers is None or DisplayServer.X11 in servers: From d8086ec3751bcfb977eae468b2ccdcf488968400 Mon Sep 17 00:00:00 2001 From: h8d13 Date: Tue, 6 Jan 2026 10:54:23 +0100 Subject: [PATCH 18/31] More feedback --- .../default_profiles/desktops/cosmic.py | 2 +- archinstall/default_profiles/desktops/gnome.py | 2 +- .../default_profiles/desktops/hyprland.py | 2 +- archinstall/default_profiles/desktops/labwc.py | 2 +- archinstall/default_profiles/desktops/niri.py | 2 +- .../default_profiles/desktops/plasma.py | 2 +- archinstall/default_profiles/desktops/river.py | 2 +- archinstall/default_profiles/desktops/sway.py | 2 +- archinstall/default_profiles/profile.py | 16 +++------------- archinstall/default_profiles/xorg.py | 2 +- archinstall/lib/interactions/system_conf.py | 2 +- archinstall/lib/profile/profile_menu.py | 6 +++--- archinstall/lib/profile/profiles_handler.py | 18 ++++++++++++++++-- 13 files changed, 32 insertions(+), 28 deletions(-) diff --git a/archinstall/default_profiles/desktops/cosmic.py b/archinstall/default_profiles/desktops/cosmic.py index bc6e17bcea..c98397ec4f 100644 --- a/archinstall/default_profiles/desktops/cosmic.py +++ b/archinstall/default_profiles/desktops/cosmic.py @@ -22,5 +22,5 @@ def default_greeter_type(self) -> GreeterType: return GreeterType.CosmicSession @override - def get_all_display_servers(self) -> set[DisplayServer]: + def display_servers(self) -> set[DisplayServer]: return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/gnome.py b/archinstall/default_profiles/desktops/gnome.py index e3a33c0b34..62c9e385bc 100644 --- a/archinstall/default_profiles/desktops/gnome.py +++ b/archinstall/default_profiles/desktops/gnome.py @@ -22,5 +22,5 @@ def default_greeter_type(self) -> GreeterType: return GreeterType.Gdm @override - def get_all_display_servers(self) -> set[DisplayServer]: + def display_servers(self) -> set[DisplayServer]: return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/hyprland.py b/archinstall/default_profiles/desktops/hyprland.py index 4f9bf7023f..3b089eabd7 100644 --- a/archinstall/default_profiles/desktops/hyprland.py +++ b/archinstall/default_profiles/desktops/hyprland.py @@ -74,5 +74,5 @@ def do_on_select(self) -> None: return None @override - def get_all_display_servers(self) -> set[DisplayServer]: + def display_servers(self) -> set[DisplayServer]: return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/labwc.py b/archinstall/default_profiles/desktops/labwc.py index c06b379455..b04ba42a96 100644 --- a/archinstall/default_profiles/desktops/labwc.py +++ b/archinstall/default_profiles/desktops/labwc.py @@ -71,5 +71,5 @@ def do_on_select(self) -> None: return None @override - def get_all_display_servers(self) -> set[DisplayServer]: + def display_servers(self) -> set[DisplayServer]: return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/niri.py b/archinstall/default_profiles/desktops/niri.py index a3af713dec..6ce2c57611 100644 --- a/archinstall/default_profiles/desktops/niri.py +++ b/archinstall/default_profiles/desktops/niri.py @@ -79,5 +79,5 @@ def do_on_select(self) -> None: return None @override - def get_all_display_servers(self) -> set[DisplayServer]: + def display_servers(self) -> set[DisplayServer]: return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/plasma.py b/archinstall/default_profiles/desktops/plasma.py index db840cefcd..0c3aa34f3e 100644 --- a/archinstall/default_profiles/desktops/plasma.py +++ b/archinstall/default_profiles/desktops/plasma.py @@ -26,5 +26,5 @@ def default_greeter_type(self) -> GreeterType: return GreeterType.Sddm @override - def get_all_display_servers(self) -> set[DisplayServer]: + def display_servers(self) -> set[DisplayServer]: return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/river.py b/archinstall/default_profiles/desktops/river.py index fb3f909f7b..a4d63731bf 100644 --- a/archinstall/default_profiles/desktops/river.py +++ b/archinstall/default_profiles/desktops/river.py @@ -23,5 +23,5 @@ def default_greeter_type(self) -> GreeterType: return GreeterType.Lightdm @override - def get_all_display_servers(self) -> set[DisplayServer]: + def display_servers(self) -> set[DisplayServer]: return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/sway.py b/archinstall/default_profiles/desktops/sway.py index 7e3a50e4b1..29f171154a 100644 --- a/archinstall/default_profiles/desktops/sway.py +++ b/archinstall/default_profiles/desktops/sway.py @@ -81,5 +81,5 @@ def do_on_select(self) -> None: return None @override - def get_all_display_servers(self) -> set[DisplayServer]: + def display_servers(self) -> set[DisplayServer]: return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/profile.py b/archinstall/default_profiles/profile.py index da60656188..6cc1008c4b 100644 --- a/archinstall/default_profiles/profile.py +++ b/archinstall/default_profiles/profile.py @@ -3,6 +3,7 @@ from enum import Enum, auto from typing import TYPE_CHECKING +from archinstall.lib.profile.profiles_handler import profile_handler from archinstall.lib.translationhandler import tr if TYPE_CHECKING: @@ -172,19 +173,8 @@ def is_custom_type_profile(self) -> bool: def is_greeter_supported(self) -> bool: return self._support_greeter - def get_all_display_servers(self) -> set[DisplayServer]: - """ - Returns the set of display servers required by this profile. - By default, returns an empty set (no specific requirements). - Profiles should override this to specify their requirements. - """ - if self.current_selection: - # Aggregate requirements from sub-profiles - servers = set() - for profile in self.current_selection: - servers.update(profile.get_all_display_servers()) - return servers - return set() + def display_servers(self) -> set[DisplayServer]: + return profile_handler.display_servers(self) def preview_text(self) -> str: """ diff --git a/archinstall/default_profiles/xorg.py b/archinstall/default_profiles/xorg.py index 3044a2f541..bb731d2654 100644 --- a/archinstall/default_profiles/xorg.py +++ b/archinstall/default_profiles/xorg.py @@ -33,5 +33,5 @@ def packages(self) -> list[str]: ] @override - def get_all_display_servers(self) -> set[DisplayServer]: + def display_servers(self) -> set[DisplayServer]: return {DisplayServer.X11} diff --git a/archinstall/lib/interactions/system_conf.py b/archinstall/lib/interactions/system_conf.py index b5127cce48..da08f17c81 100644 --- a/archinstall/lib/interactions/system_conf.py +++ b/archinstall/lib/interactions/system_conf.py @@ -57,7 +57,7 @@ def select_driver(options: list[GfxDriver] = [], preset: GfxDriver | None = None if not options: options = [driver for driver in GfxDriver] - servers = profile.get_all_display_servers() if profile else None + servers = profile.display_servers() if profile else None items = [MenuItem(o.value, value=o, preview_action=lambda x: x.value.packages_text(servers)) for o in options] group = MenuItemGroup(items, sort_items=True) group.set_default_by_value(GfxDriver.AllOpenSource) diff --git a/archinstall/lib/profile/profile_menu.py b/archinstall/lib/profile/profile_menu.py index 1c975f805e..674697bd27 100644 --- a/archinstall/lib/profile/profile_menu.py +++ b/archinstall/lib/profile/profile_menu.py @@ -48,7 +48,7 @@ def _define_menu_options(self) -> list[MenuItem]: action=self._select_gfx_driver, value=self._profile_config.gfx_driver if self._profile_config.profile else None, preview_action=self._prev_gfx, - enabled=bool(self._profile_config.profile and self._profile_config.profile.get_all_display_servers()), + enabled=bool(self._profile_config.profile and self._profile_config.profile.display_servers()), dependencies=['profile'], key='gfx_driver', ), @@ -72,7 +72,7 @@ def _select_profile(self, preset: Profile | None) -> Profile | None: profile = select_profile(preset) if profile is not None: - if profile.get_all_display_servers(): + if profile.display_servers(): self._item_group.find_by_key('gfx_driver').enabled = True self._item_group.find_by_key('gfx_driver').value = GfxDriver.AllOpenSource else: @@ -104,7 +104,7 @@ def _prev_gfx(self, item: MenuItem) -> str | None: if item.value: driver = item.get_value().value profile: Profile | None = self._item_group.find_by_key('profile').value - servers = profile.get_all_display_servers() if profile else None + servers = profile.display_servers() if profile else None packages = item.get_value().packages_text(servers) return f'Driver: {driver}\n{packages}' return None diff --git a/archinstall/lib/profile/profiles_handler.py b/archinstall/lib/profile/profiles_handler.py index 76a2b22a35..f6725f355b 100644 --- a/archinstall/lib/profile/profiles_handler.py +++ b/archinstall/lib/profile/profiles_handler.py @@ -12,7 +12,7 @@ from archinstall.lib.translationhandler import tr -from ...default_profiles.profile import GreeterType, Profile +from ...default_profiles.profile import DisplayServer, GreeterType, Profile from ..hardware import GfxDriver from ..models.profile import ProfileConfiguration from ..networking import fetch_data_from_url, list_interfaces @@ -235,7 +235,7 @@ def install_gfx_driver(self, install_session: 'Installer', driver: GfxDriver, pr install_session.add_additional_packages(headers) # Determine display server requirements from profile - display_servers = profile.get_all_display_servers() if profile else None + display_servers = profile.display_servers() if profile else None driver_pkgs = driver.gfx_packages(display_servers) pkg_names = [p.value for p in driver_pkgs] install_session.add_additional_packages(pkg_names) @@ -367,5 +367,19 @@ def reset_top_level_profiles(self, exclude: list[Profile] = []) -> None: if profile.name not in excluded_profiles: profile.reset() + def display_servers(self, profile: Profile) -> set[DisplayServer]: + """ + Returns the set of display servers required by this profile. + By default, returns an empty set (no specific requirements). + Profiles should override this to specify their requirements. + """ + if profile.current_selection: + # Aggregate requirements from sub-profiles + servers = set() + for sub_profile in profile.current_selection: + servers.update(sub_profile.display_servers()) + return servers + return set() + profile_handler = ProfileHandler() From 1822a7b166a7e70f5b2f33c4488047f3b09d2d7b Mon Sep 17 00:00:00 2001 From: h8d13 Date: Tue, 6 Jan 2026 10:58:04 +0100 Subject: [PATCH 19/31] Inline import --- archinstall/default_profiles/profile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/archinstall/default_profiles/profile.py b/archinstall/default_profiles/profile.py index 6cc1008c4b..eb67c5e3bd 100644 --- a/archinstall/default_profiles/profile.py +++ b/archinstall/default_profiles/profile.py @@ -3,7 +3,6 @@ from enum import Enum, auto from typing import TYPE_CHECKING -from archinstall.lib.profile.profiles_handler import profile_handler from archinstall.lib.translationhandler import tr if TYPE_CHECKING: @@ -174,6 +173,7 @@ def is_greeter_supported(self) -> bool: return self._support_greeter def display_servers(self) -> set[DisplayServer]: + from ..lib.profile.profiles_handler import profile_handler return profile_handler.display_servers(self) def preview_text(self) -> str: From 22f96465399a10b2f1a937ed689d5ced64d1fe67 Mon Sep 17 00:00:00 2001 From: h8d13 Date: Tue, 6 Jan 2026 10:58:56 +0100 Subject: [PATCH 20/31] Ruff --- archinstall/default_profiles/profile.py | 1 + 1 file changed, 1 insertion(+) diff --git a/archinstall/default_profiles/profile.py b/archinstall/default_profiles/profile.py index eb67c5e3bd..887d830c41 100644 --- a/archinstall/default_profiles/profile.py +++ b/archinstall/default_profiles/profile.py @@ -174,6 +174,7 @@ def is_greeter_supported(self) -> bool: def display_servers(self) -> set[DisplayServer]: from ..lib.profile.profiles_handler import profile_handler + return profile_handler.display_servers(self) def preview_text(self) -> str: From ddef9bbfc0ca9df30c94a7623f9fcb5e3c260194 Mon Sep 17 00:00:00 2001 From: h8d13 Date: Tue, 6 Jan 2026 11:00:00 +0100 Subject: [PATCH 21/31] Ws --- archinstall/default_profiles/profile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/archinstall/default_profiles/profile.py b/archinstall/default_profiles/profile.py index 887d830c41..3d8aa192e0 100644 --- a/archinstall/default_profiles/profile.py +++ b/archinstall/default_profiles/profile.py @@ -174,7 +174,7 @@ def is_greeter_supported(self) -> bool: def display_servers(self) -> set[DisplayServer]: from ..lib.profile.profiles_handler import profile_handler - + return profile_handler.display_servers(self) def preview_text(self) -> str: From 6698967b072baf46c946c6ef35ac373206788202 Mon Sep 17 00:00:00 2001 From: h8d13 Date: Wed, 7 Jan 2026 13:52:48 +0100 Subject: [PATCH 22/31] fix imports --- archinstall/lib/interactions/system_conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/archinstall/lib/interactions/system_conf.py b/archinstall/lib/interactions/system_conf.py index f578061aa2..46da86f8b6 100644 --- a/archinstall/lib/interactions/system_conf.py +++ b/archinstall/lib/interactions/system_conf.py @@ -1,8 +1,8 @@ from __future__ import annotations -from archinstall.default_profiles.profile import Profile from typing import assert_never +from archinstall.default_profiles.profile import Profile from archinstall.lib.models.application import ZramAlgorithm, ZramConfiguration from archinstall.lib.translationhandler import tr from archinstall.tui.curses_menu import SelectMenu From 807b4a15f53f68f8168e0ef981f3ee4cd7d129f1 Mon Sep 17 00:00:00 2001 From: h8d13 Date: Thu, 8 Jan 2026 12:16:40 +0100 Subject: [PATCH 23/31] Create WaylandProfile Class Remove duplicates of xorg-server which is handled in hardware Fix seat access for river --- .../default_profiles/desktops/cosmic.py | 10 ++-- .../default_profiles/desktops/gnome.py | 10 ++-- .../default_profiles/desktops/hyprland.py | 10 ++-- .../default_profiles/desktops/labwc.py | 10 ++-- archinstall/default_profiles/desktops/niri.py | 10 ++-- .../default_profiles/desktops/plasma.py | 10 ++-- .../default_profiles/desktops/river.py | 54 ++++++++++++++++--- archinstall/default_profiles/desktops/sway.py | 10 ++-- archinstall/default_profiles/profile.py | 1 - archinstall/default_profiles/wayland.py | 30 +++++++++++ archinstall/default_profiles/xorg.py | 7 --- 11 files changed, 99 insertions(+), 63 deletions(-) create mode 100644 archinstall/default_profiles/wayland.py diff --git a/archinstall/default_profiles/desktops/cosmic.py b/archinstall/default_profiles/desktops/cosmic.py index c98397ec4f..6c71179578 100644 --- a/archinstall/default_profiles/desktops/cosmic.py +++ b/archinstall/default_profiles/desktops/cosmic.py @@ -1,10 +1,10 @@ from typing import override -from archinstall.default_profiles.profile import DisplayServer, GreeterType, ProfileType -from archinstall.default_profiles.xorg import XorgProfile +from archinstall.default_profiles.profile import GreeterType, ProfileType +from archinstall.default_profiles.wayland import WaylandProfile -class CosmicProfile(XorgProfile): +class CosmicProfile(WaylandProfile): def __init__(self) -> None: super().__init__('Cosmic', ProfileType.DesktopEnv) @@ -20,7 +20,3 @@ def packages(self) -> list[str]: @override def default_greeter_type(self) -> GreeterType: return GreeterType.CosmicSession - - @override - def display_servers(self) -> set[DisplayServer]: - return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/gnome.py b/archinstall/default_profiles/desktops/gnome.py index 62c9e385bc..f78491b16b 100644 --- a/archinstall/default_profiles/desktops/gnome.py +++ b/archinstall/default_profiles/desktops/gnome.py @@ -1,10 +1,10 @@ from typing import override -from archinstall.default_profiles.profile import DisplayServer, GreeterType, ProfileType -from archinstall.default_profiles.xorg import XorgProfile +from archinstall.default_profiles.profile import GreeterType, ProfileType +from archinstall.default_profiles.wayland import WaylandProfile -class GnomeProfile(XorgProfile): +class GnomeProfile(WaylandProfile): def __init__(self) -> None: super().__init__('GNOME', ProfileType.DesktopEnv) @@ -20,7 +20,3 @@ def packages(self) -> list[str]: @override def default_greeter_type(self) -> GreeterType: return GreeterType.Gdm - - @override - def display_servers(self) -> set[DisplayServer]: - return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/hyprland.py b/archinstall/default_profiles/desktops/hyprland.py index 3b089eabd7..309533dbfa 100644 --- a/archinstall/default_profiles/desktops/hyprland.py +++ b/archinstall/default_profiles/desktops/hyprland.py @@ -1,8 +1,8 @@ from typing import override from archinstall.default_profiles.desktops import SeatAccess -from archinstall.default_profiles.profile import DisplayServer, GreeterType, ProfileType -from archinstall.default_profiles.xorg import XorgProfile +from archinstall.default_profiles.profile import GreeterType, ProfileType +from archinstall.default_profiles.wayland import WaylandProfile from archinstall.lib.translationhandler import tr from archinstall.tui.curses_menu import SelectMenu from archinstall.tui.menu_item import MenuItem, MenuItemGroup @@ -10,7 +10,7 @@ from archinstall.tui.types import Alignment, FrameProperties -class HyprlandProfile(XorgProfile): +class HyprlandProfile(WaylandProfile): def __init__(self) -> None: super().__init__('Hyprland', ProfileType.DesktopEnv) @@ -72,7 +72,3 @@ def _ask_seat_access(self) -> None: def do_on_select(self) -> None: self._ask_seat_access() return None - - @override - def display_servers(self) -> set[DisplayServer]: - return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/labwc.py b/archinstall/default_profiles/desktops/labwc.py index b04ba42a96..fbb6223e6f 100644 --- a/archinstall/default_profiles/desktops/labwc.py +++ b/archinstall/default_profiles/desktops/labwc.py @@ -1,8 +1,8 @@ from typing import override from archinstall.default_profiles.desktops import SeatAccess -from archinstall.default_profiles.profile import DisplayServer, GreeterType, ProfileType -from archinstall.default_profiles.xorg import XorgProfile +from archinstall.default_profiles.profile import GreeterType, ProfileType +from archinstall.default_profiles.wayland import WaylandProfile from archinstall.lib.translationhandler import tr from archinstall.tui.curses_menu import SelectMenu from archinstall.tui.menu_item import MenuItem, MenuItemGroup @@ -10,7 +10,7 @@ from archinstall.tui.types import Alignment, FrameProperties -class LabwcProfile(XorgProfile): +class LabwcProfile(WaylandProfile): def __init__(self) -> None: super().__init__( 'Labwc', @@ -69,7 +69,3 @@ def _ask_seat_access(self) -> None: def do_on_select(self) -> None: self._ask_seat_access() return None - - @override - def display_servers(self) -> set[DisplayServer]: - return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/niri.py b/archinstall/default_profiles/desktops/niri.py index 6ce2c57611..f136bb9907 100644 --- a/archinstall/default_profiles/desktops/niri.py +++ b/archinstall/default_profiles/desktops/niri.py @@ -1,8 +1,8 @@ from typing import override from archinstall.default_profiles.desktops import SeatAccess -from archinstall.default_profiles.profile import DisplayServer, GreeterType, ProfileType -from archinstall.default_profiles.xorg import XorgProfile +from archinstall.default_profiles.profile import GreeterType, ProfileType +from archinstall.default_profiles.wayland import WaylandProfile from archinstall.lib.translationhandler import tr from archinstall.tui.curses_menu import SelectMenu from archinstall.tui.menu_item import MenuItem, MenuItemGroup @@ -10,7 +10,7 @@ from archinstall.tui.types import Alignment, FrameProperties -class NiriProfile(XorgProfile): +class NiriProfile(WaylandProfile): def __init__(self) -> None: super().__init__( 'Niri', @@ -77,7 +77,3 @@ def _ask_seat_access(self) -> None: def do_on_select(self) -> None: self._ask_seat_access() return None - - @override - def display_servers(self) -> set[DisplayServer]: - return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/plasma.py b/archinstall/default_profiles/desktops/plasma.py index 6b25ab2f18..d9ef8a2479 100644 --- a/archinstall/default_profiles/desktops/plasma.py +++ b/archinstall/default_profiles/desktops/plasma.py @@ -1,10 +1,10 @@ from typing import override -from archinstall.default_profiles.profile import DisplayServer, GreeterType, ProfileType -from archinstall.default_profiles.xorg import XorgProfile +from archinstall.default_profiles.profile import GreeterType, ProfileType +from archinstall.default_profiles.wayland import WaylandProfile -class PlasmaProfile(XorgProfile): +class PlasmaProfile(WaylandProfile): def __init__(self) -> None: super().__init__('KDE Plasma', ProfileType.DesktopEnv) @@ -24,7 +24,3 @@ def packages(self) -> list[str]: @override def default_greeter_type(self) -> GreeterType: return GreeterType.Sddm - - @override - def display_servers(self) -> set[DisplayServer]: - return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/desktops/river.py b/archinstall/default_profiles/desktops/river.py index a4d63731bf..79feb9ac66 100644 --- a/archinstall/default_profiles/desktops/river.py +++ b/archinstall/default_profiles/desktops/river.py @@ -1,27 +1,69 @@ from typing import override -from archinstall.default_profiles.profile import DisplayServer, GreeterType, ProfileType -from archinstall.default_profiles.xorg import XorgProfile +from archinstall.default_profiles.desktops import SeatAccess +from archinstall.default_profiles.profile import GreeterType, ProfileType +from archinstall.default_profiles.wayland import WaylandProfile +from archinstall.lib.translationhandler import tr +from archinstall.tui.curses_menu import SelectMenu +from archinstall.tui.menu_item import MenuItem, MenuItemGroup +from archinstall.tui.result import ResultType +from archinstall.tui.types import Alignment, FrameProperties -class RiverProfile(XorgProfile): +class RiverProfile(WaylandProfile): def __init__(self) -> None: super().__init__('River', ProfileType.WindowMgr) + 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 [ 'foot', 'xdg-desktop-portal-wlr', 'river', - ] + ] + additional @property @override def default_greeter_type(self) -> GreeterType: 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 = tr('River needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)') + header += '\n' + tr('Choose an option to give River 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[SeatAccess]( + group, + header=header, + allow_skip=False, + frame=FrameProperties.min(tr('Seat access')), + alignment=Alignment.CENTER, + ).run() + + if result.type_ == ResultType.Selection: + self.custom_settings['seat_access'] = result.get_value().value + @override - def display_servers(self) -> set[DisplayServer]: - return {DisplayServer.Wayland} + def do_on_select(self) -> None: + self._ask_seat_access() + return None diff --git a/archinstall/default_profiles/desktops/sway.py b/archinstall/default_profiles/desktops/sway.py index 29f171154a..8f2d2d3b13 100644 --- a/archinstall/default_profiles/desktops/sway.py +++ b/archinstall/default_profiles/desktops/sway.py @@ -1,8 +1,8 @@ from typing import override from archinstall.default_profiles.desktops import SeatAccess -from archinstall.default_profiles.profile import DisplayServer, GreeterType, ProfileType -from archinstall.default_profiles.xorg import XorgProfile +from archinstall.default_profiles.profile import GreeterType, ProfileType +from archinstall.default_profiles.wayland import WaylandProfile from archinstall.lib.translationhandler import tr from archinstall.tui.curses_menu import SelectMenu from archinstall.tui.menu_item import MenuItem, MenuItemGroup @@ -10,7 +10,7 @@ from archinstall.tui.types import Alignment, FrameProperties -class SwayProfile(XorgProfile): +class SwayProfile(WaylandProfile): def __init__(self) -> None: super().__init__( 'Sway', @@ -79,7 +79,3 @@ def _ask_seat_access(self) -> None: def do_on_select(self) -> None: self._ask_seat_access() return None - - @override - def display_servers(self) -> set[DisplayServer]: - return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/profile.py b/archinstall/default_profiles/profile.py index 3d8aa192e0..8122cdee10 100644 --- a/archinstall/default_profiles/profile.py +++ b/archinstall/default_profiles/profile.py @@ -63,7 +63,6 @@ def __init__( self.custom_settings: dict[str, str | None] = {} self.advanced = advanced - self._support_gfx_driver = support_gfx_driver self._support_greeter = support_greeter # self.gfx_driver: str | None = None diff --git a/archinstall/default_profiles/wayland.py b/archinstall/default_profiles/wayland.py new file mode 100644 index 0000000000..7ab6be32a8 --- /dev/null +++ b/archinstall/default_profiles/wayland.py @@ -0,0 +1,30 @@ +from typing import override + +from archinstall.default_profiles.profile import DisplayServer, Profile, ProfileType +from archinstall.lib.translationhandler import tr + + +class WaylandProfile(Profile): + def __init__( + self, + name: str = 'Wayland', + profile_type: ProfileType = ProfileType.Desktop, + advanced: bool = False, + ): + super().__init__( + name, + profile_type, + advanced=advanced, + ) + + @override + def preview_text(self) -> str: + text = tr('Environment type: {}').format(self.profile_type.value) + if packages := self.packages_text(): + text += f'\n{packages}' + + return text + + @override + def display_servers(self) -> set[DisplayServer]: + return {DisplayServer.Wayland} diff --git a/archinstall/default_profiles/xorg.py b/archinstall/default_profiles/xorg.py index bb731d2654..9813208d2b 100644 --- a/archinstall/default_profiles/xorg.py +++ b/archinstall/default_profiles/xorg.py @@ -25,13 +25,6 @@ def preview_text(self) -> str: return text - @property - @override - def packages(self) -> list[str]: - return [ - 'xorg-server', - ] - @override def display_servers(self) -> set[DisplayServer]: return {DisplayServer.X11} From 1441b85d4fa0e0429daf79caa7780956469b8dc2 Mon Sep 17 00:00:00 2001 From: h8d13 Date: Thu, 8 Jan 2026 12:20:40 +0100 Subject: [PATCH 24/31] Update comment --- archinstall/lib/profile/profiles_handler.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/archinstall/lib/profile/profiles_handler.py b/archinstall/lib/profile/profiles_handler.py index f6725f355b..b024846e4e 100644 --- a/archinstall/lib/profile/profiles_handler.py +++ b/archinstall/lib/profile/profiles_handler.py @@ -370,8 +370,8 @@ def reset_top_level_profiles(self, exclude: list[Profile] = []) -> None: def display_servers(self, profile: Profile) -> set[DisplayServer]: """ Returns the set of display servers required by this profile. - By default, returns an empty set (no specific requirements). - Profiles should override this to specify their requirements. + Aggregates requirements from sub-profiles if present. + Profiles inherit from XorgProfile or WaylandProfile to specify their display server. """ if profile.current_selection: # Aggregate requirements from sub-profiles From 3939435411ec549f7db408fe0fd17709ef7816cd Mon Sep 17 00:00:00 2001 From: h8d13 Date: Thu, 8 Jan 2026 12:50:04 +0100 Subject: [PATCH 25/31] Rever xorg change and remove wayland from menu choice --- archinstall/default_profiles/wayland.py | 2 +- archinstall/default_profiles/xorg.py | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/archinstall/default_profiles/wayland.py b/archinstall/default_profiles/wayland.py index 7ab6be32a8..d84e69bfb4 100644 --- a/archinstall/default_profiles/wayland.py +++ b/archinstall/default_profiles/wayland.py @@ -8,7 +8,7 @@ class WaylandProfile(Profile): def __init__( self, name: str = 'Wayland', - profile_type: ProfileType = ProfileType.Desktop, + profile_type: ProfileType = ProfileType.DesktopEnv, advanced: bool = False, ): super().__init__( diff --git a/archinstall/default_profiles/xorg.py b/archinstall/default_profiles/xorg.py index 9813208d2b..bb731d2654 100644 --- a/archinstall/default_profiles/xorg.py +++ b/archinstall/default_profiles/xorg.py @@ -25,6 +25,13 @@ def preview_text(self) -> str: return text + @property + @override + def packages(self) -> list[str]: + return [ + 'xorg-server', + ] + @override def display_servers(self) -> set[DisplayServer]: return {DisplayServer.X11} From 3da463f0b386014d046039e55bc0d8032848a0d3 Mon Sep 17 00:00:00 2001 From: h8d13 Date: Thu, 8 Jan 2026 13:06:59 +0100 Subject: [PATCH 26/31] Add cage profile + greeter --- archinstall/default_profiles/desktops/cage.py | 68 +++++++++++++++++++ archinstall/default_profiles/profile.py | 1 + archinstall/lib/profile/profiles_handler.py | 14 ++++ 3 files changed, 83 insertions(+) create mode 100644 archinstall/default_profiles/desktops/cage.py diff --git a/archinstall/default_profiles/desktops/cage.py b/archinstall/default_profiles/desktops/cage.py new file mode 100644 index 0000000000..19ab4f8c96 --- /dev/null +++ b/archinstall/default_profiles/desktops/cage.py @@ -0,0 +1,68 @@ +from typing import override + +from archinstall.default_profiles.desktops import SeatAccess +from archinstall.default_profiles.profile import GreeterType, ProfileType +from archinstall.default_profiles.wayland import WaylandProfile +from archinstall.lib.translationhandler import tr +from archinstall.tui.curses_menu import SelectMenu +from archinstall.tui.menu_item import MenuItem, MenuItemGroup +from archinstall.tui.result import ResultType +from archinstall.tui.types import Alignment, FrameProperties + + +class CageProfile(WaylandProfile): + def __init__(self) -> None: + super().__init__('Cage', ProfileType.WindowMgr) + + 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 [ + 'cage', # Minimal wlroots kiosk compositor + 'foot', # Terminal emulator + 'xdg-desktop-portal-wlr', # Portal for wlroots compositors + ] + additional + + @property + @override + def default_greeter_type(self) -> GreeterType: + return GreeterType.Regreet + + @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: + header = tr('Cage needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)') + header += '\n' + tr('Choose an option to give Cage 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[SeatAccess]( + group, + header=header, + allow_skip=False, + frame=FrameProperties.min(tr('Seat access')), + alignment=Alignment.CENTER, + ).run() + + if result.type_ == ResultType.Selection: + self.custom_settings['seat_access'] = result.get_value().value + + @override + def do_on_select(self) -> None: + self._ask_seat_access() + return None diff --git a/archinstall/default_profiles/profile.py b/archinstall/default_profiles/profile.py index 8122cdee10..66d910cfe9 100644 --- a/archinstall/default_profiles/profile.py +++ b/archinstall/default_profiles/profile.py @@ -37,6 +37,7 @@ class GreeterType(Enum): Sddm = 'sddm' Gdm = 'gdm' Ly = 'ly' + Regreet = 'greetd-regreet' CosmicSession = 'cosmic-greeter' diff --git a/archinstall/lib/profile/profiles_handler.py b/archinstall/lib/profile/profiles_handler.py index b024846e4e..4de2860228 100644 --- a/archinstall/lib/profile/profiles_handler.py +++ b/archinstall/lib/profile/profiles_handler.py @@ -204,6 +204,9 @@ def install_greeter(self, install_session: 'Installer', greeter: GreeterType) -> packages = ['ly'] service = ['ly@tty1'] service_disable = ['getty@tty1'] + case GreeterType.Regreet: + packages = ['greetd', 'greetd-regreet'] + service = ['greetd'] case GreeterType.CosmicSession: packages = ['cosmic-greeter'] service = ['cosmic-greeter'] @@ -226,6 +229,17 @@ def install_greeter(self, install_session: 'Installer', greeter: GreeterType) -> with open(path, 'w') as file: file.write(filedata) + # regreet requires greetd config to launch it inside cage + if greeter == GreeterType.Regreet: + path = install_session.target.joinpath('etc/greetd/config.toml') + with open(path) as file: + filedata = file.read() + + filedata = filedata.replace('command = "agreety --cmd /bin/sh"', 'command = "cage -s -- regreet"') + + with open(path, 'w') as file: + file.write(filedata) + def install_gfx_driver(self, install_session: 'Installer', driver: GfxDriver, profile: Profile | None = None) -> None: debug(f'Installing GFX driver: {driver.value}') From 7cdd4786cc8670e5de3b92b87a313c43d50c9564 Mon Sep 17 00:00:00 2001 From: h8d13 Date: Thu, 8 Jan 2026 23:55:17 +0100 Subject: [PATCH 27/31] Rem --- archinstall/default_profiles/desktops/cage.py | 68 ------------------- archinstall/default_profiles/profile.py | 1 - archinstall/lib/profile/profiles_handler.py | 14 ---- 3 files changed, 83 deletions(-) delete mode 100644 archinstall/default_profiles/desktops/cage.py diff --git a/archinstall/default_profiles/desktops/cage.py b/archinstall/default_profiles/desktops/cage.py deleted file mode 100644 index 19ab4f8c96..0000000000 --- a/archinstall/default_profiles/desktops/cage.py +++ /dev/null @@ -1,68 +0,0 @@ -from typing import override - -from archinstall.default_profiles.desktops import SeatAccess -from archinstall.default_profiles.profile import GreeterType, ProfileType -from archinstall.default_profiles.wayland import WaylandProfile -from archinstall.lib.translationhandler import tr -from archinstall.tui.curses_menu import SelectMenu -from archinstall.tui.menu_item import MenuItem, MenuItemGroup -from archinstall.tui.result import ResultType -from archinstall.tui.types import Alignment, FrameProperties - - -class CageProfile(WaylandProfile): - def __init__(self) -> None: - super().__init__('Cage', ProfileType.WindowMgr) - - 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 [ - 'cage', # Minimal wlroots kiosk compositor - 'foot', # Terminal emulator - 'xdg-desktop-portal-wlr', # Portal for wlroots compositors - ] + additional - - @property - @override - def default_greeter_type(self) -> GreeterType: - return GreeterType.Regreet - - @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: - header = tr('Cage needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)') - header += '\n' + tr('Choose an option to give Cage 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[SeatAccess]( - group, - header=header, - allow_skip=False, - frame=FrameProperties.min(tr('Seat access')), - alignment=Alignment.CENTER, - ).run() - - if result.type_ == ResultType.Selection: - self.custom_settings['seat_access'] = result.get_value().value - - @override - def do_on_select(self) -> None: - self._ask_seat_access() - return None diff --git a/archinstall/default_profiles/profile.py b/archinstall/default_profiles/profile.py index 66d910cfe9..8122cdee10 100644 --- a/archinstall/default_profiles/profile.py +++ b/archinstall/default_profiles/profile.py @@ -37,7 +37,6 @@ class GreeterType(Enum): Sddm = 'sddm' Gdm = 'gdm' Ly = 'ly' - Regreet = 'greetd-regreet' CosmicSession = 'cosmic-greeter' diff --git a/archinstall/lib/profile/profiles_handler.py b/archinstall/lib/profile/profiles_handler.py index 4de2860228..b024846e4e 100644 --- a/archinstall/lib/profile/profiles_handler.py +++ b/archinstall/lib/profile/profiles_handler.py @@ -204,9 +204,6 @@ def install_greeter(self, install_session: 'Installer', greeter: GreeterType) -> packages = ['ly'] service = ['ly@tty1'] service_disable = ['getty@tty1'] - case GreeterType.Regreet: - packages = ['greetd', 'greetd-regreet'] - service = ['greetd'] case GreeterType.CosmicSession: packages = ['cosmic-greeter'] service = ['cosmic-greeter'] @@ -229,17 +226,6 @@ def install_greeter(self, install_session: 'Installer', greeter: GreeterType) -> with open(path, 'w') as file: file.write(filedata) - # regreet requires greetd config to launch it inside cage - if greeter == GreeterType.Regreet: - path = install_session.target.joinpath('etc/greetd/config.toml') - with open(path) as file: - filedata = file.read() - - filedata = filedata.replace('command = "agreety --cmd /bin/sh"', 'command = "cage -s -- regreet"') - - with open(path, 'w') as file: - file.write(filedata) - def install_gfx_driver(self, install_session: 'Installer', driver: GfxDriver, profile: Profile | None = None) -> None: debug(f'Installing GFX driver: {driver.value}') From 8f5988f983298aa72f298c9a4758b008e56ac181 Mon Sep 17 00:00:00 2001 From: h8d13 Date: Fri, 9 Jan 2026 12:59:52 +0100 Subject: [PATCH 28/31] niri has seatd in hard deps --- archinstall/default_profiles/desktops/niri.py | 36 ------------------- 1 file changed, 36 deletions(-) diff --git a/archinstall/default_profiles/desktops/niri.py b/archinstall/default_profiles/desktops/niri.py index f136bb9907..b7bdba6c6c 100644 --- a/archinstall/default_profiles/desktops/niri.py +++ b/archinstall/default_profiles/desktops/niri.py @@ -17,8 +17,6 @@ def __init__(self) -> None: ProfileType.WindowMgr, ) - self.custom_settings = {'seat_access': None} - @property @override def packages(self) -> list[str]: @@ -43,37 +41,3 @@ def packages(self) -> list[str]: @override def default_greeter_type(self) -> GreeterType: 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 = tr('niri needs access to your seat (collection of hardware devices i.e. keyboard, mouse, etc)') - header += '\n' + tr('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[SeatAccess]( - group, - header=header, - allow_skip=False, - frame=FrameProperties.min(tr('Seat access')), - alignment=Alignment.CENTER, - ).run() - - if result.type_ == ResultType.Selection: - self.custom_settings['seat_access'] = result.get_value().value - - @override - def do_on_select(self) -> None: - self._ask_seat_access() - return None From 068831991a77fd04b82907fb584b504798b7992a Mon Sep 17 00:00:00 2001 From: h8d13 Date: Fri, 9 Jan 2026 13:01:08 +0100 Subject: [PATCH 29/31] Rem import --- archinstall/default_profiles/desktops/niri.py | 1 - 1 file changed, 1 deletion(-) diff --git a/archinstall/default_profiles/desktops/niri.py b/archinstall/default_profiles/desktops/niri.py index b7bdba6c6c..71e34a172d 100644 --- a/archinstall/default_profiles/desktops/niri.py +++ b/archinstall/default_profiles/desktops/niri.py @@ -1,6 +1,5 @@ from typing import override -from archinstall.default_profiles.desktops import SeatAccess from archinstall.default_profiles.profile import GreeterType, ProfileType from archinstall.default_profiles.wayland import WaylandProfile from archinstall.lib.translationhandler import tr From 0667d2788857187123aafa83ce442cbef8a9ee13 Mon Sep 17 00:00:00 2001 From: h8d13 Date: Fri, 9 Jan 2026 13:03:12 +0100 Subject: [PATCH 30/31] Final hw corrections --- archinstall/lib/hardware.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/archinstall/lib/hardware.py b/archinstall/lib/hardware.py index 449b71116c..863dc7729d 100644 --- a/archinstall/lib/hardware.py +++ b/archinstall/lib/hardware.py @@ -50,7 +50,6 @@ class GfxPackage(Enum): VulkanIntel = 'vulkan-intel' VulkanRadeon = 'vulkan-radeon' VulkanNouveau = 'vulkan-nouveau' - VulkanIcdLoader = 'vulkan-icd-loader' Xf86VideoAmdgpu = 'xf86-video-amdgpu' Xf86VideoAti = 'xf86-video-ati' Xf86VideoNouveau = 'xf86-video-nouveau' @@ -141,7 +140,6 @@ def gfx_packages(self, servers: set[DisplayServer] | None = None) -> list[GfxPac case GfxDriver.VMOpenSource: packages += [ GfxPackage.Mesa, - GfxPackage.VulkanIcdLoader, GfxPackage.LibvaMesaDriver, ] From 7567c09b2720db391898e23d258b77047f74930f Mon Sep 17 00:00:00 2001 From: h8d13 Date: Fri, 9 Jan 2026 13:07:21 +0100 Subject: [PATCH 31/31] Rem imports --- archinstall/default_profiles/desktops/niri.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/archinstall/default_profiles/desktops/niri.py b/archinstall/default_profiles/desktops/niri.py index 71e34a172d..8756f99641 100644 --- a/archinstall/default_profiles/desktops/niri.py +++ b/archinstall/default_profiles/desktops/niri.py @@ -2,11 +2,6 @@ from archinstall.default_profiles.profile import GreeterType, ProfileType from archinstall.default_profiles.wayland import WaylandProfile -from archinstall.lib.translationhandler import tr -from archinstall.tui.curses_menu import SelectMenu -from archinstall.tui.menu_item import MenuItem, MenuItemGroup -from archinstall.tui.result import ResultType -from archinstall.tui.types import Alignment, FrameProperties class NiriProfile(WaylandProfile):