vmux
AppsvmuxPhone

Themes and Fonts

Theme picker, importing VSCode themes from Files, Nerd Fonts, weight, and size.

Themes

vmuxPhone uses the same VSCode-compatible theme parser as the rest of the family. A theme is a .json file that defines an ANSI 16-color palette, a foreground, a background, a cursor color, and a few selection colors. vmuxPhone ships a curated set of dark and light themes — Ghostty, Solarized Dark, Solarized Light, Phosphor Green, Tokyo Night, Catppuccin, Dracula, GitHub Dark, GitHub Light, Nord, and several others.

Pick a theme

Open the round menu in the terminal toolbar and tap Themes…. The theme picker sheet has two sections — Dark and Light — and a search field at the top. Each row shows:

  • The theme name.
  • A label indicating Dark or Light.
  • Four small color swatches taken from the first four ANSI colors, so you can preview the palette without applying it.
  • A green check mark on the row that is currently active.

Tap a row to apply the theme. The terminal redraws on the next frame; there is no confirmation step.

The selected theme is stored in UserDefaults under vmuxPhone.selectedThemeName and persists across launches. It applies to every window — there is no per-window theme override.

Search and filter

The picker has a searchable field with Filter themes as the placeholder. Typing narrows both sections to themes whose names match the search text. Clearing the field shows everything again.

Light vs dark

vmuxPhone does not auto-switch themes based on the iOS appearance setting in this release. You pick one and it stays. To rotate themes by mood, you can keep two favorites and swap manually — the picker is one tap deep from the menu.

Glass and themes

The glass background sits over the terminal background color. Themes with a darker background (#000000, deep blues, dark grays) tend to work better with glass than themes with a near-white background, because the glass material assumes there is luminance behind it. If a light theme looks washed out, lower the Background Opacity slider in Appearance until the glass effect is more subtle.

Importing themes from Files

The vmuxPhone theme store has a built-in importer for VSCode .json themes. The flow is:

  1. Open the Files app on your iPhone (or your Mac, if you AirDrop).
  2. Get the theme .json onto the device — drag it into the vmux folder under On My iPhone → vmux, or save it from a browser download, or AirDrop it.
  3. In vmuxPhone, open the theme picker. The new theme appears in the appropriate section automatically.

The parser is permissive and handles most VSCode themes from the Marketplace. If a theme imports without colors or with broken colors, the most common cause is that the file references token colors only and has no top-level colors block — vmuxPhone needs both because it draws the terminal, not source code.

To remove an imported theme, delete the file from On My iPhone → vmux. The picker no longer shows it on next open.

Nerd Fonts

Nerd Fonts are programming fonts patched with a glyph set that covers powerline symbols, file-type icons, weather icons, and a long tail of UI glyphs. vmuxPhone uses Nerd Fonts so that your remote shell prompt, lsd, eza, lazygit, bat, and similar tools render with the icons their authors intended.

Pick a font

Open the Appearance sheet from the round menu in the terminal toolbar, then tap the Font picker. The system font picker opens, filtered to monospaced fonts. Pick one and tap Done.

Pre-installed fonts

vmuxPhone bundles a small set of Nerd Fonts so that the terminal looks complete the moment you install:

FontNotes
JetBrains Mono Nerd FontDefault. Programmatic ligatures supported.
Iosevka Nerd FontNarrower glyphs, dense layout.
Fira Code Nerd FontLigature-heavy.
Hack Nerd FontCompact, classic.

Install your own font

Bring your own Nerd Font through the iOS font installation flow:

  1. Download the .ttf or .otf file in Files or Safari.
  2. Tap the file. iOS asks if you want to Install Profile.
  3. After installation, the font is system-wide. Open vmuxPhone, Appearance → Font, and pick the new font from the picker.

This is the same flow used by every iOS font app. There is no in-app font sideload, by design — Apple gates font installation through the system profile flow.

Font weight

The Appearance sheet has a Weight picker with two values: Regular and Bold. The picker affects the terminal's baseline weight; remote bold attribute (\e[1m) still renders bolder than regular.

If a font does not have a true bold cut, vmuxPhone synthesizes one. Synthetic bold is recognizable as a slightly heavier outline.

Font size

The Font Size slider runs from 8 pt to 32 pt. The default is 15 pt on iPhone (a touch larger than the visionOS default of 14 pt to compensate for the closer viewing distance).

You can also zoom interactively:

  • Two-finger pinch on the terminal — single-step zoom in or out.
  • Pinch on a paired Magic Trackpad — same.
  • The font size persists in UserDefaults and applies on next connect.

There is no per-host font size override yet.

Character and line spacing

Found in the Appearance sheet:

SettingRangeDefault
Character Spacing0.80 – 1.50 multiplier1.00
Line Spacing0.80 – 2.00 multiplier1.00

These multiply the natural advance of the chosen font. The renderer rebuilds the glyph atlas in place when you move the slider, so feedback is immediate.

Color rendering

vmuxPhone advertises 24-bit color through COLORTERM=truecolor by default. If a remote tool mishandles 24-bit color (some legacy vim color schemes do), open Appearance and turn off Send COLORTERM. The terminal will still render 24-bit colors locally — the toggle just controls what is announced to the remote.

The 16-color ANSI palette is taken from the active theme. The 256-color palette is a standard fixed table. 24-bit colors come from escape sequences without any quantization.

Cursor

The cursor follows the terminal theme's cursor color. You can change shape and blink in the Appearance sheet:

SettingValuesDefault
Cursor StyleBlock, Hollow Block, Underline, BarBlinking Block
Blink CursorOn / OffOn

Programs that change the cursor at runtime (vim insert mode, htop selection) override the setting for the duration of their session and restore it on exit.