Skip to content

feat(desktop): add polished cmux theme - #49958

Open
namredips wants to merge 1 commit into
NousResearch:mainfrom
namredips:feat/desktop-cmux-theme-polish
Open

feat(desktop): add polished cmux theme#49958
namredips wants to merge 1 commit into
NousResearch:mainfrom
namredips:feat/desktop-cmux-theme-polish

Conversation

@namredips

Copy link
Copy Markdown
Contributor

Summary

  • add a built-in cmux desktop theme with black chat surface, terminal-green prose, brighter green emphasis, lavender inline code, dark olive sidebars, and colored statusbar tones
  • add fallback-safe optional theme tokens for emphasis text, sidebar nav/group/session colors, backdrop opacity, and statusbar item tones
  • make Shiki code highlighting theme-aware so cmux fenced code blocks use an everforest-dark palette instead of the default blue-heavy theme

Validation

  • cd apps/desktop && npx tsc -p . --noEmit
  • cd apps/desktop && npx eslint src/components/chat/shiki-highlighter.tsx src/themes/context.tsx src/themes/presets.ts src/themes/types.ts src/app/chat/sidebar/index.tsx src/app/shell/sidebar-label.tsx src/components/assistant-ui/markdown-text.tsx src/app/chat/sidebar/session-row.tsx src/app/shell/hooks/use-statusbar-items.tsx src/app/shell/statusbar-controls.tsx src/components/Backdrop.tsx (passes; pre-existing warning at src/app/chat/sidebar/index.tsx:536)
  • cd apps/desktop && npx vitest run --environment jsdom src/themes/
  • hermes desktop --build-only --force-build
  • extracted packed app.asar and verified cmux/token markers are present

Stack note: this is intentionally separate from #49902 (text size + chat width). This PR is only theme/chrome polish.

@alt-glitch alt-glitch added type/feature New feature or request comp/tui Terminal UI (ui-tui/ + tui_gateway/) P3 Low — cosmetic, nice to have comp/desktop Electron desktop app (apps/desktop/*) and removed comp/tui Terminal UI (ui-tui/ + tui_gateway/) labels Jun 21, 2026

@teknium1 teknium1 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the focused desktop-theme contribution. The cmux preset is still absent from current main (apps/desktop/src/themes/presets.ts:280-289), so the feature remains relevant.

Problems

  • sidebarWorkspaceForeground is defined and assigned by this PR, but workspace labels still inherit --ui-text-secondary: the shared rowLabel is defined in apps/desktop/src/app/chat/sidebar/chrome.tsx:31, and apps/desktop/src/app/chat/sidebar/projects/overview-row.tsx:130-136 does not override it. The requested blue workspace/profile names will therefore not render.
  • The new optional-token cleanup in apps/desktop/src/themes/context.tsx has no regression coverage. apps/desktop/src/themes/profile-theme.test.ts verifies preference persistence, not CSS-variable cleanup after a theme switch.

Suggested changes

  • Route workspace/profile row labels through --ui-sidebar-workspace-foreground, retaining the existing secondary-text fallback.
  • Add a jsdom test that verifies optional theme variables are removed when switching from cmux to a theme that omits them.

The PR is currently marked dirty and postdates a desktop TypeScript conversion (39d09453f), so salvaging it will require conflict-aware integration rather than a clean cherry-pick.

Automated hermes-sweeper review.

// section headers, blue profile/workspace names, dim-white child rows.
sidebarBackground: '#0d170d',
sidebarBorder: '#1f2d1f',
sidebarHeadingForeground: '#ffffff',

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sidebarWorkspaceForeground is not consumed by the workspace-row path: SidebarRowLink inherits rowLabel from sidebar/chrome.tsx, which remains text-(--ui-text-secondary). Please wire this token into that consumer (with the existing value as fallback), otherwise this cmux color has no visible effect.

@teknium1 teknium1 added sweeper:risk-compatibility Sweeper risk: may break existing users, config, migrations, defaults, or upgrades sweeper:blast-moderate Sweeper blast radius: moderate — a subsystem or single platform labels Jul 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp/desktop Electron desktop app (apps/desktop/*) P3 Low — cosmetic, nice to have sweeper:blast-moderate Sweeper blast radius: moderate — a subsystem or single platform sweeper:risk-compatibility Sweeper risk: may break existing users, config, migrations, defaults, or upgrades type/feature New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants