#!/bin/bash set -uo pipefail HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # shellcheck source=../../lib/common.sh source "$HERE/../../lib/common.sh" # shellcheck source=../../lib/session.sh source "$HERE/../../lib/session.sh" if is_debug; then set +e; else set -e; fi step "Tiling window manager: Hyprland" rule # hyprland was retired from the Fedora repos after F42 (dependency churn), so it # comes from a COPR. Which COPR has a fedora-44 chroot changes over time — # solopasha (the usual recommendation) was rawhide-only when this was written. # Try candidates in order; first one that enables wins. If none works, abort # with an actionable message instead of a cryptic "chroot not found". if ! pkg_installed hyprland; then enabled="" for copr in lionheartp/Hyprland hermitfeather/hyprland solopasha/hyprland; do info "Enabling copr: $copr..." if sudo dnf copr enable -y "$copr" >/dev/null 2>&1; then enabled="$copr" ok "Copr enabled: $copr" break fi warn "Copr $copr has no chroot for this Fedora release; trying next..." done if [[ -z "$enabled" ]]; then err "None of the Hyprland COPRs have a chroot for Fedora $(rpm -E %fedora)." err "Check https://copr.fedorainfracloud.org/coprs/ for an up-to-date one, or:" err " sudo dnf copr enable -y / fedora-rawhide-x86_64 # last resort" exit 1 fi fi info "Installing Hyprland and its ecosystem..." # COPR package sets differ; treat everything beyond the core compositor as # optional so a name drift warns instead of killing the transaction. install_packages hyprland xdg-desktop-portal-hyprland alacritty install_optional hyprpaper hypridle hyprlock waybar mako wofi xwayland-satellite install_session_prereqs install_nerd_font JetBrainsMono # The Fedora hyprland package ships hyprland.desktop in wayland-sessions. install_packages sddm switch_display_manager sddm ok "Hyprland setup complete. Log out and pick Hyprland in SDDM."