Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
101 changes: 96 additions & 5 deletions archinstall/default_profiles/desktops/gnome.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,64 @@
from enum import StrEnum
from typing import override

from archinstall.default_profiles.profile import DisplayServerType, GreeterType, Profile, ProfileType
from archinstall.default_profiles.profile import CustomSetting, DisplayServerType, GreeterType, Profile, ProfileType
from archinstall.lib.menu.helpers import Selection
from archinstall.lib.translationhandler import tr
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
from archinstall.tui.result import ResultType


class GnomeFlavor(StrEnum):
Full = 'gnome'
Minimal = 'gnome-minimal'

def show(self) -> str:
match self:
case GnomeFlavor.Full:
return f'gnome ({tr("Full")})'
case GnomeFlavor.Minimal:
return f'gnome-minimal ({tr("Recommended")})'

def description(self) -> str:
match self:
case GnomeFlavor.Full:
return tr(
'Installs the full gnome package group.\n'
'Includes all GNOME apps such as Maps, Contacts,\n'
'Characters, Calendar, Weather, and more.'
)
case GnomeFlavor.Minimal:
return tr(
'Installs a minimal GNOME environment.\n'
'Includes only the essential components:\n'
' - gnome-shell\n'
' - gnome-session\n'
' - gnome-terminal\n'
' - gnome-control-center\n'
' - gnome-settings-daemon\n'
' - nautilus\n'
' - xdg-desktop-portal-gnome\n'
' - gnome-tweaks'
)

def packages(self) -> list[str]:
match self:
case GnomeFlavor.Full:
return [
'gnome',
'gnome-tweaks',
]
case GnomeFlavor.Minimal:
return [
'gnome-shell',
'gnome-session',
'gnome-terminal',
'gnome-control-center',
'gnome-settings-daemon',
'nautilus',
'xdg-desktop-portal-gnome',
'gnome-tweaks',
]


class GnomeProfile(Profile):
Expand All @@ -15,12 +73,45 @@ def __init__(self) -> None:
@property
@override
def packages(self) -> list[str]:
return [
'gnome',
'gnome-tweaks',
]
flavor_str = self.custom_settings.get(CustomSetting.GnomeFlavor)

if flavor_str is not None:
flavor = GnomeFlavor(flavor_str)
return flavor.packages()
else:
return GnomeFlavor.Minimal.packages() # minimal as the recommended default

@property
@override
def default_greeter_type(self) -> GreeterType:
return GreeterType.Gdm

async def _select_flavor(self) -> None:
header = tr('Select a GNOME installation flavor') + '\n'

items = [
MenuItem(
s.show(),
value=s,
preview_action=lambda x: x.value.description() if x.value else None,
)
for s in GnomeFlavor
]
group = MenuItemGroup(items, sort_items=False)

default = self.custom_settings.get(CustomSetting.GnomeFlavor, None)
group.set_default_by_value(default)

result = await Selection[GnomeFlavor](
group,
header=header,
allow_skip=False,
preview_location='right',
).show()

if result.type_ == ResultType.Selection:
self.custom_settings[CustomSetting.GnomeFlavor] = result.get_value().value

@override
async def do_on_select(self) -> None:
await self._select_flavor()
1 change: 1 addition & 0 deletions archinstall/default_profiles/profile.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ class SelectResult(Enum):
class CustomSetting(StrEnum):
SeatAccess = 'seat_access'
PlasmaFlavor = 'plasma_flavor'
GnomeFlavor = 'gnome_flavor'


class Profile:
Expand Down
2 changes: 1 addition & 1 deletion archinstall/default_profiles/servers/cockpit.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ def __init__(self) -> None:
@property
@override
def packages(self) -> list[str]:
return ['cockpit', 'udisks2', 'packagekit']
return ['cockpit', 'cockpit-storaged', 'cockpit-packagekit']

@property
@override
Expand Down