Dotfiles/setup/modules/Desktop-Environments/cosmic.sh

88 lines
4.1 KiB
Bash
Executable File

#!/bin/bash
# =============================================================================
# cosmic.sh — COSMIC Desktop Environment installer
# =============================================================================
# Part of the Dotfiles setup system for Arch Linux.
#
# COSMIC is a Wayland-native desktop environment developed by System76 in Rust.
# Unlike traditional DEs that layer on top of existing WM infrastructure, COSMIC
# ships its own compositor (cosmic-comp), shell, and settings daemon as a
# tightly integrated suite.
#
# This script installs the full COSMIC suite via pacman, sets up the PipeWire
# audio stack, configures networking and Bluetooth, and enables the appropriate
# display manager (cosmic-greeter preferred, SDDM as fallback).
#
# Prerequisites: run as a normal user with sudo access; pacman must be available;
# the system should already be connected to the internet.
# =============================================================================
# Exit immediately on error; treat unset variables as errors; propagate pipe
# failures so that a failing command early in a pipeline does not go unnoticed.
set -euo pipefail
# Pull in the shared logging helpers (log, warn, err) from the setup library.
# BASH_SOURCE[0] resolves to this file's path even when the script is sourced
# from another directory, making the relative path to lib/ reliable.
source "$(dirname "${BASH_SOURCE[0]}")/../lib/logging.sh"
log "Installing COSMIC desktop..."
# Install the COSMIC meta-package plus supporting infrastructure:
#
# cosmic — the COSMIC desktop meta-package (pulls in cosmic-comp,
# cosmic-panel, cosmic-settings, cosmic-app-library, etc.)
#
# pipewire — modern audio/video routing daemon; replaces PulseAudio
# and JACK for most desktop workloads
# wireplumber — session/policy manager for PipeWire; decides which
# streams get routed where
# pipewire-alsa — ALSA compatibility shim so legacy ALSA apps use PipeWire
# pipewire-jack — JACK compatibility shim for professional audio software
# pipewire-pulse — PulseAudio socket emulation; keeps apps that speak
# libpulse working without changes
#
# networkmanager — connection management daemon; handles wired, Wi-Fi,
# VPN, and mobile broadband with a D-Bus API
#
# bluez — the Linux Bluetooth protocol stack
# bluez-utils — command-line tools (bluetoothctl) for managing devices
#
# flatpak — universal app sandboxing/delivery; lets COSMIC Software
# install Flathub apps without distro packaging
sudo pacman -S --noconfirm --needed \
cosmic \
pipewire wireplumber pipewire-alsa pipewire-jack pipewire-pulse \
networkmanager \
bluez bluez-utils \
flatpak
log "Enabling services..."
# COSMIC ships its own display manager (cosmic-greeter) built with iced.
# Prefer it over SDDM for a cohesive look-and-feel; fall back to SDDM when
# the package is not present (e.g. on systems where cosmic-greeter is still
# in the AUR or not yet stabilised on this arch build).
#
# pacman -Qi queries the local package database and exits non-zero when the
# package is not installed; &>/dev/null silences both stdout and stderr so
# the check is invisible to the user.
# cosmic-greeter is COSMIC's own display manager; fall back to sddm if absent
if pacman -Qi cosmic-greeter &>/dev/null; then
sudo systemctl enable cosmic-greeter.service
else
# SDDM (Simple Desktop Display Manager) is the widely used Qt-based DM;
# it supports both X11 and Wayland sessions and integrates well with COSMIC.
sudo pacman -S --noconfirm --needed sddm
sudo systemctl enable sddm.service
fi
# Enable NetworkManager so the network is managed on every boot.
sudo systemctl enable NetworkManager.service
# Enable the Bluetooth daemon so adapters are powered up on boot and devices
# can reconnect automatically.
sudo systemctl enable bluetooth.service
log "COSMIC installation complete. Reboot to start."