diff --git a/archinstall/default_profiles/applications/__init__.py b/archinstall/default_profiles/applications/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/archinstall/default_profiles/applications/pipewire.py b/archinstall/default_profiles/applications/pipewire.py deleted file mode 100644 index 15cc38f19e..0000000000 --- a/archinstall/default_profiles/applications/pipewire.py +++ /dev/null @@ -1,56 +0,0 @@ -from typing import TYPE_CHECKING, override - -from archinstall.default_profiles.profile import Profile, ProfileType - -if TYPE_CHECKING: - from archinstall.lib.installer import Installer - from archinstall.lib.models.users import User - - -class PipewireProfile(Profile): - def __init__(self) -> None: - super().__init__('Pipewire', ProfileType.Application) - - @property - @override - def packages(self) -> list[str]: - return [ - 'pipewire', - 'pipewire-alsa', - 'pipewire-jack', - 'pipewire-pulse', - 'gst-plugin-pipewire', - 'libpulse', - 'wireplumber' - ] - - def _enable_pipewire_for_all(self, install_session: 'Installer') -> None: - from archinstall.lib.args import arch_config_handler - users: list[User] | None = arch_config_handler.config.users - - if users is None: - return - - for user in users: - # Create the full path for enabling the pipewire systemd items - service_dir = install_session.target / "home" / user.username / ".config" / "systemd" / "user" / "default.target.wants" - service_dir.mkdir(parents=True, exist_ok=True) - - # Set ownership of the entire user catalogue - install_session.arch_chroot(f'chown -R {user.username}:{user.username} /home/{user.username}') - - # symlink in the correct pipewire systemd items - install_session.arch_chroot( - f'ln -sf /usr/lib/systemd/user/pipewire-pulse.service /home/{user.username}/.config/systemd/user/default.target.wants/pipewire-pulse.service', - run_as=user.username - ) - install_session.arch_chroot( - f'ln -sf /usr/lib/systemd/user/pipewire-pulse.socket /home/{user.username}/.config/systemd/user/default.target.wants/pipewire-pulse.socket', - run_as=user.username - ) - - @override - def install(self, install_session: 'Installer') -> None: - super().install(install_session) - install_session.add_additional_packages(self.packages) - self._enable_pipewire_for_all(install_session) diff --git a/archinstall/default_profiles/profile.py b/archinstall/default_profiles/profile.py index fcc83428e6..65a245aa91 100644 --- a/archinstall/default_profiles/profile.py +++ b/archinstall/default_profiles/profile.py @@ -28,7 +28,6 @@ class ProfileType(Enum): CustomType = 'CustomType' # special things Tailored = 'Tailored' - Application = 'Application' class GreeterType(Enum): diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index 6d82b6d8c8..481f9de77c 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -37,6 +37,7 @@ from .hardware import SysInfo from .locale.utils import verify_keyboard_layout, verify_x11_keyboard_layout from .luks import Luks2 +from .models.audio_configuration import Audio, AudioConfiguration from .models.bootloader import Bootloader from .models.locale import LocaleConfiguration from .models.mirrors import MirrorConfiguration @@ -1724,6 +1725,51 @@ def _service_state(self, service_name: str) -> str: environment_vars={'SYSTEMD_COLORS': '0'} ).decode() + def _enable_pipewire_for_all(self, users: list[User]) -> None: + for user in users: + # Create the full path for enabling the pipewire systemd items + service_dir = self.target / "home" / user.username / ".config" / "systemd" / "user" / "default.target.wants" + service_dir.mkdir(parents=True, exist_ok=True) + + # Set ownership of the entire user catalogue + self.arch_chroot(f'chown -R {user.username}:{user.username} /home/{user.username}') + + # symlink in the correct pipewire systemd items + self.arch_chroot( + f'ln -sf /usr/lib/systemd/user/pipewire-pulse.service /home/{user.username}/.config/systemd/user/default.target.wants/pipewire-pulse.service', + run_as=user.username + ) + self.arch_chroot( + f'ln -sf /usr/lib/systemd/user/pipewire-pulse.socket /home/{user.username}/.config/systemd/user/default.target.wants/pipewire-pulse.socket', + run_as=user.username + ) + + def install_audio_config(self, audio_config: AudioConfiguration, users: list[User] | None) -> None: + info(f'Installing audio server: {audio_config.audio.name}') + + match audio_config.audio: + case Audio.PIPEWIRE: + self.add_additional_packages([ + 'pipewire', + 'pipewire-alsa', + 'pipewire-jack', + 'pipewire-pulse', + 'gst-plugin-pipewire', + 'libpulse', + 'wireplumber', + ]) + if users is not None: + self._enable_pipewire_for_all(users) + case Audio.PULSEAUDIO: + self.add_additional_packages("pulseaudio") + + if audio_config.audio != Audio.NO_AUDIO: + if SysInfo.requires_sof_fw(): + self.add_additional_packages('sof-firmware') + + if SysInfo.requires_alsa_fw(): + self.add_additional_packages('alsa-firmware') + def accessibility_tools_in_use() -> bool: return os.system('systemctl is-active --quiet espeakup.service') == 0 diff --git a/archinstall/lib/models/audio_configuration.py b/archinstall/lib/models/audio_configuration.py index f8f3755376..c67f8d3246 100644 --- a/archinstall/lib/models/audio_configuration.py +++ b/archinstall/lib/models/audio_configuration.py @@ -1,12 +1,5 @@ from dataclasses import dataclass from enum import StrEnum, auto -from typing import TYPE_CHECKING - -from ..hardware import SysInfo -from ..output import info - -if TYPE_CHECKING: - from archinstall.lib.installer import Installer class Audio(StrEnum): @@ -29,24 +22,3 @@ def parse_arg(arg: dict[str, str]) -> 'AudioConfiguration': return AudioConfiguration( Audio(arg['audio']) ) - - def install_audio_config( - self, - installation: 'Installer' - ) -> None: - info(f'Installing audio server: {self.audio.name}') - - from ...default_profiles.applications.pipewire import PipewireProfile - - match self.audio: - case Audio.PIPEWIRE: - PipewireProfile().install(installation) - case Audio.PULSEAUDIO: - installation.add_additional_packages("pulseaudio") - - if self.audio != Audio.NO_AUDIO: - if SysInfo.requires_sof_fw(): - installation.add_additional_packages('sof-firmware') - - if SysInfo.requires_alsa_fw(): - installation.add_additional_packages('alsa-firmware') diff --git a/archinstall/scripts/guided.py b/archinstall/scripts/guided.py index 147ac2fe79..c8e247326c 100644 --- a/archinstall/scripts/guided.py +++ b/archinstall/scripts/guided.py @@ -109,7 +109,7 @@ def perform_installation(mountpoint: Path) -> None: audio_config = config.audio_config if audio_config: - audio_config.install_audio_config(installation) + installation.install_audio_config(audio_config, users) else: info("No audio server will be installed") diff --git a/examples/interactive_installation.py b/examples/interactive_installation.py index 6bb42220dc..314ab8b9fb 100644 --- a/examples/interactive_installation.py +++ b/examples/interactive_installation.py @@ -108,7 +108,7 @@ def perform_installation(mountpoint: Path) -> None: audio_config = config.audio_config if audio_config: - audio_config.install_audio_config(installation) + installation.install_audio_config(audio_config, users) else: info("No audio server will be installed")