Skip to content

feat(desktop): add configurable terminal font picker - #76395

Merged
teknium1 merged 4 commits into
mainfrom
salvage/pr70925-font-picker
Aug 1, 2026
Merged

feat(desktop): add configurable terminal font picker#76395
teknium1 merged 4 commits into
mainfrom
salvage/pr70925-font-picker

Conversation

@teknium1

@teknium1 teknium1 commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

Summary

The desktop app's embedded terminals get a configurable font: terminal.font_family in config.yaml plus a Settings → Appearance picker with installed-font suggestions, glyph preview, and live repaint without a PTY restart. Previously the font stack was hardcoded in both terminal hooks, so Nerd Font users (Powerlevel10k etc.) got tofu boxes with no recourse (#64790, #37566).

The chosen font is always followed by the bundled JetBrains Mono stack, so a missing font never breaks rendering; empty keeps the default. The key is profile-scoped and round-trips through the dashboard config API without clobbering sibling terminal settings.

Salvaged from #70925 by @Zeraphim with authorship preserved (3 commits cherry-picked onto current main, including the original #49592 base by @baoyu0 — both credited). Conflicts with the extracted config_defaults.py split and newer terminal-hook imports resolved during salvage.

Changes

  • apps/desktop: terminal-font.ts normalization + useTerminalFontController + Appearance picker component; wired into both use-terminal-session and use-agent-terminal; i18n for 4 locales.
  • hermes_cli/config_defaults.py: terminal.font_family key (documented).
  • tests: desktop font suites + backend config round-trip test.
  • Docs: configuration.md section.

Validation

Result
Desktop vitest (5 font/config files) 21/21 pass
tests/hermes_cli/test_web_server.py 114/114 pass
Missing font configured falls back to bundled stack

Infographic

terminal font picker

baoyu0 and others added 3 commits August 1, 2026 13:24
…amily in config.yaml)

Adds a new config option terminal.font_family that lets users customize the
CSS font-family for the desktop app's embedded xterm.js terminal.

Previously the font was hardcoded in use-terminal-session.ts:
  'JetBrains Mono', 'Cascadia Code', 'SF Mono', Menlo, Consolas, monospace

Now the value from config.yaml (terminal.font_family) is threaded through:
  useHermesConfig → PersistentTerminal → TerminalTab → useTerminalSession

When font_family is empty or unset (default), the built-in fallback is used,
preserving backward compatibility. Users with Nerd Fonts installed (e.g.
CaskaydiaCoveNerdFont) can now set:

  terminal:
    font_family: 'CaskaydiaCoveNerdFont', 'JetBrains Mono', monospace

Closes: #terminal-font-config
@github-actions

github-actions Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

૮ >ﻌ< ა ci review

ran on 7dc7adf

ℹ️ Info

Desktop E2E visual evidence · View test artifacts · View job

2 visual diffs.

inline evidence upload failed.

Failed to upload diff-1508682a2ae8-boot-ready-diff.png with gh image (exit code 1): Error uploading /home/runner/work/_temp/e2e-evidence/diff-1508682a2ae8-boot-ready-diff.png: step 0 (get upload token): uploadToken not found on repo page — do you have write access to NousResearch/hermes-agent? (or, if NousResearch enforces SAML SSO, authorize at https://github.com/orgs/NousResearch/sso)

@alt-glitch alt-glitch added type/feature New feature or request P3 Low — cosmetic, nice to have comp/desktop Electron desktop app (apps/desktop/*) comp/cli CLI entry point, hermes_cli/, setup wizard area/config Config system, migrations, profiles sweeper:risk-compatibility Sweeper risk: may break existing users, config, migrations, defaults, or upgrades labels Aug 1, 2026
…t a mirrored ref

The desktop lint rule added after the original PR bans mirroring reactive
values into refs via useEffect. Rework the setting to seed from draft-null
state, guard profile switches by stale-config identity, and derive the
save base + rollback value from the shared config record instead of
latestConfigRef/lastSavedRef/seededRef.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/config Config system, migrations, profiles comp/cli CLI entry point, hermes_cli/, setup wizard comp/desktop Electron desktop app (apps/desktop/*) P3 Low — cosmetic, nice to have 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.

4 participants