Skip to content

Add Warp terminal theme import#4714

Draft
brennanb2025 wants to merge 5 commits into
mainfrom
brennanb2025/terminal-themes-integration
Draft

Add Warp terminal theme import#4714
brennanb2025 wants to merge 5 commits into
mainfrom
brennanb2025/terminal-themes-integration

Conversation

@brennanb2025
Copy link
Copy Markdown
Contributor

@brennanb2025 brennanb2025 commented Jun 5, 2026

Summary

Adds Warp terminal theme import as durable Orca custom terminal themes:

  • Adds a canonical terminalCustomThemes settings model and custom:<id> terminal theme selections.
  • Adds a desktop Warp importer with packaged bundled themes, local auto-discovery, choose-file/folder preview, bounded recursive scanning, parser timeout isolation, sanitized skipped-file messages, and unsupported feature notes for Warp-only features such as images/gradients.
  • Adds Settings > Appearance UI next to Ghostty import, an import modal with searchable multi-select, and an Imported group in the terminal theme picker.
  • Keeps Ghostty import behavior intact while making bundled Warp themes available even when no local Warp theme files exist.

Design Review

Created scratch design doc at design-docs/warp-theme-import.md and ran the required design-review/fix subagent loop. Final design review returned clean after tightening the canonical custom theme model, privacy constraints, Warp/Ghostty coexistence, and import-only product decision.

Implementation Notes

Implementation follows the reviewed design with one intentional compatibility split: existing Ghostty import remains the current color-override flow, while Warp themes land in the new durable custom-theme list. Warp import supports Warp color fields, includes 19 bundled themes by default, and reports unsupported non-terminal-color features rather than attempting to recreate them.

Completeness Verification

Completeness verification subagent result: COMPLETE. No design-contract omissions remained after implementation.

Code Review Loop

Subagent review loop ran until both reviewers in the same current round returned clean.

Earlier rounds found and fixed actionable issues:

  • Cloned theme repository nested folder layouts were not discovered.
  • Select visible initially affected hidden filtered rows.
  • Folder scanning needed directory/entry budgets and then streaming opendir() to avoid full-folder materialization.
  • The modal had invalid nested interactive checkbox markup, then needed aria-pressed state.
  • Manual file selections over 200 themes needed a visible cap warning.
  • Folder cap warnings needed to avoid false positives for exact-cap imports and trailing non-theme files.
  • Auto-import needed bundled themes so users without local custom files do not hit a dead empty state.

Final same-round reviewers S and T both returned CLEAN.

Brennan Test Changes

brennan-test-changes verdict: land.

Validated in Electron from this exact worktree and branch:

  • Branch: brennanb2025/terminal-themes-integration
  • Root: /Users/thebr/orca/workspaces/orca/goosefish
  • Demo target: /Users/thebr/orca/workspaces/demo-project/test

UI/product validation:

  • Verified Settings > Appearance shows both Import from Ghostty and Import from Warp.
  • Verified Warp modal empty/default state with Choose File and Choose Folder.
  • Follow-up validation verified auto-preview returns 19 bundled themes when no local Warp theme folder exists, and the modal shows Found 19 themes in Warp bundled themes.
  • Created a temporary Warp YAML at ~/.warp/themes/orca-validation-warp-import-1883.yaml and imported it through real UI auto-discovery/import.
  • Verified imported theme appears under Imported in the terminal theme picker.
  • Selected it in the dark theme picker and confirmed backing state:
    • terminalCustomThemes[0].id = "warp:orca-validation-warp"
    • terminalThemeDark = "custom:warp:orca-validation-warp"

Screenshots captured locally and ignored by git:

  • validation-screenshots/warp-theme-import/appearance-import-controls.png
  • validation-screenshots/warp-theme-import/warp-import-empty-modal.png
  • validation-screenshots/warp-theme-import/warp-import-fixture-preview.png
  • validation-screenshots/warp-theme-import/imported-theme-picker-selected.png

Cleanup performed:

  • Removed temporary Warp YAML fixture.
  • Removed disposable Electron profile.
  • Stopped only the Electron process launched for validation.
  • Confirmed screenshots are ignored by .gitignore.

Tests

  • pnpm exec vitest run --config config/vitest.config.ts src/main/warp-themes/index.test.ts src/main/warp-themes/parser-runner.test.ts src/main/warp-themes/parser.test.ts src/main/warp-themes/discovery.test.ts src/shared/terminal-custom-themes.test.ts src/renderer/src/components/settings/TerminalAppearanceSection.ghostty.test.ts src/renderer/src/components/settings/AppearancePane.test.tsx src/renderer/src/components/settings/useWarpThemeImport.test.ts src/renderer/src/lib/terminal-theme.test.ts src/main/ipc/settings.test.ts src/main/warp-themes/bundled-themes.test.ts — 11 files / 69 tests passed
  • pnpm run typecheck
  • pnpm run lint — passed with existing React hook warnings
  • git diff --check
  • Electron validation with fresh screenshots

Accepted Gaps / Risks

  • Native file/folder dialogs were not driven through CDP; buttons were verified visible, and import was exercised through the same product scanning/parsing/settings path using Warp auto-discovery.
  • SSH/remoting was not live-tested because this feature does not directly touch remote runtime behavior.

Made with Orca 🐋

brennanb2025 and others added 5 commits June 5, 2026 13:02
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Orca <help@stably.ai>
- Use the real Warp brand mark for the import button instead of a generic palette icon
- Drop the in-modal theme search box; auto-import is a small bundled set
- Report import success via a toast and close the modal instead of inline status
- Scroll to and briefly highlight the Imported group in the theme picker after import
- Hide color swatches on the current/selected theme row so the grid doesn't shift
- Split the combined import action into focused GhosttyImportButton and WarpThemeImportButton:
  Ghostty (whole-config) stays in Typography; Warp (themes) moves beside the theme pickers

Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Orca <help@stably.ai>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant