Skip to content
Closed
Show file tree
Hide file tree
Changes from all 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
218 changes: 1 addition & 217 deletions archinstall/default_profiles/custom.py
Original file line number Diff line number Diff line change
@@ -1,217 +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,
# support_gfx_driver=True
# )
#
# 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
4 changes: 2 additions & 2 deletions archinstall/default_profiles/desktops/cosmic.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
from typing import override

from archinstall.default_profiles.profile import GreeterType, ProfileType
from archinstall.default_profiles.xorg import XorgProfile
from archinstall.default_profiles.wayland import WaylandProfile


class CosmicProfile(XorgProfile):
class CosmicProfile(WaylandProfile):
def __init__(self) -> None:
super().__init__('Cosmic', ProfileType.DesktopEnv)

Expand Down
4 changes: 2 additions & 2 deletions archinstall/default_profiles/desktops/gnome.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
from typing import override

from archinstall.default_profiles.profile import GreeterType, ProfileType
from archinstall.default_profiles.xorg import XorgProfile
from archinstall.default_profiles.wayland import WaylandProfile


class GnomeProfile(XorgProfile):
class GnomeProfile(WaylandProfile):
def __init__(self) -> None:
super().__init__('GNOME', ProfileType.DesktopEnv)

Expand Down
4 changes: 2 additions & 2 deletions archinstall/default_profiles/desktops/hyprland.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@

from archinstall.default_profiles.desktops import SeatAccess
from archinstall.default_profiles.profile import GreeterType, ProfileType
from archinstall.default_profiles.xorg import XorgProfile
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 HyprlandProfile(XorgProfile):
class HyprlandProfile(WaylandProfile):
def __init__(self) -> None:
super().__init__('Hyprland', ProfileType.DesktopEnv)

Expand Down
4 changes: 2 additions & 2 deletions archinstall/default_profiles/desktops/labwc.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@

from archinstall.default_profiles.desktops import SeatAccess
from archinstall.default_profiles.profile import GreeterType, ProfileType
from archinstall.default_profiles.xorg import XorgProfile
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 LabwcProfile(XorgProfile):
class LabwcProfile(WaylandProfile):
def __init__(self) -> None:
super().__init__(
'Labwc',
Expand Down
46 changes: 2 additions & 44 deletions archinstall/default_profiles/desktops/niri.py
Original file line number Diff line number Diff line change
@@ -1,24 +1,16 @@
from typing import override

from archinstall.default_profiles.desktops import SeatAccess
from archinstall.default_profiles.profile import GreeterType, ProfileType
from archinstall.default_profiles.xorg import XorgProfile
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
from archinstall.default_profiles.wayland import WaylandProfile


class NiriProfile(XorgProfile):
class NiriProfile(WaylandProfile):
def __init__(self) -> None:
super().__init__(
'Niri',
ProfileType.WindowMgr,
)

self.custom_settings = {'seat_access': None}

@property
@override
def packages(self) -> list[str]:
Expand All @@ -43,37 +35,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
4 changes: 2 additions & 2 deletions archinstall/default_profiles/desktops/plasma.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
from typing import override

from archinstall.default_profiles.profile import GreeterType, ProfileType
from archinstall.default_profiles.xorg import XorgProfile
from archinstall.default_profiles.wayland import WaylandProfile


class PlasmaProfile(XorgProfile):
class PlasmaProfile(WaylandProfile):
def __init__(self) -> None:
super().__init__('KDE Plasma', ProfileType.DesktopEnv)

Expand Down
Loading