TUNA OS PROMOTION
Goal: ship BlueShell (now at tuna-os/blueshell β transfer done
2026-08-17) through the TunaOS Flatpak remote (https://tunaos.org/flatpak/,
OCI images on ghcr.io/tuna-os/*, index maintained in tuna-os/docs
and served via Cloudflare Pages).
Repo-side groundwork in this tree is done:
.github/workflows/publish-flatpak.yml is committed and self-gates on
github.repository == 'tuna-os/blueshell', so it activates on
transfer β nothing here blocks on the org. The remaining steps need
org permissions and are listed in order.
1. Transfer the repository β β DONE (2026-08-17)β
GitHub β repo Settings β General β Danger Zone β Transfer ownership
β tuna-os. (Org owner must accept; hanthor needs create-repo rights
in the org or an owner initiates.) GitHub keeps redirects from the old
URL, so existing clones and the nightly.link install command keep
working during the switchover.
After transfer, in the new repo:
- Re-create the Actions secret(s):
FLATPAK_INDEX_TOKENβ a PAT with write access totuna-os/docs(used to register/update the app in the remote's index). Secrets do NOT transfer. - Confirm Actions are enabled and
GITHUB_TOKENhaspackages: write(the publish workflow requests it, ghcr push needs it). - Update the repo description/topics; keep the
upstream-synclabel (the weekly sync workflow creates issues with it).
2. Rename the app ID: dev.hanthor.BlueShell β org.tunaos.BlueShellβ
TunaOS convention is org.tunaos.<App>. One PR, mechanical:
| File | Change |
|---|---|
flatpak/dev.hanthor.BlueShell.yml | rename file, app-id: field |
flatpak/dev.hanthor.BlueShell.desktop | rename file; update Icon= and StartupWMClass= |
flatpak/dev.hanthor.BlueShell.svg | rename file (manifest install path follows app ID) |
.github/workflows/ghostty-ptyxis.yml | manifest-path, bundle name |
.github/workflows/publish-flatpak.yml | APP_ID env at the top |
README.md, HACKING.md | install commands, App ID mention |
Notes:
- Icon: done.
flatpak/dev.hanthor.BlueShell.svgis original BlueShell artwork (blue scallop + terminal prompt), installed by the manifest under the app ID;rename-iconwas dropped so Ghostty's unlicensed icon is no longer shipped. Rename the SVG alongside the app-id flip.rename-appdata-filestill reuses upstream's metainfo β replace with a BlueShell metainfo file before Flathub-style listing polish matters. - Keep
--own-name=com.mitchellh.ghosttyinfinish-argsfor now: the GTK application still registers on D-Bus under upstream's id (invisible plumbing, not user-facing branding), and the single-instance guard silently exits without it. Longer-term, patch the app ID in the fork and add aCONFLICT_HOTSPOTS.mdentry. - Internal GObject class names (
GhosttyPtyxis*insrc/apprt/gtk/class/and their blueprint templates) are not user-facing and can be renamed toBlueShell*in a follow-up mechanical PR β not a blocker. - Users of the old
dev.hanthorinstall mustflatpak uninstall dev.hanthor.BlueShellonce; app IDs have no migration path.
3. Register in the TunaOS Flatpak remoteβ
Per tuna-os/flatpak-index ("adding apps" flow):
- Repo lives under
tuna-os/β done by step 1. - Manifest at the expected path/name for the index tooling
(
org.tunaos.BlueShellβ step 2). If the index tooling requires the manifest at repo root, add a thin root-level manifest thatbases or mirrorsflatpak/org.tunaos.BlueShell.ymlrather than duplicating it. - CI workflow
publish-flatpak.ymlβ already committed here, copied fromtuna-os/finupdate(the canonical tuna-os pipeline): native x86_64 + aarch64 OCI builds in the GNOME 50 container β skopeo push toghcr.io/tuna-os/blueshell:latest-<arch>β vendored.github/scripts/update-index.pyupdatestuna-os/docs:static/flatpak/index/staticand pushes withFLATPAK_INDEX_TOKEN. Tagsv*also attach .flatpak bundles to the GitHub release. - Set the secret (step 1) and push; Cloudflare Pages redeploys the index and the app appears in the remote.
Users then get it with:
flatpak remote-add --if-not-exists tuna-os https://tunaos.org/flatpak/tuna-os.flatpakrepo
flatpak install tuna-os org.tunaos.BlueShell
4. tunaos.org site listing + install instructionsβ
Being installable is not the finish line β the app must be discoverable:
-
tunaos.org listing: the site is a Docusaurus build from
tuna-os/docswith onedocs/<app>/index.mdpage per app. A ready-to-copy BlueShell page in the finupdate page's format lives atdocs/site/blueshell/index.mdin this repo β PR it totuna-os/docs:docs/blueshell/index.md(add asidebars.tsentry if pages aren't auto-discovered). Short blurb if an apps-overview list also needs a row:BlueShell β container-native terminal for GNOME. Ptyxis's container-first UX (Toolbox / Distrobox / Podman tabs, profiles, preferences) powered by the Ghostty rendering engine (GPU acceleration, Kitty graphics, ligatures, splits).
flatpak install tuna-os org.tunaos.BlueShellInclude a screenshot from the CI
ui-walkthroughartifact (02-prefs-appearance.pngshows the app best) and a link back totuna-os/blueshell. -
README install instructions: the README's "TunaOS Flatpak remote" section is already written (currently marked as pending promotion) β remove the "available onceβ¦" note and promote it to the recommended install path in the same PR that flips the app ID.
5. Post-promotion checklistβ
-
ptyxis-testsandghostty-ptyxis(bundle) workflows green in the org repo -
publish-flatpakrun pushed an image toghcr.io/tuna-os/blueshelland the index PR/commit landed intuna-os/docs - Fresh-machine install from the remote verified (
flatpak install tuna-os org.tunaos.BlueShell) - README install section switched to the remote as the primary path (nightly.link bundle stays as the "bleeding edge" alternative)
- tunaos.org apps page lists BlueShell with install command + screenshot (PR to
tuna-os/docs) -
upstream-sync.ymlweekly run confirmed working under the org (issue/PR creation permissions) - Old repo redirect verified; announce the move in tunaOS channels