Install the desktop this repository already describes

The shell named a font, a pointer theme and a wallpaper that no package list
installed and no stage placed. It went unnoticed because this machine collected
all three under sunhat and never lost them; a fresh Fedora box would have come
up with tofu for every shell glyph, the default pointer, and no wallpaper --
while Wallpaper.qml called that missing file `shippedPath`.

The dependency contract reported PASS throughout, because it reads commands that
scripts invoke and none of these are one. The new assets contract covers what it
structurally cannot: fonts and pointer themes named in configs and gsettings, a
shipped wallpaper that must exist, commands launched from QML, and directories
nothing puts into service. Written against the broken tree first, where it found
ten faults.

Four of those were packages nobody had noticed were missing -- gnome-calendar,
podman, pipewire-utils and flatpak -- alongside gnome-control-center, which backs
fifteen rows of Panama's own Settings and is commented so it is not mistaken for
GNOME-session residue later.

Fonts turned out to need no install stage at all. Terra, which install-packages
already enables, packages every Nerd Font, so sunhat's wget-and-unzip is replaced
by five lines in a package list. The pointer theme had no such luck: it is
packaged nowhere, so it is vendored rather than downloaded from a URL that can
rot.

espanso stays undeclared. It is in no enabled repository, and building it from
source is the install method this repository is trying to stop using.

Claude-Session: https://claude.ai/code/session_01Q84axqUE5inJhf5Jz9CFy1
This commit is contained in:
Gabriel Brown
2026-08-20 18:57:47 -04:00
parent 6bcc351e07
commit 96e4085919
72 changed files with 341 additions and 31 deletions
+18
View File
@@ -1,11 +1,21 @@
adw-gtk3-theme
akmods
alsa-plugins-pulseaudio
cascadiamono-nerd-fonts
decibels
desktop-file-utils
dnf-plugins-core
ffmpeg
firamono-nerd-fonts
fuse-libs
# Ghostty and its config in config/dot/ghostty are linked by link-dotfiles.
ghostty
# The Calendar agenda opens events in this; see CalendarAgenda.qml.
gnome-calendar
# NOT GNOME-session residue. Panama's own Settings hands off to this for the
# panels it deliberately does not own -- Online Accounts, Region, Colour,
# Accessibility, Wellbeing, Wacom. See SystemSettings.qml's panel allow-list.
gnome-control-center
gstreamer1-plugin-fmp4
gstreamer1-plugin-gif
gstreamer1-plugin-gtk4
@@ -21,6 +31,7 @@ gstreamer1-plugins-good-gtk
gstreamer1-plugins-good-qt
gstreamer1-plugins-good-qt6
hipblas
jetbrainsmono-nerd-fonts
kernel-devel
lame
lame-devel
@@ -33,6 +44,8 @@ mesa-libGLU
mesa-libOpenCL
mokutil
mozilla-openh264
# Arial, Georgia and Times, so web pages that assume them render correctly.
mscore-fonts
nautilus
nautilus-extensions
nautilus-python
@@ -42,7 +55,12 @@ opus-devel
papers
python3-dnf-plugin-versionlock
rocm-opencl
# The Snapshots page is snapper end to end; see scripts/panama-snapshots.
snapper
sushi
# Fonts the desktop names by family and would otherwise render as tofu.
# VictorMono is required: it draws every glyph in the shell.
victormono-nerd-fonts
wine
wine-core
wine-mono
+2
View File
@@ -19,6 +19,8 @@ pipx
php
php-fpm
pnpm
# Rootless containers, and the backend for the Containers settings page.
podman
python3-devel
python3-gobject
python3-tkinter
+2
View File
@@ -26,6 +26,8 @@ libnotify
nm-connection-editor
orca
pamixer
# pw-dump backs the privacy indicators, pw-play the sound-test button.
pipewire-utils
playerctl
qrencode
qt6-qtwayland
+3
View File
@@ -4,6 +4,9 @@ btop
cargo
curl
eza
# install-packages installs flatpaks with it; Fedora Workstation ships it,
# but a minimal install does not.
flatpak
fontconfig
fwupd
fzf
+45
View File
@@ -243,6 +243,51 @@ for icon_file in "$PANAMA_ICON_DIR"/*.svg; do
done
gtk-update-icon-cache -f -t "$HOME/.local/share/icons/hicolor" 2>/dev/null || true
# The pointer theme. oreo_blue_cursors is packaged by no Fedora repository -- it
# is a GitHub project -- so rather than download it at install time and depend on
# a URL that can rot, the theme is vendored into this repository and exposed the
# same way Panama's application icons are. Without it, every gsettings value,
# GTK settings.ini and XCURSOR_THEME naming it resolves to nothing and the
# session falls back to the default pointer.
PANAMA_CURSOR_DIR="$PANAMA_PATH/config/local/share/icons"
USER_CURSOR_DIR="$HOME/.local/share/icons"
mkdir -p "$USER_CURSOR_DIR"
for cursor_src in "$PANAMA_CURSOR_DIR"/*_cursors; do
[ -d "$cursor_src" ] || continue
cursor_name="$(basename "$cursor_src")"
cursor_dst="$USER_CURSOR_DIR/$cursor_name"
if [ -L "$cursor_dst" ]; then
rm "$cursor_dst"
elif [ -e "$cursor_dst" ]; then
log "Keeping existing cursor theme at $cursor_dst"
continue
fi
ln -s "$cursor_src" "$cursor_dst"
log "Linked cursor theme → $cursor_dst"
done
# The wallpaper the desktop already believes it ships. Wallpaper.qml calls this
# path `shippedPath` and substitutes it whenever wallpaperPath is unset, which is
# its default; panama-lock falls back to the same file, and hyprpaper.conf names
# it directly. Copied rather than symlinked, because ~/Pictures/Wallpapers is a
# directory the user owns and adds their own images to -- a symlink there would
# be a repository file masquerading as one of their own.
PANAMA_WALLPAPER_DIR="$PANAMA_PATH/config/wallpapers"
USER_WALLPAPER_DIR="$HOME/Pictures/Wallpapers"
if [ -d "$PANAMA_WALLPAPER_DIR" ]; then
mkdir -p "$USER_WALLPAPER_DIR"
for wallpaper_src in "$PANAMA_WALLPAPER_DIR"/*; do
[ -f "$wallpaper_src" ] || continue
wallpaper_dst="$USER_WALLPAPER_DIR/$(basename "$wallpaper_src")"
if [ -e "$wallpaper_dst" ]; then
log "Keeping existing wallpaper at $wallpaper_dst"
else
cp "$wallpaper_src" "$wallpaper_dst"
log "Copied wallpaper → $wallpaper_dst"
fi
done
fi
PANAMA_APPLICATION_DIR="$PANAMA_PATH/config/local/share/applications"
USER_APPLICATION_DIR="$HOME/.local/share/applications"
mkdir -p "$USER_APPLICATION_DIR"