Skip to content

Powerline font detection misses Nerd Fonts v3 names, the NF short form, and fonts in subfolders #738

Open

Description

@axisrow

What you see

With a Nerd Font v3 installed (the current Nerd Fonts release naming), the TUI's Powerline Setup reports Font Status: ✗ Not Installed - Press (i) to install Powerline fonts, and the status message says fonts are not detected — although the terminal draws the Powerline glyphs fine. The same font file is detected under its old v2 name; only its name differs:

C — before: the same font file under its v3 and v2 names

How to reproduce

  1. Put JetBrainsMonoNerdFont-Regular.ttf (Nerd Fonts v3, e.g. the Homebrew font-jetbrains-mono-nerd-font cask) in ~/Library/Fonts/ on macOS or ~/.local/share/fonts/ on Linux.
  2. Open the TUI → Powerline Setup: it reports "✗ Not Installed".
  3. Rename the same file to the old v2 style, JetBrains Mono Regular Nerd Font Complete.ttf, and the status flips to "✓ Installed".

Why

checkPowerlineFonts (src/utils/powerline.ts) is a top-level readdirSync of the font folders matched against file-name patterns. It misses common setups:

  • Nerd Fonts v3 file names have no space. /nerd font/i does not match JetBrainsMonoNerdFont-Regular.ttf, HackNerdFont-Regular.ttf or CaskaydiaCoveNerdFont-Regular.ttf.
  • The short v3 form is not matched either. JetBrainsMonoNF-Regular.ttf.
  • Fonts in subfolders are never seen. For example ~/.local/share/fonts/NerdFonts/..., /usr/share/fonts/TTF/..., or /usr/share/fonts/opentype/PowerlineSymbols.otf from the Debian fonts-powerline package.

This also affects the font-safe separator fallback proposed in #604: keyed on this detection, it would replace the Powerline glyphs with | for all of these setups. The fork hit exactly that after implementing the fallback (live repro and discussion: axisrow#62; the screenshot above is from there). The closed #56 is symptom-adjacent but has a different cause.

Fix

Proposed in a PR to follow immediately: match nerd ?font and an NF token, and scan the font folders recursively (depth-capped).

Follow-up (out of scope here)

  • Terminals with built-in Powerline glyphs (Ghostty, kitty, WezTerm) have no font file to find, so they will still be reported as "not installed". I don't have these terminals and can't verify such a change, so I'm leaving it to someone who does.
  • The two checks use different matchers. Powerline Setup shows the async fc-list | grep -i powerline status, while the sync file-name scan drives the rest; on a machine with both a Powerline-named font and a v3 Nerd Font the two places can disagree.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions