A tiny native macOS app for one-click switching between Catppuccin themes in Ghostty.
简体中文 · English
- Searchable previews for 512 bundled Ghostty-compatible themes, generated from the Ghostty theme format.
- Apply a single theme, or pair a light theme and a dark theme using Ghostty's native
theme = light:...,dark:...syntax. - One click rewrites your
config.ghosttyand reloads Ghostty automatically (via AppleScript). - Bundled themes are installed on demand into Ghostty's application support directory before they are referenced.
- A safety backup (
config.ghostty.bak) is written before every change. - Bilingual UI (English / 简体中文): follows your macOS system language by default, switchable in-app from the 🌐 menu.
- Optional CLI mode for scripts and shortcuts.
- macOS 13 (Ventura) or newer
- Apple Silicon Mac
- Ghostty installed in
/Applications
- Grab the latest Apple Silicon release from the Releases page.
- Download either the
.dmgor.zipartifact. You do not need Xcode, Swift, or any other developer tools. - Move Ghostty Theme Switcher.app into
/Applications.- If you downloaded the
.dmg, drag the app onto theApplicationsshortcut in the mounted window. - If you downloaded the
.zip, unzip it first and then drag the app into/Applications.
- If you downloaded the
- First launch: because this app isn't signed by an Apple-paid Developer ID, macOS will block it the first time. Don't double-click it — instead:
- Open
/Applicationsin Finder - Right-click (or hold
Controland click) on Ghostty Theme Switcher - Choose Open from the menu
- In the dialog, click Open again
- It now launches normally on every future double-click.
- Open
If macOS says the app "is damaged and can't be opened": that's the quarantine attribute attached to anything downloaded via a browser. Open Terminal and run:
xattr -dr com.apple.quarantine "/Applications/Ghostty Theme Switcher.app"Then try opening it again.
Architecture: current release builds are for Apple Silicon (
arm64) Macs running macOS 13 or newer.
git clone https://github.com/haixing23/GhosttyThemeSwitcher.git
cd GhosttyThemeSwitcher
zsh tools/build_app.sh
open dist/Ghostty\ Theme\ Switcher.appThe bundled app appears in dist/.
To produce the release-ready .app, .zip, and .dmg artifacts in one step:
zsh tools/build_release.shThat script runs tests first, then emits versioned artifacts such as:
dist/GhosttyThemeSwitcher-v1.0.1-macos-arm64.zip
dist/GhosttyThemeSwitcher-v1.0.1-macos-arm64.dmg
- Launch the app.
- Use search to filter themes.
- In Single mode, click any theme card to apply it.
- In Follow System mode, choose one light theme and one dark theme, then click Apply Pair. Ghostty will follow macOS appearance using its native light/dark theme syntax.
The first time the app reloads Ghostty, macOS will ask for Automation permission. If you accidentally deny it, re-enable it under:
System Settings → Privacy & Security → Automation → Ghostty Theme Switcher → Ghostty
If you install from a downloaded release, give macOS permission after the first successful right-click launch. The app can still switch themes without this permission, but automatic Ghostty reloads will not work until you allow Automation.
The same binary doubles as a CLI, useful for shell scripts, Raycast, or Shortcuts:
"/Applications/Ghostty Theme Switcher.app/Contents/MacOS/Ghostty Theme Switcher" --apply mocha
"/Applications/Ghostty Theme Switcher.app/Contents/MacOS/Ghostty Theme Switcher" --apply-system catppuccin-latte catppuccin-mocha
"/Applications/Ghostty Theme Switcher.app/Contents/MacOS/Ghostty Theme Switcher" --list--list prints tab-separated id, title, source, and appearance values.
The app reads ~/Library/Application Support/com.mitchellh.ghostty/config.ghostty, replaces (or appends) the theme = … line, then asks the running Ghostty to reload via AppleScript. The previous config is always saved as config.ghostty.bak next to it. Bundled themes are copied into ~/Library/Application Support/com.mitchellh.ghostty/themes/ghostty-theme-switcher/ the first time they are applied.
GhosttyThemeSwitcher/
├── Sources/
│ └── GhosttyThemeSwitcher/ # SwiftUI app + CLI entry point
│ └── Resources/
│ ├── bundled-themes.json # Generated theme metadata
│ ├── themes.json # Compatibility copy of generated metadata
│ └── BundledThemes/ # Generated Ghostty theme files
├── Tests/
│ └── GhosttyThemeSwitcherTests/
├── tools/
│ ├── build_app.sh # Builds the .app bundle into dist/
│ ├── generate_theme_catalog.py # Regenerates bundled Ghostty themes
│ ├── build_icon.sh
│ ├── Info.plist
│ ├── AppIcon.icns
│ ├── AppIcon.png
│ └── AppIcon.iconset/
├── assets/
│ └── screenshot-main.png # Screenshot used in the README
├── Package.swift
├── README.md
├── README.zh-CN.md
├── LICENSE
└── .gitignore
Issues and PRs are welcome. To run the tests:
swift test- Run
zsh tools/build_release.sh. - Sanity-check the artifacts in
dist/. - Open the built app locally from
dist/or after moving it into/Applications. - Upload the generated
.zipand.dmgfiles to GitHub Releases. - In the release notes, call out:
- Apple Silicon only
- macOS 13+
- first launch requires right-click
Open - quarantine fix command if macOS says the app is damaged
- Ghostty by Mitchell Hashimoto — the terminal that makes this app worth writing.
- Catppuccin — the soothing pastel theme this app is built around.
Huge thanks to both communities. ❤️
Released under the MIT License.
Catppuccin is © the Catppuccin community and used here only by name; no Catppuccin assets are bundled.
