vscode-theme-to-zed
Installation
SKILL.md
VS Code theme to Zed
- Locate the extension. Check
~/.vscode/extensionsand theextensionsfolders under.cursor,.vscode-insidersand.windsurfin the home folder. Themes are listed inpackage.jsoncontributes.themes[](label;uiTheme:vs/hc-light= light, else dark;path). - Zed's importer is not a shipped CLI command. Write a small Python converter that produces one family file:
{"$schema":"https://zed.dev/schema/themes/v0.2.0.json","name","author","themes":[{"name","appearance","style"}]}. Call the Skill tool with "scratchpad" and keep the converter there, taking<extension dir> <output json>as arguments, so it can be rerun for other themes. - UI mapping: each Zed key maps to an ordered list of VS Code
colorskeys (first present wins). Key pairs:backgroundfrom sideBar.background,editor.background,editor.active_line.backgroundfrom editor.lineHighlightBackground,element.hoverfrom list.hoverBackground,element.selectedfrom list.activeSelectionBackground,textfrom foreground,text.mutedfrom descriptionForeground,status_bar/title_bar/tab_bar/tab.*,terminal.ansi.{color}/bright_{color}from terminal.ansi{Cap}/ansiBright{Cap},error/warning/info/hint,created/modified/deletedfrom gitDecoration.,version_control.*from editorGutter.. Setborder.transparentandghost_element.backgroundto#00000000. - Syntax: flatten
tokenColors(a scope may be a comma-separated string or an array), then pick the longest-prefix match on simple selectors for each Zed capture (comment, keyword, string, function, type, constant, property, variable, tag, attribute, punctuation.*, title, link_uri, and so on).fontStyleitalic becomesfont_style: "italic"; bold becomesfont_weight: 700. - Build
players[0]from editorCursor.foreground and editor.selectionBackground; build extra players andaccentsfromeditorBracketHighlight.foreground1..6. - Write to
~/.config/zed/themes/<name>.json(hot-reloaded). Validate that every color string matches^#[0-9A-Fa-f]{6}([0-9A-Fa-f]{2})?$, and grep~/Library/Logs/Zed/Zed.logfor theme errors. - Tell the user the limits: semanticTokenColors and descendant-scope rules are not ported, and tree-sitter captures are coarser than TextMate scopes.