Skip to content
Closed
Show file tree
Hide file tree
Changes from 12 commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
603a772
Fix x11 vs wayland
h8d13 Jan 1, 2026
cb9dbbc
Issue #3005 and x11 related changes
h8d13 Jan 1, 2026
e27370a
ws
h8d13 Jan 1, 2026
fb43ca4
Flake check
h8d13 Jan 1, 2026
20ff034
Add VM drivers and let ICD loader decide.
h8d13 Jan 1, 2026
ed99d8d
icd-loader instead of hardcoding arbitrary pkgs
h8d13 Jan 1, 2026
198f48a
Add video accel to VM category
h8d13 Jan 1, 2026
93f3e70
n ws
h8d13 Jan 1, 2026
75d2f62
bl
h8d13 Jan 1, 2026
84ae1cb
remove unused logic for sway + nvidia
h8d13 Jan 2, 2026
7f58fcf
Remove more un-used
h8d13 Jan 2, 2026
112c082
Final reverts, remove is_supported completly
h8d13 Jan 2, 2026
207a23d
Address all svart feedback (thanks)
h8d13 Jan 4, 2026
a37d229
Revert issue#3005
h8d13 Jan 4, 2026
f12fbff
Oopsies missing 'def'
h8d13 Jan 4, 2026
cccc377
One commit to rule them all mypy + pylint
h8d13 Jan 4, 2026
fb104d1
Ruff
h8d13 Jan 4, 2026
d8086ec
More feedback
h8d13 Jan 6, 2026
1822a7b
Inline import
h8d13 Jan 6, 2026
22f9646
Ruff
h8d13 Jan 6, 2026
ddef9bb
Ws
h8d13 Jan 6, 2026
93bd87b
Merge branch 'master' into dot-x11
h8d13 Jan 7, 2026
6698967
fix imports
h8d13 Jan 7, 2026
807b4a1
Create WaylandProfile Class
h8d13 Jan 8, 2026
1441b85
Update comment
h8d13 Jan 8, 2026
3939435
Rever xorg change and remove wayland from menu choice
h8d13 Jan 8, 2026
3da463f
Add cage profile + greeter
h8d13 Jan 8, 2026
7cdd478
Rem
h8d13 Jan 8, 2026
8f5988f
niri has seatd in hard deps
h8d13 Jan 9, 2026
0688319
Rem import
h8d13 Jan 9, 2026
0667d27
Final hw corrections
h8d13 Jan 9, 2026
7567c09
Rem imports
h8d13 Jan 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion archinstall/default_profiles/custom.py
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,6 @@
# ProfileType.CustomType,
# packages=packages,
# services=services,
# support_gfx_driver=True
# )
#
# self.custom_enabled = enabled
Expand Down
6 changes: 5 additions & 1 deletion archinstall/default_profiles/desktops/cosmic.py
Original file line number Diff line number Diff line change
@@ -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


Expand All @@ -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]:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

would any profile ever return multiple values? If no, then this should not be a set

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes if user selects several DEs ;)

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the config per profile, not for the overall profile handler, why would a single profile have multiple values?

Copy link
Contributor Author

@h8d13 h8d13 Jan 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They do?

You could make KDE: Xorg and Wayland

Would just be added: plasma-x11-session and kwin11 and boom you support more hardware. That has actually been requested many times.

If you have some better way of doing this please me know other than that I've addressed all your other comments

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

KDE has dropped X11 support and ships with wayland as default. We should adhere to that and not make changes to default behaviour. Given the config you crated I cannot see any profile configs returning multiple values, so my question was if there would be a case that support is needed

Copy link
Contributor Author

@h8d13 h8d13 Jan 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well yeah for KDE it has been requested many times. Some hardware/use case prefers x11, they didn't drop support at all, they separated concerns

Also xorg still gets daily fixes as seen here: https://gitlab.freedesktop.org/xorg/xserver/-/commits/master?ref_type=HEADS

Contrary to Linux stereotypes we should aim to handle both, hence why I prepared this that way. And perhaps in the future even more display protocols.

Think it would make a lot of happy folks to show that Plasma works on both.

return {DisplayServer.Wayland}
6 changes: 5 additions & 1 deletion archinstall/default_profiles/desktops/gnome.py
Original file line number Diff line number Diff line change
@@ -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


Expand All @@ -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}
6 changes: 5 additions & 1 deletion archinstall/default_profiles/desktops/hyprland.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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}
6 changes: 5 additions & 1 deletion archinstall/default_profiles/desktops/labwc.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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}
6 changes: 5 additions & 1 deletion archinstall/default_profiles/desktops/niri.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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}
6 changes: 5 additions & 1 deletion archinstall/default_profiles/desktops/plasma.py
Original file line number Diff line number Diff line change
@@ -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


Expand All @@ -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}
6 changes: 5 additions & 1 deletion archinstall/default_profiles/desktops/river.py
Original file line number Diff line number Diff line change
@@ -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


Expand All @@ -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}
6 changes: 5 additions & 1 deletion archinstall/default_profiles/desktops/sway.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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}
27 changes: 19 additions & 8 deletions archinstall/default_profiles/profile.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@ class ProfileType(Enum):
Application = 'Application'


class DisplayServer(Enum):
X11 = 'x11'
Wayland = 'wayland'


class GreeterType(Enum):
Lightdm = 'lightdm-gtk-greeter'
LightdmSlick = 'lightdm-slick-greeter'
Expand Down Expand Up @@ -164,17 +169,23 @@ 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

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
Expand Down
7 changes: 5 additions & 2 deletions archinstall/default_profiles/xorg.py
Original file line number Diff line number Diff line change
@@ -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


Expand All @@ -14,7 +14,6 @@ def __init__(
super().__init__(
name,
profile_type,
support_gfx_driver=True,
advanced=advanced,
)

Expand All @@ -32,3 +31,7 @@ def packages(self) -> list[str]:
return [
'xorg-server',
]

@override
def display_servers(self) -> set[DisplayServer]:
return {DisplayServer.X11}
30 changes: 25 additions & 5 deletions archinstall/lib/hardware.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,17 @@
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
from .networking import enrich_iface_types, list_interfaces
from .output import debug
from .translationhandler import tr

if TYPE_CHECKING:
from archinstall.default_profiles.profile import DisplayServer


class CpuVendor(Enum):
AuthenticAMD = 'amd'
Expand Down Expand Up @@ -48,6 +52,7 @@ 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'
Expand All @@ -71,17 +76,30 @@ 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):
text += f'\t- {p}\n'

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

# 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
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

match self:
case GfxDriver.AllOpenSource:
Expand All @@ -108,7 +126,7 @@ def gfx_packages(self) -> list[GfxPackage]:
case GfxDriver.IntelOpenSource:
packages += [
GfxPackage.Mesa,
GfxPackage.LibvaIntelDriver,
# GfxPackage.LibvaIntelDriver, #ISSUE#3005 (legacy)
GfxPackage.IntelMediaDriver,
GfxPackage.VulkanIntel,
]
Expand All @@ -134,6 +152,8 @@ def gfx_packages(self) -> list[GfxPackage]:
case GfxDriver.VMOpenSource:
packages += [
GfxPackage.Mesa,
GfxPackage.VulkanIcdLoader,
GfxPackage.LibvaMesaDriver,
]

return packages
Expand Down
11 changes: 9 additions & 2 deletions archinstall/lib/interactions/system_conf.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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]:
"""
Expand Down Expand Up @@ -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.
Expand All @@ -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)

Expand Down
Loading