Tutorial

Make Sinclair yours: themes, fonts & appearance

This is the fun part. Everything that shapes how Sinclair looks — the theme, the colors, the typeface, the cursor, transparency, padding — is a plain line in your config file, and every one of them applies live the moment you save. No restart, no reload dance. Keep the file open in one pane, edit in another, and watch the window repaint as you type your way to a terminal that feels like yours.

Note

Settings live at ~/.config/sinclair/settings.json (or $XDG_CONFIG_HOME/sinclair/settings.json) — JSON with // comments. It's watched live — save and the change is on screen instantly. A bad line never aborts the load; it just becomes a diagnostic while the rest applies.

1. Pick a theme

Start with a base. The theme key takes any of Sinclair's 22 hand-tuned built-ins — a big enough library that you'll almost certainly find one you like before you touch a single color:

{ "theme": "tokyo night" }

Names are forgiving: they're case-insensitive and ignore spaces, dashes, and underscores, so tokyo night, tokyo-night, and TokyoNight all land on the same scheme. Prefer to point and click? The GUI settings (⌘,) include a theme picker that writes this exact key for you — same result, same live repaint. Here's the full set and the value to pass:

ThemeConfig value
Darkdark
Lightlight
Ayu Darkayu dark
Catppuccin Lattecatppuccin latte
Catppuccin Mochacatppuccin mocha
Draculadracula
Everforesteverforest
GitHub Darkgithub dark
GitHub Lightgithub light
Gruvbox Darkgruvbox dark
Gruvbox Lightgruvbox light
Kanagawakanagawa
Material Darkmaterial dark
Monokaimonokai
Nordnord
One Darkone dark
Palenightpalenight
Rose Pinerose pine
Solarized Darksolarized dark
Solarized Lightsolarized light
Tokyo Nighttokyo night
Zenburnzenburn
Tip

Cycle through a handful with the picker open — because the change is live, you're previewing the real thing in your real shell, not a swatch. When one clicks, its name is already written to your config.

2. Follow the OS light/dark automatically

If your desktop flips between light and dark through the day, Sinclair can follow it. Set theme-light and theme-dark to a scheme each, and Sinclair watches the OS appearance and rebuilds its colors live when it flips — picking the matching one, no restart and no manual toggle:

// ~/.config/sinclair/settings.json
{
  "theme-light": "github light",
  "theme-dark": "github dark"
}

Either key works on its own: whichever is set wins for that appearance, and plain theme is the fallback for the other. Set all three and you get a bright scheme by day, a dark one by night, and a safety net if neither matches.

3. Override individual colors

You don't have to take a theme as-is. These keys layer your own colors on top of the selected scheme, so you can start from a base you like and tweak only the parts that bug you:

KeyOverrides
backgroundWindow/terminal background color.
foregroundDefault text color.
cursor-colorCursor fill color.
cursor-textColor of text drawn under a block cursor.
selection-foregroundText color inside a selection.
selection-backgroundHighlight color of a selection.
split-divider-colorColor of the dividers between splits.
palette Repeatable. N=#rrggbb overrides a single ANSI index.

The palette key is the powerful one: it recolors a single ANSI slot, with N from 0–255 — 0–7 the standard colors, 8–15 the bright variants, 16–231 the 6×6×6 color cube, and 232–255 the grayscale ramp. Repeat it to remap as many slots as you want:

{
  // start from a base theme, then override
  "theme": "tokyo night",
  "background": "#0b0e14",
  "cursor-color": "#ffcc66",

  // recolor ANSI red (index 1) and bright black (index 8)
  "palette": ["1=#ff5555", "8=#5c6370"]
}

4. Fonts & ligatures

The font keys control the typeface, its size, and its OpenType behavior. The trick worth knowing: font-family is repeatable, and each entry builds a fallback chain — the first is your primary face, later ones cover glyphs it's missing (emoji, box-drawing, an odd symbol). List your favorite first, a dependable face second:

KeyMeaning
font-familyRepeatable. Each entry builds a fallback chain — the first is the primary face, later ones cover missing glyphs. Default Menlo.
font-sizePoint size. Default 13.
font-styleOne of normal, bold, italic, bold-italic.
font-featureRepeatable OpenType feature codes like +liga, -calt, ss01, or cv01=2, for ligatures and stylistic sets.
adjust-cell-widthNudge cell width in pixels. May be negative.
adjust-cell-heightNudge cell height in pixels. May be negative.
{
  "font-family": ["JetBrains Mono", "Menlo"],
  "font-size": 14,
  "font-style": "normal",
  "font-feature": ["+liga", "cv01=2"],
  "adjust-cell-height": 2
}

font-feature is where a font's personality lives. Turn ligatures on with +liga (or off with -calt), switch on a stylistic set like ss01, or pick a character variant with cv01=2 — one feature per line, repeat as needed. If the cell metrics feel a touch tight or loose for your face, adjust-cell-width and adjust-cell-height nudge them by a pixel or two (either can go negative).

Note

Emoji and programming ligatures are both supported — turn ligatures on (or off) per font with font-feature.

5. Cursor

Small detail, big difference in how the terminal feels to type in. Four keys shape the cursor's shape, blink, and color:

KeyMeaning
cursor-styleOne of block, bar, underline.
cursor-style-blinkBoolean. Whether the cursor blinks.
cursor-colorCursor fill color.
cursor-textColor of the character under a block cursor.
{
  "cursor-style": "bar",
  "cursor-style-blink": true,
  "cursor-color": "#ffcc66",
  "cursor-text": "#0b0e14"
}

Go block for the classic terminal look, bar for an editor feel, or underline for something quieter. If you pick a bold cursor-color with a block cursor, set cursor-text to keep the character it sits on readable against the fill.

6. Transparency, background image & readability

A few keys shape the terminal surface itself. This is where a setup goes from "nice theme" to "that's my terminal":

// ~/.config/sinclair/settings.json
{
  "background-opacity": 0.85,
  "background-image": "~/Pictures/wallpaper.png",
  "minimum-contrast": 4.5,
  "badge": "{host} · {cwd}"
}
Tip

Transparency and a background image look great right up until text vanishes over a bright patch. minimum-contrast is the fix — set it to 4.5 and every cell is forced to stay legible no matter what's showing through behind it.

7. Padding & polish

Last, the finishing touches — the spacing and rendering options that make the whole thing feel deliberate:

KeyMeaning
window-padding-xHorizontal inner padding in pixels. Default 2.
window-padding-yVertical inner padding in pixels. Default 2.
unfocused-split-opacityOpacity of splits that don't have focus, 0.151.0. Default 0.7.
bold-is-brightBoolean. Render bold text using the bright color variant.
{
  "window-padding-x": 8,
  "window-padding-y": 6,
  "unfocused-split-opacity": 0.6,
  "bold-is-bright": true
}

A little breathing room goes a long way — bump window-padding-x and window-padding-y up from their default of 2 so text isn't jammed against the window edge. Lower unfocused-split-opacity to make the active pane pop harder when you're working in a grid of splits. And bold-is-bright gives bold text extra punch by rendering it in the bright color variant — a classic terminal look that reads well against most themes.

Where to next