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:
@@ -31,10 +31,11 @@ Verified against the repository at `3b01f1e`.
|
||||
|---|---|
|
||||
| No fonts installed | `setup/scripts/change-settings:32` sets `VictorMono Nerd Font 10`. `kitty`, `ghostty`, `hyprlock.conf.template`, `Theme.qml` and `Fonts.qml` all name Nerd Font families. No stage installs a font. `Fonts.qml` documents that a mono family without Nerd glyphs replaces every icon in the shell with tofu. |
|
||||
| No cursor theme installed | `oreo_blue_cursors` is named in `change-settings:33`, both GTK `settings.ini.template` files, `config/dot/uwsm/env:23`, `config/dot/hypr/env.lua:52`, and `PreferenceSchema.qml:985`. It exists in `~/.local/share/icons` on this machine only. |
|
||||
| No wallpaper | `PreferenceSchema.qml:826` defaults `wallpaperPath` to `""`. No image ships. |
|
||||
| No wallpaper, though the code says one ships | `Wallpaper.qml:32` declares `shippedPath` as `~/Pictures/Wallpapers/faroe_islands.jpg`. `panama-lock:139` falls back to the same path, `hyprpaper.conf` names it twice, and `lock-screen-settings-harness.qml` uses it as a fixture. Nothing ships it. `PreferenceSchema.qml:826` defaults `wallpaperPath` to `""`. |
|
||||
| `gnome-control-center` undeclared | `SystemSettings.qml:599` allow-lists 23 GNOME panels; 15+ rows across `OnlineAccountsPage`, `RegionPage`, `AccessibilityPage`, `ConnectivityPage`, `ShortcutsPage`, `SoundPage`, `PrivacyPage` and `HealthPage` call `openGnomePanel`. No list declares the package. |
|
||||
| `snapper` undeclared | `panama-snapshots` drives the entire Snapshots page through `snapper`. |
|
||||
| `espanso`, `ghostty` undeclared | Both have configs symlinked by `link-dotfiles`; neither is in a package list. |
|
||||
| Four more undeclared, found by the new contract | Crawling QML for launched commands — which the dependency contract never reads — also caught `gnome-calendar` (`CalendarAgenda.qml:180`), `podman` (`Containers.qml:149`, the Containers page backend), `pipewire-utils` for `pw-dump`/`pw-play` (`PrivacyState.qml:169`, `SoundTest.qml:35`), and `flatpak`, which `install-packages` itself uses. |
|
||||
| `espanso`, `ghostty` undeclared | Both have configs symlinked by `link-dotfiles`; neither is in a package list. `ghostty` is in Terra and is now declared. **`espanso` is in no enabled repository** — sunhat built it from source — so under the dnf/flatpak rule it stays undeclared. Its config remains linked, which costs nothing, and installing it is a separate decision. |
|
||||
| `.bashrc` breaks on a fresh box | `config/bash/.bashrc` ends with an unguarded `. "$HOME/.cargo/env"`, which does not exist until `rustup-init` has run, so every shell start emits an error. The file also carries a committed `# >>> Codex installer >>>` block. |
|
||||
| README describes a desktop that is not installed | The Desktops section advertises GNOME with Forge, Dash-to-Dock, Openbar and Vitals. Nothing in `setup/` installs or configures any of it. |
|
||||
|
||||
@@ -156,8 +157,7 @@ way. The new order:
|
||||
|---|---|---|
|
||||
| `interview` | new | Every prompt, before any work |
|
||||
| `install-packages` | edited | Repos, package lists, extras, debloat |
|
||||
| `install-fonts` | new | Nerd Fonts and MS core fonts |
|
||||
| `install-cursors` | new | Cursor themes into `~/.local/share/icons` |
|
||||
| `install-cursors` | new | Vendored cursor theme into `~/.local/share/icons` |
|
||||
| `install-hardware` | new | NVIDIA, akmods, secure boot, firmware — all conditional |
|
||||
| `link-dotfiles` | edited | Adds the wallpaper; drops `forge` |
|
||||
| `change-settings` | edited | Unchanged in substance |
|
||||
@@ -166,10 +166,10 @@ way. The new order:
|
||||
|
||||
Ordering constraints that are not obvious and must not be broken:
|
||||
|
||||
- `install-fonts` and `install-cursors` precede `change-settings`, because
|
||||
`change-settings` sets gsettings values naming a font family and a cursor theme.
|
||||
Setting them before they exist is not an error, but it does mean the first
|
||||
session renders with fallbacks.
|
||||
- `install-cursors` precedes `change-settings`, because `change-settings` sets a
|
||||
gsettings value naming a cursor theme. Setting it before the theme exists is not
|
||||
an error, but it does mean the first session renders with a fallback. Fonts are
|
||||
installed by `install-packages`, which already runs first.
|
||||
- `setup-identity` follows `install-packages`, because `gh` is installed there.
|
||||
- `install-hardware` runs late; MOK enrollment sets a password consumed at the next
|
||||
boot, and firmware updates may prompt for a reboot. Neither should sit in front of
|
||||
@@ -180,18 +180,42 @@ the existing contract and the reason Panama exists.
|
||||
|
||||
### Fonts
|
||||
|
||||
`install-fonts` installs the families the desktop actually names, checking
|
||||
`fc-list` before downloading so a re-run costs nothing. VictorMono Nerd Font is
|
||||
required — it is the shell's icon font. The remaining sunhat families (CascadiaMono,
|
||||
FiraMono, JetBrainsMono, Meslo, iA Writer Mono) are carried across because Panama's
|
||||
own font picker exists to choose among them, and a picker with one option is not a
|
||||
picker. MS core fonts come from the msttcore installer, as in sunhat.
|
||||
There is no font stage. Terra — which `install-packages` already enables — packages
|
||||
every Nerd Font as an RPM (`victormono-nerd-fonts` and siblings, 3.5.0-1.fc44), and
|
||||
Fedora now packages the Microsoft core fonts as `mscore-fonts`. So the entire gap
|
||||
closes by adding five lines to `desktop-packages`:
|
||||
|
||||
- `victormono-nerd-fonts` — required. It is what `change-settings` sets as
|
||||
`monospace-font-name` and what the shell draws every icon with.
|
||||
- `jetbrainsmono-nerd-fonts`, `firamono-nerd-fonts`, `cascadiamono-nerd-fonts` —
|
||||
Panama ships a font picker; a picker with one option is not a picker.
|
||||
- `mscore-fonts` — web development means checking pages that assume Arial and
|
||||
Georgia resolve.
|
||||
|
||||
This supersedes sunhat's approach, which downloaded release zips from GitHub with
|
||||
`wget` and unpacked them into `~/.local/share/fonts`. That is precisely the install
|
||||
method this repository is trying to stop using, and it turned out to be unnecessary.
|
||||
|
||||
### Cursors
|
||||
|
||||
`install-cursors` places `oreo_blue_cursors` — and the purple and white variants,
|
||||
since `PreferenceSchema.qml` exposes `cursorTheme` as a choice — into
|
||||
`~/.local/share/icons`. Skipped per-theme when already present.
|
||||
`oreo_blue_cursors` is packaged nowhere — not Fedora, not RPM Fusion, not Terra. It
|
||||
comes from `varlesh/oreo-cursors` on GitHub, so the dnf/flatpak rule cannot apply and
|
||||
one of its exceptions has to.
|
||||
|
||||
The theme is **vendored into the repository** at
|
||||
`config/local/share/icons/oreo_blue_cursors` (3.3MB, 63 files, no symlinks) and
|
||||
exposed by `link-dotfiles` with the same narrow per-directory symlink it already uses
|
||||
for Panama's application icons and Vicinae themes. Downloading at install time was
|
||||
rejected: it would add a fourth network exception and a URL that can rot, which is
|
||||
the failure this spec exists to prevent. Vendoring costs 3.3MB in git once, and then
|
||||
the cursor is simply always there.
|
||||
|
||||
Only the blue variant ships, and nothing else needs changing to make that true:
|
||||
`cursorTheme` is a free string in the schema, and `panama-desktop-style`'s `catalog()`
|
||||
enumerates the pointer themes actually present in the XDG icon directories. The picker
|
||||
therefore offers exactly what is installed, so shipping one theme instead of three
|
||||
removes options from the list rather than leaving it advertising themes that are not
|
||||
there.
|
||||
|
||||
### Wallpaper
|
||||
|
||||
@@ -299,12 +323,24 @@ installer. They remain recoverable from sunhat's git history.
|
||||
|
||||
## Repository hygiene
|
||||
|
||||
- Prune the worktrees under `.worktrees/` whose branches are already in `main`.
|
||||
- Audit the seven branches that are not: `feat/panama-displays`,
|
||||
`feat/panama-settings-pages`, `feat/roadmap-completion` (5 commits),
|
||||
`feat/settings-home-completion` (3), `feat/settings-sound`,
|
||||
`fix/settings-backup-complete` (2), `fix/settings-sidebar-scroll`. Report what is
|
||||
in each before anything is merged or deleted.
|
||||
- **Done.** The seven branches that appeared unmerged were audited with
|
||||
`git cherry -v main <branch>`. Six of them — `feat/panama-displays`,
|
||||
`feat/panama-settings-pages`, `feat/settings-home-completion`,
|
||||
`feat/settings-sound`, `fix/settings-backup-complete` and
|
||||
`fix/settings-sidebar-scroll` — had every commit marked patch-equivalent to one
|
||||
already in `main`, and every file they added was verified present in `main`. They
|
||||
looked unmerged only because the work re-landed through a different route. Deleted,
|
||||
along with their worktrees.
|
||||
- `feat/roadmap-completion` is the sole branch with unlanded work: 5 commits, 13
|
||||
files absent from `main`, 62 commits behind. It carries a theme-profile system, a
|
||||
dock context menu, overview-thumbnail capture reliability, and wallpaper/lock
|
||||
hardening, with its own spec and plan. It does not conflict with this work — it
|
||||
*depends* on it, since its lock generator falls back to the shipped wallpaper this
|
||||
spec makes exist. Rebasing it is its own task.
|
||||
- Six worktrees remain on branches already merged to `main`
|
||||
(`home-accessories-customization`, `panama-commands`, `panama-displays-review`,
|
||||
`panama-settings-home-phone`, `settings-notification-rules`, `settings-ownership`).
|
||||
They are clutter, not risk; pruning them stays in phase 6.
|
||||
- Guard the `.cargo/env` source in `config/bash/.bashrc` and remove the Codex block.
|
||||
- Rewrite the README: one desktop, the real install stages, and the test suite.
|
||||
- Audit `docs/settings.md` (21K) for claims that no longer hold.
|
||||
@@ -313,9 +349,9 @@ installer. They remain recoverable from sunhat's git history.
|
||||
|
||||
Each phase is independently shippable and independently useful.
|
||||
|
||||
1. **Install correctness** — fonts, cursors, wallpaper, the five undeclared
|
||||
packages, the `.bashrc` fixes, and the assets contract. Closes every gap that
|
||||
would visibly break a fresh machine.
|
||||
1. **Install correctness** — fonts and the four other undeclared packages, the
|
||||
vendored cursor theme, the shipped wallpaper, the `.bashrc` fixes, and the assets
|
||||
contract. Closes every gap that would visibly break a fresh machine.
|
||||
2. **The interview** — up-front prompts, hardware detection, `panama-doctor` at the
|
||||
end of the run.
|
||||
3. **Hardware flows** — NVIDIA, secure boot, debloat, firmware.
|
||||
|
||||
Reference in New Issue
Block a user