feat(desktop): add configurable terminal font picker - #76395
Merged
Conversation
…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
Contributor
૮ >ﻌ< ა ci reviewran on 7dc7adf ℹ️ InfoDesktop E2E visual evidence · View test artifacts · View job2 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) |
…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.
This was referenced Aug 1, 2026
Closed
19 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The desktop app's embedded terminals get a configurable font:
terminal.font_familyin 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.pysplit and newer terminal-hook imports resolved during salvage.Changes
apps/desktop:terminal-font.tsnormalization +useTerminalFontController+ Appearance picker component; wired into bothuse-terminal-sessionanduse-agent-terminal; i18n for 4 locales.hermes_cli/config_defaults.py:terminal.font_familykey (documented).tests: desktop font suites + backend config round-trip test.Validation
Infographic