Editor Config
Local writes only. It creates or merges .zed/ and .vscode/ files in the target repo.
It never stages, commits, pushes, or calls a remote service.
Purpose
Drop a small, opinionated set of editor configuration files into a project. The
skill is the source of truth — its bundled configs in assets/ are what
every target repo gets. To update the canonical configs, edit the files in this
skill and commit; the next run propagates the change everywhere else.
When to Use This Skill
Trigger phrases: "editor config", "editor-config", "init editor", "setup editor", "apply editor config", "sync editor config", "init zed", "init vscode", "set up .zed", "set up .vscode", "configure editor".
Canonical Set
Two editors, each with one or more target files:
| Editor | Target | Source |
|---|---|---|
| Zed | .zed/settings.json |
assets/zed/settings.json |
| VSCode | .vscode/settings.json |
assets/vscode/settings.json |
| VSCode | .vscode/extensions.json |
assets/vscode/extensions.json |
Sync Algorithm
For each target file:
- Missing in target → write our copy verbatim.
- Already exists in target →
settings.jsonfiles: deep-merge with our values winning every conflict. Keys the user has that we do not define are preserved.extensions.json: union therecommendationsandunwantedRecommendationsarrays. No duplicates, order preserved with our entries appended first.
Existing files are read tolerantly — // line comments and /* … */ block
comments (valid in JSONC) are stripped before parsing. The output is always
plain JSON.
The skill prints a per-file plan (Write, Merge, Identical) and asks for
confirmation before writing.
Edit mechanic
scripts/editor-config.sh owns every write to a target repo, and it generates each target
file whole from the merge result — that is correct here, because the merge already carries
the user's own keys forward. Do not hand-edit a target file instead of re-running the script.
Editing the canonical assets/ files is the opposite case: apply targeted edits per key, never
a whole-file rewrite, so the diff carries the key you changed and nothing else.
Asking the User
Every question in this skill is written as AskUserQuestion options. Use that tool where
the host offers it, or the host's nearest structured-choice equivalent. Where the host has
neither, ask the same question in normal chat as a numbered list of 2–5 options —
recommended first, one short line of description each — and wait for the user to reply
with a number.
Workflow
Determine editor selection.
If arguments include
zedand/orvscode, use those.Otherwise ask per Asking the User, accepting more than one pick:
Question: Which editor configs should I set up? Header: Editors Options: - Zed (Recommended) — Apply .zed/settings.json - VSCode — Apply .vscode/settings.json and .vscode/extensions.jsonIn chat, accept one or more numbers comma-separated (e.g.
1,2).
Run the apply script for each selection.
bash <skill-dir>/scripts/editor-config.sh [--dry-run] [--yes] <editor> [<editor> ...]<editor>is one ofzed,vscode. Flags:--dry-run— print the plan and exit--yes/-y— skip the per-run confirmation-h,--help— usage
Review the plan. The script prints
Target,Editors, then a per-file action (Write,Merge,Identical). Show that table and end the phase with one line carrying the counts:3 targets: 1 write, 1 merge, 1 identical.Confirm. Type
yto apply. Anything else aborts. AParseErrorrow blocks the whole run — report which file failed and stop; do not repair the file to get past it unless the user asks.Report the changed files the script lists, then stop. Do not stage or commit them, and do not reopen them to reformat.
Example plan
Target: /Users/edloidas/repo/voidvigil
Editors: zed vscode
Action File
------ ----
Merge .zed/settings.json
Write .vscode/settings.json
Identical .vscode/extensions.json
Then the phase line: 3 targets: 1 write, 1 merge, 1 identical.
Edge Cases
jqmissing. The script requiresjqfor parsing and merging. Install withbrew install jq(or your package manager).- JSONC with non-standard syntax. The comment stripper handles
//and/* … */. Trailing commas are not handled — if the existing file has them, the script reports a parse error and exits without writing. Remove trailing commas and re-run. - Existing
recommendationsarray contains a string we also define. The union de-duplicates by exact string match, so no double entries appear. - The user has set a key we also define to a different value. Ours wins —
this is the explicit design. If a user customization needs to survive,
remove that key from
assets/<editor>/settings.jsonin this skill (the canonical set).
Updating the Canonical Configs
The bundled files in assets/ are the source of truth. Edit them in place and
commit; the next run in any other repo picks up the new content.
When adding a brand-new target file:
- Drop the file into
assets/<editor>/. - Add a row to the Canonical Set table above.
- Extend the editor block in
scripts/editor-config.sh(theapply_<editor>function and theTARGETS_<EDITOR>array).
When adding a brand-new editor:
- Create
assets/<editor>/with the relevant files. - Add the editor to the script's
KNOWN_EDITORSlist and add anapply_<editor>function. - Add it to the Canonical Set table and the
AskUserQuestionoptions.