Skip to content

Commit c24b0d0

Browse files
committed
feat(ui): add default terminal to settings
1 parent fe57501 commit c24b0d0

File tree

2 files changed

+49
-2
lines changed

2 files changed

+49
-2
lines changed

apps/desktop/src/components/profileSettings/GeneralSettings.svelte

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@
77
import { SETTINGS_SERVICE } from '$lib/config/appSettingsV2';
88
import { showError } from '$lib/notifications/toasts';
99
import { PROJECTS_SERVICE } from '$lib/project/projectsService';
10-
import { SETTINGS, type CodeEditorSettings } from '$lib/settings/userSettings';
10+
import {
11+
SETTINGS,
12+
type CodeEditorSettings,
13+
type TerminalSettings
14+
} from '$lib/settings/userSettings';
1115
import { UPDATER_SERVICE } from '$lib/updater/updater';
1216
import { USER_SERVICE } from '$lib/user/userService';
1317
@@ -58,6 +62,19 @@
5862
label: option.displayName,
5963
value: option.schemeIdentifer
6064
}));
65+
const terminalOptions: TerminalSettings[] = [
66+
{ appName: 'Terminal.app', displayName: 'Terminal' },
67+
{ appName: 'Ghostty.app', displayName: 'Ghostty' },
68+
{ appName: 'Warp.app', displayName: 'Warp' },
69+
{ appName: 'iTerm.app', displayName: 'iTerm 2' },
70+
{ appName: 'Alacritty.app', displayName: 'Alacritty' },
71+
{ appName: 'WezTerm.app', displayName: 'WezTerm' },
72+
{ appName: 'Hyper.app', displayName: 'Hyper' }
73+
];
74+
const terminalOptionsForSelect = terminalOptions.map((option) => ({
75+
label: option.displayName,
76+
value: option.appName
77+
}));
6178
6279
$effect(() => {
6380
if ($user && !loaded) {
@@ -201,6 +218,30 @@
201218
{/snippet}
202219
</SectionCard>
203220

221+
<SectionCard orientation="row" centerAlign>
222+
{#snippet title()}
223+
Default terminal
224+
{/snippet}
225+
{#snippet actions()}
226+
<Select
227+
value={$userSettings.defaultTerminal.appName}
228+
options={terminalOptionsForSelect}
229+
onselect={(value) => {
230+
const selected = terminalOptions.find((option) => option.appName === value);
231+
if (selected) {
232+
userSettings.update((s) => ({ ...s, defaultTerminal: selected }));
233+
}
234+
}}
235+
>
236+
{#snippet itemSnippet({ item, highlighted })}
237+
<SelectItem selected={item.value === $userSettings.defaultTerminal.appName} {highlighted}>
238+
{item.label}
239+
</SelectItem>
240+
{/snippet}
241+
</Select>
242+
{/snippet}
243+
</SectionCard>
244+
204245
<SectionCard labelFor="disable-auto-checks" orientation="row">
205246
{#snippet title()}
206247
Automatically check for updates

apps/desktop/src/lib/settings/userSettings.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ export type CodeEditorSettings = {
99
schemeIdentifer: string;
1010
displayName: string;
1111
};
12+
export type TerminalSettings = {
13+
appName: string;
14+
displayName: string;
15+
};
1216

1317
export interface Settings {
1418
aiSummariesEnabled?: boolean;
@@ -30,6 +34,7 @@ export interface Settings {
3034
inlineUnifiedDiffs: boolean;
3135
diffContrast: 'light' | 'medium' | 'strong';
3236
defaultCodeEditor: CodeEditorSettings;
37+
defaultTerminal: TerminalSettings;
3338
}
3439

3540
const defaults: Settings = {
@@ -50,7 +55,8 @@ const defaults: Settings = {
5055
diffLigatures: false,
5156
inlineUnifiedDiffs: false,
5257
diffContrast: 'light',
53-
defaultCodeEditor: { schemeIdentifer: 'vscode', displayName: 'VSCode' }
58+
defaultCodeEditor: { schemeIdentifer: 'vscode', displayName: 'VSCode' },
59+
defaultTerminal: { appName: 'Terminal.app', displayName: 'Terminal' }
5460
};
5561

5662
export function loadUserSettings(): Writable<Settings> {

0 commit comments

Comments
 (0)