Install the desktop before anything allowed to fail, and let Terra be installed twice

Two bugs, one story: ./install on a machine that had been half set up before
produced no Hyprland at all, and said so in one line among twenty minutes of
scrollback.

Terra bootstraps itself with --repofrompath, which defines a throwaway repo id
just long enough to install terra-release. Run it again on a machine that
already has terra-release and dnf5 refuses the whole transaction -- the
throwaway id collides with the real one. That step sits above everything, so
set -e ended the stage before a single package was considered. It is skipped
now when terra-release is already installed.

The rest is the reason one failed repo cost the desktop. Hyprland was installed
near the bottom of the stage, below a codec swap, two group updates and a
GStreamer glob, any one of which can fail for reasons outside this repository.
It now installs directly after the packages it needs and before anything
optional, and everything fragile below it runs through a soft helper that logs
and continues rather than ending the run. What was stepped over is listed at
the end, because tolerating a failure only beats aborting on it if somebody is
told.

A missing Hyprland is still fatal, and now says so in words.

Also removes the leftover disabled solopasha/hyprland COPR, which would mix
with lionheartp's the moment anyone enabled it while debugging.

Fixes the usage widget reading 1500%: the endpoint reports percentages, not
0..1 fractions. Clamped as well, and the widget answers a click now -- it set
interactive:false, which disables the mouse area its own handler needed.
This commit is contained in:
Gabriel Brown
2026-08-22 09:36:54 -04:00
parent 89761a7da3
commit 669a228286
7 changed files with 340 additions and 67 deletions
+41
View File
@@ -0,0 +1,41 @@
#!/usr/bin/env bash
# Remove the solopasha/hyprland COPR left over from an earlier setup.
#
# Panama installs Hyprland from lionheartp/Hyprland. A machine set up before
# that decision -- or half set up from sunhat-era notes -- can still carry
# solopasha's COPR repo file. It arrives disabled, so nothing is broken today,
# and that is exactly why it is worth removing now rather than later: the moment
# somebody enables it while debugging, two repositories provide hyprland,
# hyprland-uwsm and xdg-desktop-portal-hyprland, and dnf resolves the split by
# version rather than by intent. Half the desktop from one COPR and half from
# the other is a very bad afternoon.
#
# Only Panama's business if it is disabled. A machine that has deliberately
# enabled solopasha is a machine somebody made a choice about, and a migration
# is not the place to overrule it.
set -euo pipefail
repo_file="/etc/yum.repos.d/_copr:copr.fedorainfracloud.org:solopasha:hyprland.repo"
[[ -e "$repo_file" ]] || exit 0
# Enabled means somebody chose it. Say so and leave.
if grep -qE '^\s*enabled\s*=\s*1' "$repo_file"; then
echo "Leaving solopasha/hyprland alone: it is enabled, so it is in use deliberately."
echo "Panama installs Hyprland from lionheartp/Hyprland; having both enabled will"
echo "eventually mix the two. Disable it with: sudo dnf copr disable solopasha/hyprland"
exit 0
fi
PANAMA_PATH="${PANAMA_PATH:-$HOME/.local/share/Panama}"
sudo_cmd=(sudo)
[[ -x "$PANAMA_PATH/bin/panama-sudo" ]] && sudo_cmd=(
"$PANAMA_PATH/bin/panama-sudo" --reason
"Removing the unused solopasha/hyprland repository, which conflicts with the one Panama installs from"
--
)
"${sudo_cmd[@]}" rm -f "$repo_file"
echo "Removed the disabled solopasha/hyprland COPR; Hyprland comes from lionheartp/Hyprland."