Choosing a font was a five-stage terminal UI: fetch the list, scroll it,
download, unzip, install. It pulled bubbletea, lipgloss, bubbles and a
fuzzy matcher for what amounted to a non-filtering list of names with
one highlighted - and Go runs a linked package's init before main
whether or not the subcommand was invoked, so everyone typing at a
prompt paid for it on every render.
A CLI already has a way to answer "which fonts are there": print them.
oh-my-posh font list
oh-my-posh font install Meslo
The list can be grepped, piped and scripted, none of which a picker
allows, and install is what it always was underneath - resolve, fetch,
unzip - now reporting on a status line and a progress bar.
Removes 20 modules including go-runewidth, whose package init built a
2.2MB lookup table nothing in the prompt path ever read. The
atotto/clipboard fork this repo carried goes with them: bubbletea was
the only thing that needed it.
Binary 17,330,176 to 15,981,056 bytes (-7.8%). Init, median of 11 runs,
39.3ms to 6.8ms - on every invocation, prompt renders included.
BREAKING CHANGE: `oh-my-posh font install` now requires a font name; run
`oh-my-posh font list` to see them. The interactive picker is gone, and
with it the --headless flag, which existed to skip it.
Entire-Checkpoint: ef231d69c9bf
The badge linked to a listing that is no longer the recommended way to
install on Windows; winget is. Removing it takes the two SVG assets
with it.
Entire-Checkpoint: fdf9cbbb3842
The site asked visitors to read a wall of segment pages to find out
what oh-my-posh could do, and to install it before seeing a prompt.
The homepage now leads with the install command and a rendered prompt.
Every one of the 117 segments is in a searchable catalog generated from
the docs themselves, so it cannot drift from what ships, and each
segment page carries a preview rendered from committed sample data at
build time. The theme gallery inlines the SVGs from the previous
commits instead of loading screenshots.
The studio renders a config live in the browser through the wasm
module, and each segment page embeds the same editor: change the
sample config, watch the prompt redraw, then send the segment to the
studio to build a full theme out of it. Nothing is sent anywhere.
The docs move into one shell around all of it, on a single type and
spacing scale, with a filterable sidebar.
Entire-Checkpoint: dc6fc3bdbdf2
The PNG exporter rasterized the prompt itself: it re-parsed the ANSI
string, resolved fonts, drew glyphs, and blurred a drop shadow, all to
produce a bitmap that could not be searched, selected, restyled or
scaled. It also carried image and font dependencies for that one
command.
A new svg package encodes the run stream from the terminal writer
(see the previous commit) into a terminal window drawn as vectors:
rounded frame, traffic lights, and one <text> per styled run. Text
stays text.
Everything after the first cut is a rendering fix found by comparing
real themes against what a terminal shows: transparent runs painted as
a cutout rather than a hole, wide glyphs given the room they ink, the
grid taken from the font's own metrics instead of the retired
renderer's picture, template whitespace preserved, the Mono Nerd Font
variants asked for first so icons advance one cell, the cursor placed
where the shell leaves it rather than after the right prompt, short
hex colours resolved, and a segment background ending where its
separator does. The canvas is now the window itself, with no
transparent gutter around it.
BREAKING CHANGE: `oh-my-posh config export image` writes SVG only. The
`--author`, `--background-color`, `--cursor-padding`, `--rprompt-offset`
and `--settings` flags are gone, as is PNG output; a command line using
them now fails rather than quietly producing something different.
Entire-Checkpoint: f6059ae8893a
Replace non-existent async_timeout with the correct top-level async:true
config setting. Reword the remote URL note to reflect ETag caching behaviour
instead of implying a full download on every shell start.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
SKILL.md is the convention for skill-creator; rename to match.
Also update all internal links and skill.md/llms.txt references.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Three eval cases covering Windows/PowerShell install, macOS/zsh install,
and post-install theme configuration with assertions that match the
corrected skill content.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Remove \ (variable no longer exists); show
plain local path examples instead
- Correct oh-my-posh debug description: it renders the current
config in debug mode, not a theme browser; move to its own section
- Remove incorrect bash troubleshooting from macOS/zsh guide
- Expand MCP validation section to mention validate_segment tool
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Move logMessage after null-guard to prevent TypeError on empty body
- Add message.params null-guard before destructuring (InvalidParams)
- Deduplicate tools array into module-level TOOLS constant
- Remove error.message from 500 response to prevent internal leaks
- Add .well-known/mcp.json for standard MCP agent discovery
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Remove AllUsers parameter (MSIX installs for current user only)
- Change from MSI to MSIX installers (install-x64.msix and install-arm64.msix)
- Update download URL to GitHub releases instead of CDN
- Restrict support to x64 and ARM64 architectures only
- Use Add-AppxPackage for current user installation