diff --git a/packages/opencode/src/cli/cmd/tui/app.tsx b/packages/opencode/src/cli/cmd/tui/app.tsx index 97c910a47d4..3da3558580e 100644 --- a/packages/opencode/src/cli/cmd/tui/app.tsx +++ b/packages/opencode/src/cli/cmd/tui/app.tsx @@ -256,6 +256,7 @@ function App() { renderer.clearSelection() } const [terminalTitleEnabled, setTerminalTitleEnabled] = createSignal(kv.get("terminal_title_enabled", true)) + const [sidebarClockEnabled, setSidebarClockEnabled] = createSignal(kv.get("sidebar_clock_visible", true)) createEffect(() => { console.log(JSON.stringify(route.data)) @@ -657,6 +658,19 @@ function App() { dialog.clear() }, }, + { + title: sidebarClockEnabled() ? "Hide sidebar clock" : "Show sidebar clock", + value: "system.toggle.sidebar_clock", + category: "System", + onSelect: (dialog) => { + setSidebarClockEnabled((prev) => { + const next = !prev + kv.set("sidebar_clock_visible", next) + return next + }) + dialog.clear() + }, + }, ]) createEffect(() => { diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx index 42ac5fbe080..178f33e81a3 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx @@ -1,5 +1,5 @@ import { useSync } from "@tui/context/sync" -import { createMemo, For, Show, Switch, Match } from "solid-js" +import { createMemo, For, Show, Switch, Match, createSignal, onMount, onCleanup } from "solid-js" import { createStore } from "solid-js/store" import { useTheme } from "../../context/theme" import { Locale } from "@/util/locale" @@ -67,6 +67,19 @@ export function Sidebar(props: { sessionID: string; overlay?: boolean }) { sync.data.provider.some((x) => x.id !== "opencode" || Object.values(x.models).some((y) => y.cost?.input !== 0)), ) const gettingStartedDismissed = createMemo(() => kv.get("dismissed_getting_started", false)) + const showSidebarClock = createMemo(() => kv.get("sidebar_clock_visible", true)) + + const formatTime = () => { + const now = new Date() + return now.toLocaleTimeString("en-GB", { hour: "2-digit", minute: "2-digit", hour12: false }) + } + + const [clockTime, setClockTime] = createSignal(formatTime()) + + onMount(() => { + const interval = setInterval(() => setClockTime(formatTime()), 10000) + onCleanup(() => clearInterval(interval)) + }) return ( @@ -307,13 +320,18 @@ export function Sidebar(props: { sessionID: string; overlay?: boolean }) { {directory().split("/").slice(0, -1).join("/")}/ {directory().split("/").at(-1)} - - Open - - Code - {" "} - {Installation.VERSION} - + + + Open + + Code + {" "} + {Installation.VERSION} + + + {clockTime()} + +