Skip to main content

index

BlueShell is a container-oriented terminal emulator for GNOME, combining the Ptyxis-style user experience with the Ghostty rendering engine. It brings first-class container support (Toolbox, Distrobox, Podman) together with Ghostty's high-performance HarfBuzz text rendering, Kitty graphics protocol, OSC 8 hyperlinks, GPU acceleration, and splits β€” packaged in Ptyxis's polished GNOME interface.

App ID: dev.hanthor.BlueShell


What makes it different​

BlueShell
RendererGhostty β€” HarfBuzz, GPU-accelerated, Kitty graphics, OSC 8 hyperlinks, ligatures
Container integrationFirst-class β€” spawn shells in Toolbox / Distrobox / Podman from the new-tab menu via ptyxis-agent
ProfilesPtyxis-style per-profile config snapshots β€” palette, font, opacity, cursor, command, scrollback
Preferences windowFull Ptyxis-style UI β€” palette picker, font, cursor, scrollback, window theme, shell integration, notifications
Splits / tabsGhostty splits + tab overview
Command paletteGhostty fuzzy command palette
DesktopGNOME / Libadwaita, Wayland + X11

Installation​

TunaOS Flatpak remote​

Available once the tuna-os promotion lands; until then use the nightly bundle below.

flatpak remote-add --if-not-exists tuna-os https://tunaos.org/flatpak/tuna-os.flatpakrepo
flatpak install tuna-os org.tunaos.BlueShell

Updates then arrive through normal flatpak update. The app is listed on tunaos.org alongside the other TunaOS apps.

Flatpak β€” one-line install (nightly bundle)​

CI builds a fresh Flatpak bundle on every commit to ptyxis-port. Install the latest:

curl -L https://nightly.link/tuna-os/blueshell/workflows/ghostty-ptyxis/ptyxis-port/BlueShell.flatpak.zip \
-o BlueShell.flatpak.zip \
&& unzip -o BlueShell.flatpak.zip \
&& flatpak install --user --reinstall BlueShell.flatpak

Flatpak β€” build from source​

flatpak-builder --install --user build-dir flatpak/dev.hanthor.BlueShell.yml

Build from source​

Requires Zig 0.15.x and the GTK/Libadwaita development stack. On Fedora 43+:

# Inside a toolbox or on the host:
sudo dnf install blueprint-compiler gtk4-layer-shell-devel libadwaita-devel meson

# Download Zig 0.15.x from https://ziglang.org/download/ and put on PATH

git clone https://github.com/tuna-os/blueshell
cd blueshell
zig build -Dapp-runtime=gtk -Doptimize=ReleaseFast
# Binary at zig-out/bin/ghostty

See HACKING.md for the full developer guide including the debug build workflow. Also see TESTING.md for the test architecture (unit, integration, UI smoke, screenshot walkthrough), UPSTREAM_SYNC.md for how the fork tracks upstream Ghostty, and docs/TUNA_OS_PROMOTION.md for the tuna-os promotion + Flatpak remote plan.


Container integration​

BlueShell detects running Toolbox and Distrobox containers at startup and lists them in the new-tab menu. Selecting a container spawns a shell inside it via ptyxis-agent, which handles the D-Bus socket and PTY handoff.

Agent resolution order:

  1. PTYXIS_AGENT environment variable
  2. /app/libexec/ptyxis-agent (Flatpak bundle)
  3. A sibling binary next to the ghostty executable

No extra configuration needed β€” if you have Toolbox or Distrobox installed, containers appear automatically.

VM and cluster targets (opt-in)​

Beyond containers, the agent can list VM and cluster shells in the new-tab menu. These are off by default; opt in with a comma list in BLUESHELL_VM_PROVIDERS (e.g. in ~/.profile):

export BLUESHELL_VM_PROVIDERS=lima,incus # or: all
ProviderNeeds on PATHOpens a shell via
limalimactllimactl shell <name>
incusincusincus exec <name> --
libvirtvirshvirsh console <domain> (serial console; exit with Ctrl+])
kuberneteskubectlkubectl exec -it <pod> [-c <container>] -- (current context/namespace)
kubevirtvirtctl + kubectlvirtctl console -n <ns> <vmi>
corralcorralVMs: corral ssh <name> Β· containers: corral ct console <name> (tuna-os/corral)

Only running instances are listed; a provider whose tool is missing is skipped silently. Enumeration happens at agent startup (restart the app to pick up new VMs).


Profile system​

Profiles are Ghostty config file snapshots stored in:

~/.config/ghostty/config ← active config Ghostty reads
~/.config/ghostty/profiles/<name>.config ← named snapshots
~/.config/ghostty/profiles/.active ← name of the currently active profile

Switching a profile copies the snapshot over the active config and triggers a live reload. Saving overwrites the snapshot from the current active config.

The per-profile editor (accessible from Preferences β†’ Profiles β†’ Edit…) lets you configure per-profile:

  • Palette (full 244-palette picker)
  • Font family, size, thicken
  • Background opacity, cursor opacity
  • Bold is bright
  • Custom command, exit action, tab title prefix
  • Backspace/Delete key compatibility
  • Scrollback limit

Preferences​

Open with Ctrl+, or the hamburger menu.

Appearance

  • Palette picker (244 palettes from the Gogh collection)
  • Background transparency + blur
  • Font family/size/thicken
  • Line spacing, column spacing
  • Cursor shape (block / hollow block / I-beam / underline), blinking, opacity

Behavior

  • Tab bar visibility + position + wide tabs
  • Window save state (restore on next launch)
  • Mouse hide while typing, copy-on-select
  • Scrollbar, scroll on keystroke/output, scrollback limit
  • Shell integration
  • Notify on command finish, desktop notifications
  • Confirm before closing

Shortcuts

  • Live list of active keybindings from the current config
  • Quick access to open the config file or reload config

Profiles

  • Create, switch, save, delete profiles
  • Open the per-profile editor

Key bindings (defaults)​

ActionBinding
New tabCtrl+Shift+T
Close tabCtrl+Shift+W
Next / previous tabCtrl+Tab / Ctrl+Shift+Tab
Split rightCtrl+Shift+D
Zoom in / outCtrl+= / Ctrl+-
Command paletteCtrl+Shift+P
PreferencesCtrl+,
SearchCtrl+Shift+F

All keybindings are configurable via keybind = trigger=action in ~/.config/ghostty/config.


Configuration​

BlueShell uses Ghostty's standard config format at ~/.config/ghostty/config. All Ghostty config options are supported. Changes are applied live via Preferences or by editing the file and pressing Ctrl+Shift+R.


Credits​

  • Ghostty by Mitchell Hashimoto β€” terminal emulation engine, renderer, GTK apprt
  • Ptyxis by Christian Hergert β€” UI design, container integration, palette collection, profile system design
  • BlueShell ports Ptyxis's UI into Ghostty's GTK apprt as Zig

License: GPL-3.0-or-later (matching both upstream projects)