Skip to content

feat(nvf): add the nvf integration - #99

Merged
clhodapp merged 1 commit into
feat/treefmtfrom
feat/nvf
Oct 18, 2026
Merged

clhodapp merged 1 commit into
feat/treefmtfrom
feat/nvf

Conversation

@clhodapp

@clhodapp clhodapp commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Adds caisson.nvf, in which caisson evaluates nvf's modules itself. This PR is based on #98 in the GitHub stack.

The integration

An nvf configuration is a Neovim written as nvf modules. It is evaluated per system, once for each system in force, on the selected package set.

  • nvf's neovimConfiguration runs evalModules over modules/modules.nix, on nixpkgs' library extended with lib.nvim, with the special arguments self, inputs and modulesPath.
  • caisson makes the same evaluation on the composed library, extended with lib.nvim from the same nvf source.
  • extend on the composed library extends nixpkgs' library and drops caisson's namespaces. So the composed library is laid over the extension again, keeping the extension's module system, exactly as the home-manager integration does for lib.hm.
  • nvf's modules read inputs.self.packages, so ecosystemSrc is the nvf flake, resolved under the name nvf.

A configuration is published as nvfConfigurations.<system>.<name>, using bySystem from #98. It is published in the shape neovimConfiguration returns: neovim, config and options. The pinned-world test checks that the Neovim is the derivation neovimConfiguration builds from the same module on the same package set.

An nvf configuration declared inside a machine or a home is published with the others; the test declares one at the top, one inside a NixOS machine and one inside a home, and checks that all three are published. #104 gives the configuration above an nvf configuration a way to activate its Neovim, as a profile.

Checks

  • nix flake check passes, the eval-weight check included.
  • No workspace consumer refers to nvf.

🤖 Generated with Claude Code

An nvf configuration is a Neovim written as nvf modules, evaluated per
system, once for each system in force, on the selected package set.
caisson evaluates nvf's module list with its own `evalModules`, with
the special arguments nvf's `neovimConfiguration` passes, on the
composed library extended with `lib.nvim` from the same nvf flake. A
configuration is published as `nvfConfigurations.<system>.<name>`, in
the shape `neovimConfiguration` returns: `neovim`, `config` and
`options`. The pinned-world suite checks that the Neovim is the
derivation `neovimConfiguration` builds from the same module.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@clhodapp
clhodapp merged commit 825a72c into main Oct 18, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant