From c686382b909dfeac71f2d4a39c6073b8deb1285f Mon Sep 17 00:00:00 2001 From: Dao Hoang Son Date: Mon, 26 Jan 2026 11:16:54 +0700 Subject: [PATCH 1/2] feat(desktop): add Ghostty terminal support Add Ghostty as an option in the "Open in" menu alongside iTerm, Warp, and Terminal. Logo from https://github.com/ghostty-org/website/blob/28f1a1f/public/ghostty-logo.svg --- apps/desktop/src/lib/trpc/routers/external/helpers.ts | 1 + apps/desktop/src/renderer/assets/app-icons/ghostty.svg | 7 +++++++ .../src/renderer/components/OpenInButton/OpenInButton.tsx | 2 ++ packages/local-db/src/schema/zod.ts | 1 + 4 files changed, 11 insertions(+) create mode 100644 apps/desktop/src/renderer/assets/app-icons/ghostty.svg diff --git a/apps/desktop/src/lib/trpc/routers/external/helpers.ts b/apps/desktop/src/lib/trpc/routers/external/helpers.ts index 8baa24a9f00..6e8a09d5c0a 100644 --- a/apps/desktop/src/lib/trpc/routers/external/helpers.ts +++ b/apps/desktop/src/lib/trpc/routers/external/helpers.ts @@ -13,6 +13,7 @@ const APP_NAMES: Record = { iterm: "iTerm", warp: "Warp", terminal: "Terminal", + ghostty: "Ghostty", sublime: "Sublime Text", intellij: "IntelliJ IDEA", webstorm: "WebStorm", diff --git a/apps/desktop/src/renderer/assets/app-icons/ghostty.svg b/apps/desktop/src/renderer/assets/app-icons/ghostty.svg new file mode 100644 index 00000000000..a4b0637b0ef --- /dev/null +++ b/apps/desktop/src/renderer/assets/app-icons/ghostty.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/desktop/src/renderer/components/OpenInButton/OpenInButton.tsx b/apps/desktop/src/renderer/components/OpenInButton/OpenInButton.tsx index cdd30c5eebd..e98e8717df9 100644 --- a/apps/desktop/src/renderer/components/OpenInButton/OpenInButton.tsx +++ b/apps/desktop/src/renderer/components/OpenInButton/OpenInButton.tsx @@ -21,6 +21,7 @@ import cursorIcon from "renderer/assets/app-icons/cursor.svg"; import datagripIcon from "renderer/assets/app-icons/datagrip.svg"; import finderIcon from "renderer/assets/app-icons/finder.png"; import fleetIcon from "renderer/assets/app-icons/fleet.svg"; +import ghosttyIcon from "renderer/assets/app-icons/ghostty.svg"; import golandIcon from "renderer/assets/app-icons/goland.svg"; import intellijIcon from "renderer/assets/app-icons/intellij.svg"; import itermIcon from "renderer/assets/app-icons/iterm.png"; @@ -57,6 +58,7 @@ export const APP_OPTIONS: AppOption[] = [ { id: "iterm", label: "iTerm", icon: itermIcon }, { id: "warp", label: "Warp", icon: warpIcon }, { id: "terminal", label: "Terminal", icon: terminalIcon }, + { id: "ghostty", label: "Ghostty", icon: ghosttyIcon }, ]; export const VSCODE_OPTIONS: AppOption[] = [ diff --git a/packages/local-db/src/schema/zod.ts b/packages/local-db/src/schema/zod.ts index 6c0374c4b29..ee2338fec13 100644 --- a/packages/local-db/src/schema/zod.ts +++ b/packages/local-db/src/schema/zod.ts @@ -87,6 +87,7 @@ export const EXTERNAL_APPS = [ "iterm", "warp", "terminal", + "ghostty", // JetBrains IDEs "intellij", "webstorm", From 121db35553085335d3e635e72fd95a3800043d9c Mon Sep 17 00:00:00 2001 From: Dao Hoang Son Date: Mon, 26 Jan 2026 11:23:16 +0700 Subject: [PATCH 2/2] test(desktop): add Ghostty command test --- .../desktop/src/lib/trpc/routers/external/helpers.test.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/apps/desktop/src/lib/trpc/routers/external/helpers.test.ts b/apps/desktop/src/lib/trpc/routers/external/helpers.test.ts index bee93198263..a7b4197132c 100644 --- a/apps/desktop/src/lib/trpc/routers/external/helpers.test.ts +++ b/apps/desktop/src/lib/trpc/routers/external/helpers.test.ts @@ -64,6 +64,14 @@ describe("getAppCommand", () => { }); }); + test("returns correct command for ghostty", () => { + const result = getAppCommand("ghostty", "/path/to/file"); + expect(result).toEqual({ + command: "open", + args: ["-a", "Ghostty", "/path/to/file"], + }); + }); + describe("JetBrains IDEs", () => { test("returns correct command for intellij", () => { const result = getAppCommand("intellij", "/path/to/file");