Pathfinder 0939b228b6 Terra in base section; fix Hyprland via solopasha COPR
- Terra repo is added right after RPM Fusion in the base setup (it carries
  noctalia + mangowc). Modules keep calling add_terra_repo so they still
  work standalone; it is a no-op when terra-release is present.
- Hyprland was retired from the Fedora repos after F42 (dependency churn);
  the module could never resolve 'hyprland' on F44. It now enables the
  solopasha/hyprland COPR first — the de facto standard for F43/44 — and
  treats the accessory packages (hyprpaper/hyprlock/waybar/mako/wofi/
  xwayland-satellite) as optional so a name drift warns instead of aborting.
- README updated.
2026-10-27 11:14:21 +01:00
2026-10-27 09:16:49 +01:00

Fedora Unified Config

Unified configuration for bare/minimal Fedora 44 and newer. Pick a desktop environment and optionally a tiling window manager; the script wires up repos, packages, the greeter and the session entry.

This repo is the Fedora-only successor to starburst. Everything multi-distro (Arch, Debian, Ubuntu branches, OS guessing, per-distro package helpers) is gone on purpose.

Usage

git clone https://git.ku-it.org/yuri/fedora.git
cd fedora
./setup.sh                      # interactive: choose DE, then TWM
./setup.sh --debug              # same, but pause after each section

Non-interactive:

./setup.sh --yes --de=none --twm=niri
./setup.sh --yes --de=gnome --twm=none

Run as your normal user, not root. sudo is used where needed.

Layout

setup.sh                  entrypoint: args, preconditions, base setup, menus, dispatch
lib/common.sh             colours, logging, dnf helpers, rpmfusion/terra, nerd fonts
lib/session.sh            display-manager detection/switching, session entries
modules/de/{gnome,plasma,xfce}.sh
modules/twm/{niri,hyprland,mango,chadwm}.sh

Modules are separate processes, not sourced into setup.sh. That means a module's own set -e cannot leak into the caller, and every module can be run on its own for testing:

DE=none TWM=niri DEBUG_MODE=false bash modules/twm/niri.sh

Each module pulls in lib/ by relative path, so it works both ways.

Selection matrix

DE TWM Result
any any DE provides the session; TWM is added alongside it
none any TWM-only machine, SDDM installed as the greeter
any none plain desktop, no tiling WM
none none refused — that is not a graphical system

Desktop environments

DE dnf group (tried in order) native greeter
gnome gnome-desktop, gnome-desktop-environment, workstation-product-environment gdm
plasma kde-desktop, kde-desktop-environment sddm
xfce xfce-desktop, xfce-desktop-environment sddm

Tiling window managers

TWM Source Session type Notes
niri Fedora repos + Terra (for noctalia) Wayland Ships its own session entry
hyprland copr solopasha/hyprland Wayland Retired from Fedora repos after F42
mango Terra repo only Wayland Session entry written if the package lacks one
chadwm built from source X11 dwm fork; not packaged anywhere for Fedora

chadwm is the only X11 entry in the menu. The other three are Wayland compositors — do not expect the same config story from it.

Display manager policy

  • A DE module leaves the DE's own greeter alone (GNOME→gdm, Plasma→sddm, XFCE→sddm). It never fights a desktop over its own login screen.
  • A TWM module enforces SDDM, because it is the only greeter that lists Wayland compositors and X11 sessions in one menu.
  • Either way graphical.target becomes the default.

Design rules

  1. Fail loudly, early. set -e is on unless --debug. Unsupported distro, release below 44, DE=none + TWM=none, and a missing module all abort with an explanation instead of half-installing.
  2. Be idempotent. Re-running must be safe. Repos are checked with rpm -q before being added, the Nerd Font is skipped if already present, and session entries are not overwritten.
  3. Prefer official repos, then Terra, then a source build. That order is why only mango and chadwm need special handling.
  4. No silent optional failures. install_optional warns and continues for nice-to-haves; everything load-bearing uses install_packages and aborts.
  5. Guard anything environment-dependent. clear needs || true (no TERM under cron/pipes), os-release fields are defaulted, and /usr/share/xsessions is created before writing into it.

Testing

The script was verified on a non-Fedora host with a stateful stub harness (fake sudo/dnf/rpm/systemctl/git/make/curl, a fake os-release, and sandboxed /usr + $HOME). Covered: every DE×(TWM|none) combination, the refusal paths, --help/bad args, interactive menus, --debug abort, and re-running for idempotency.

OS_RELEASE_FILE is overridable purely so the preconditions can be tested:

OS_RELEASE_FILE=/tmp/fake-os-release ./setup.sh --yes --de=xfce --twm=chadwm

Known limitations

  • noctalia and mangowc come from Terra, and hyprland from the solopasha COPR — all third-party sources. Their package layout is not guaranteed across Fedora releases; mango aborts with build-from-source instructions if the package is missing. Terra is added in the base section (and re-checked idempotently inside the modules that need it).
  • Package names are not verified by installation in this repo's test harness — only control flow is. First real run on a fresh F44 box is the actual proof.
  • gnome-tweaks/gnome-extensions-app, wofi, waybar, hyprlock and friends are installed with install_optional, so a rename will warn rather than fail.

Roadmap

  • Profile files (--profile=laptop) instead of individual flags
  • Optional dotfiles layer (noctalia/hyprland/niri configs)
  • --dry-run that prints the dnf transaction without applying it
  • Pre-flight report: what is already installed, what would change

License

See LICENSE.

S
Description
No description provided
Readme GPL-3.0
575 KiB
Languages
Shell 100%