What's wrong
The terminal theme can only be changed by running programa themes set in a
terminal. There is nothing for it in Settings, so most people will never find
it. Settings > Appearance has workspace colours and sidebar options, but no way
to pick the theme the terminal itself uses.
Steps to see it
- Open Settings.
- Go to the Appearance tab.
- Look for a terminal theme option. There isn't one.
- Run
programa themes set catppuccin-mocha in any terminal.
- The theme changes, so the capability exists, just not in the UI.
This is smaller than it looks
The machinery already works end to end and the CLI proves it:
CLI/CLI+Themes.swift lists, sets and clears themes, including separate light
and dark selections, and ships an interactive picker.
- It writes a managed override at
~/Library/Application Support/<bundle-id>/config.ghostty.
- It posts
com.darkroom.programa.themes.reload-config, which
Sources/AppDelegate.swift already handles by calling
GhosttyApp.shared.reloadConfiguration, so themes apply without a relaunch.
- Theme discovery already exists on the app side too, in
GhosttyConfig.themeSearchPaths and themeNameCandidates
(Sources/GhosttyConfig.swift).
So this is a Settings surface over code that already runs, not new config
plumbing. The one real piece of work is that the set/clear logic currently lives
in the CLI target and needs sharing with the app rather than being copied.
Tasks
Worth checking while in here
The sidebar's "Match Terminal Background" derives its contrast from the terminal
background and listens for ghosttyDefaultBackgroundDidChange, so it should
follow a theme change made from Settings with no extra work. Confirm that it
does, with a light theme and a dark theme.
What's wrong
The terminal theme can only be changed by running
programa themes setin aterminal. There is nothing for it in Settings, so most people will never find
it. Settings > Appearance has workspace colours and sidebar options, but no way
to pick the theme the terminal itself uses.
Steps to see it
programa themes set catppuccin-mochain any terminal.This is smaller than it looks
The machinery already works end to end and the CLI proves it:
CLI/CLI+Themes.swiftlists, sets and clears themes, including separate lightand dark selections, and ships an interactive picker.
~/Library/Application Support/<bundle-id>/config.ghostty.com.darkroom.programa.themes.reload-config, whichSources/AppDelegate.swiftalready handles by callingGhosttyApp.shared.reloadConfiguration, so themes apply without a relaunch.GhosttyConfig.themeSearchPathsandthemeNameCandidates(
Sources/GhosttyConfig.swift).So this is a Settings surface over code that already runs, not new config
plumbing. The one real piece of work is that the set/clear logic currently lives
in the CLI target and needs sharing with the app rather than being copied.
Tasks
and dark selections so it matches what the CLI can already express.
GhosttyConfig.themeSearchPathsfor the list instead of duplicatingthe CLI's enumeration.
existing reload. Verify: pick a theme in Settings, the terminal background
changes with no relaunch, and
programa themes listreports the sameselection.
Resources/Localizable.xcstrings(English andJapanese).
~/.config/programa/settings.jsonand document it,per the settings policy in
CLAUDE.md.Worth checking while in here
The sidebar's "Match Terminal Background" derives its contrast from the terminal
background and listens for
ghosttyDefaultBackgroundDidChange, so it shouldfollow a theme change made from Settings with no extra work. Confirm that it
does, with a light theme and a dark theme.