feat(helix): add a Helix setup shaped like the AstroNvim config - #16
Merged
Merged
Conversation
Herdr delivers HERDR_PLUGIN_EVENT_JSON as {"event": ..., "data": {...}},
with agent_status and pane_id inside data. The handler read them off the
top level, so every pane.agent_status_changed hook exited before naming
anything and tabs stayed numbered. Unwrap data when present, keeping the
flat shape as a fallback.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E6ZMPccKUq6uyexvfxSWaG
Helix 25.07 config and language wiring, linked at ~/.config/helix by the base layer. Motions and minor modes stay stock Helix; the Space leader mirrors the Neovim groups (f find, b buffers, l language tools, g git, u toggles, x diagnostics, a agents) plus Ctrl-s, ]b/[b and Esc collapsing to one cursor. Space a y copies a file:line reference for pasting at an agent, Space g g opens lazygit in a tmux popup, Space g b blames the line. languages.toml swaps in the servers Mason already installs for Neovim (vtsls, docker-language-server, ty and ruff) and wires the same formatters conform uses (prettier, stylua, shfmt). sh/helix.sh appends Mason's bin directory to PATH so Helix resolves them with no second install. editor.auto-format stays off as the master switch, matching g.autoformat in the Neovim config, with every formatted language opted in so Space u F flips them together. Two Helix quirks shaped the bindings: languages.toml merges only three levels deep, so the rust-analyzer config block is copied whole before adding clippy, and a :sh command expands its first word only when the whole word is an expansion, so Space a y parks its variables behind set --. Theme is silkcircuit-glow; the SilkCircuit installer owns the themes directory, which is why the two files are linked individually. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Adds docs/helix/ to the VitePress site with the structure, quick start, a coming-from-Neovim table, every Space group, the language server map and the gotchas the config works around. The README gains a Helix row in the core tools table and a line in the repository tree, and helix/ gets the short README the other tool directories carry. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Mode block with Nerd Font glyphs (terminal, pencil, select-all), the LSP spinner and git branch on the left with the file name and its state; buffer and workspace diagnostics, selection count and length, register, position and file type on the right, cyan bars between the sections. Helix takes the bar colours from the theme, so the matching surface and mode hues land in the SilkCircuit helix theme alongside this. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Helix gets a first-class seat next to Neovim: two TOML files linked at
~/.config/helix, the same language servers and formatters the AstroNvim config already installs, and a Space leader laid out the way AstroNvim taught these hands. Motions and the g, m and z minor modes stay stock Helix, because the select-then-act model is the reason to try the editor. What carries over is the muscle memory that has nothing to do with motions: the Space groups (find, buffers, language tools, git, toggles, diagnostics, agents), Ctrl-s,]band[b, and Esc collapsing back to one cursor.🛠️ How it works
Helix resolves servers by name on PATH, so
sh/helix.shappends Mason's bin directory and every server Neovim installed lights up with no second install: ty and ruff, vtsls, rust-analyzer, marksman, taplo, the yaml, json, css and html servers, tailwindcss and docker-language-server.helix/languages.tomlswaps in the two servers Helix does not define (vtsls, docker-language-server), trims the defaults that are not installed sohx --healthstays honest, and wires the same formatters conform uses (prettier, stylua, shfmt). Format-on-save is off by default likeg.autoformatin the Neovim config; every formatted language opts in, soSpace u Fflips them all together.The statusline follows the heirline layout: a mode block with Nerd Font glyphs and the LSP spinner, the git branch, file name and state on the left; buffer and workspace diagnostics, selection count and length, register, position and file type on the right. Helix paints the bar from theme scopes, so the matching colors land in the SilkCircuit helix theme (hyperb1iss/silkcircuit#27). Until that merges, the bar renders with the current SilkCircuit colors.
A few bindings work around Helix quirks worth knowing when reading the config:
Space a ycopiesfile:lineorfile:start-end:shexpands its first word only when the whole word is an expansion, so the variables sit behindset --Space g bblames the linegit blame -lprefixes boundary commits with^, so it reads--porcelainSpace f cgreps the word under the cursorlanguages.tomlmerges three levels deep, so the default config block is copied whole before addingcheck.commandDefining
Space aas the agents group replaces Helix's defaultSpace acode action; code actions live atSpace l a, as in AstroNvim.Space wsaves, so window mode isCtrl-w.🧪 Validation
Helix 25.07.1 was driven in a pty against the linked config with a committed scratch repo: clean boot with no config error,
:config-reloadreports "Config refreshed", the file, diagnostics and buffer pickers open, the toggles echo their new values,Space g bshows the commit in a popup,Space a yputsscratch.py:1andscratch.py:2-3on the clipboard (checked withpbpaste), andSpace f con a word lists both matching lines. The statusline renders asNORMAL main │ scratch.py │ 1 sel 1 char │ 1:1 14% │ pythonwith the pencil and select-all glyphs in insert and select mode, and the bufferline appears with a second buffer.hx --healthresolves servers and formatters for all 14 configured languages withsh/helix.shsourced.taplo check,shellint,prettier --check,markdownlintandpkg-sync listfor apt, ppa, pacman and winget all pass.An independent verification agent cross-checked every bound command and key name against the 25.07.1 static and typable command lists, every language and server name against the default
languages.toml, and simulated the depth-3 merge to confirm the rust-analyzer defaults survive. Its three findings (theSpace aclaim, the clobbered rust-analyzer block, and an overbroad:shrationale) are fixed in the branch.Not exercised: the Linux package paths (
ppa:maintainers/helix-editormay not publish arm64 builds, in which case apt falls back to the older universe package) and Windows via winget.📌 Follow-ups
The branch carries
8f32fa7(fix(moniker)), which sits unpushed on local main; once main is pushed it drops out of this diff. The vitepress config already failsprettier --checkon main and is left as found.🤖 Generated with Claude Code