diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx index 10e340d7f8f..e6c5cfa87aa 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -154,8 +154,12 @@ export function Session() { if (sidebar() === "auto" && wide()) return true return false }) + const sidebarOverlay = createMemo(() => { + if (sync.data.config.tui?.sidebar_overlay === false) return false + return sidebarVisible() && !wide() + }) const showTimestamps = createMemo(() => timestamps() === "show") - const contentWidth = createMemo(() => dimensions().width - (sidebarVisible() ? 42 : 0) - 4) + const contentWidth = createMemo(() => dimensions().width - (sidebarVisible() && !sidebarOverlay() ? 42 : 0) - 4) const scrollAcceleration = createMemo(() => { const tui = sync.data.config.tui diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts index ead3a0149b4..b916245aec5 100644 --- a/packages/opencode/src/config/config.ts +++ b/packages/opencode/src/config/config.ts @@ -770,6 +770,12 @@ export namespace Config { .enum(["auto", "stacked"]) .optional() .describe("Control diff rendering style: 'auto' adapts to terminal width, 'stacked' always shows single column"), + sidebar_overlay: z + .boolean() + .optional() + .describe( + "Enable sidebar overlay mode on narrow screens (default: true). Set to false to always show sidebar side-by-side with content", + ), }) export const Server = z diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts index e423fecea42..26870be1b55 100644 --- a/packages/sdk/js/src/v2/gen/types.gen.ts +++ b/packages/sdk/js/src/v2/gen/types.gen.ts @@ -1563,6 +1563,10 @@ export type Config = { * Control diff rendering style: 'auto' adapts to terminal width, 'stacked' always shows single column */ diff_style?: "auto" | "stacked" + /** + * Enable sidebar overlay mode on narrow screens (default: true). Set to false to always show sidebar side-by-side with content + */ + sidebar_overlay?: boolean } server?: ServerConfig /** diff --git a/packages/sdk/openapi.json b/packages/sdk/openapi.json index 367985e5d29..89840cbd5b5 100644 --- a/packages/sdk/openapi.json +++ b/packages/sdk/openapi.json @@ -9112,6 +9112,10 @@ "description": "Control diff rendering style: 'auto' adapts to terminal width, 'stacked' always shows single column", "type": "string", "enum": ["auto", "stacked"] + }, + "sidebar_overlay": { + "description": "Enable sidebar overlay mode on narrow screens (default: true). Set to false to always show sidebar side-by-side with content", + "type": "boolean" } } },