Take Claude Desktop from the repository that now carries it

It was `panama app claude-desktop`: a source build, because nothing packaged it.
Upstream publishes an RPM repository now, so the exception shrinks to adding
that repository -- and the result upgrades with `dnf upgrade` along with
everything else instead of needing a slow rebuild every time a version ships.

That moves it out of setup/apps/ and into the third-party section of
install-packages, beside Bun, Claude Code and RustDesk. It also means it is part
of ./install for the first time. The reason it was kept out was the build: slow,
wants the network throughout, and fails on an upstream that moved, which is the
failure the interview exists to prevent. A dnf install is none of those, and the
default dock pins com.anthropic.Claude, so a fresh machine was shipping a pin
for something the install had never put there.

The repository is added with upstream's own setup script rather than a .repo
file written out here. A baseurl copied into this repository is a pin by another
name; the script is the part upstream keeps correct. Both halves are skipped
when already present, so a re-run costs nothing.

The desktop entry id does not change -- it is still com.anthropic.Claude -- so
the dock pin and the notification rules carry over untouched. The new package
drops the nodejs dependency, which is what used to hide the missing-npm bug the
launcher search contract guards; its comment said "depends" in the present
tense and now says what actually happened.
This commit is contained in:
Gabriel Brown
2026-08-21 14:06:26 -04:00
parent 41b86c7a9e
commit 89417cd6d4
4 changed files with 31 additions and 32 deletions
+27 -1
View File
@@ -151,10 +151,14 @@ fi
# --- Applications no repository packages -------------------------------------
#
# Everything else Panama installs comes from dnf or Flathub. These three do not
# Everything else Panama installs comes from dnf or Flathub. These four do not
# exist in either, so each is an explicit exception with a reason, and each is
# skipped when already present so a re-run costs nothing.
#
# Claude Desktop is the half-exception: a repository does carry it, just not one
# Fedora or Flathub knows about, so what is exceptional there is adding the
# repository rather than installing around one.
#
# None of them pins a version. sunhat pinned URLs -- upscayl 2.11.5, LACT 0.5.4,
# a fedora-40 RPM -- and every one of them was a 404 within a release cycle. An
# installer that resolves "latest" keeps working; one that names a version rots.
@@ -180,6 +184,28 @@ else
curl -fsSL https://claude.ai/install.sh | bash > /dev/null 2>&1 || log "Claude Code install failed; skipping"
fi
# Claude Desktop: Anthropic ships macOS and Windows only, so this is a community
# RPM built from the official release. Panama used to build it from source -- it
# was `panama app claude-desktop` -- because no repository carried it. Upstream
# publishes one now, which is strictly better: the result upgrades with every
# other package instead of needing a slow rebuild each time a version ships.
#
# The repository is added by upstream's own setup script rather than by writing
# the .repo file out here. A baseurl copied into this repository is a pin by
# another name, and that script is the part upstream keeps correct.
if rpm -q claude-desktop-extra >/dev/null 2>&1; then
log "Claude Desktop already installed"
else
if [[ ! -f /etc/yum.repos.d/claude-desktop.repo ]]; then
log "Adding the Claude Desktop repository..."
curl -fsSL https://patrickjaja.github.io/claude-desktop-extra/install-rpm.sh \
| sudo bash > /dev/null 2>&1 || log "Could not add the Claude Desktop repository"
fi
log "Installing Claude Desktop..."
sudo dnf install -y claude-desktop-extra > /dev/null \
|| log "Claude Desktop install failed; skipping"
fi
# RustDesk: remote desktop. The flatpak cannot register the root-owned system
# service that unattended access needs -- see panama-doctor's rustdesk check --
# so this takes the RPM. The download URL is resolved from the latest release