From a07ae621faf86871321f1a76d8bb78ca35ea4833 Mon Sep 17 00:00:00 2001 From: Matt Sturgeon Date: Fri, 21 Nov 2025 12:23:42 +0000 Subject: [PATCH 1/4] lib/modules: init `buildNixvim` Introduce a thin wrapper around `.config.build.package`, intended to replace the legacy `makeNixvim` and `makeNixvimWithModule` functions. --- lib/modules.nix | 25 +++++++++++++++++++++++++ tests/lib-tests.nix | 5 +++++ 2 files changed, 30 insertions(+) diff --git a/lib/modules.nix b/lib/modules.nix index 74021171b9..711e789557 100644 --- a/lib/modules.nix +++ b/lib/modules.nix @@ -57,6 +57,31 @@ in } // extraSpecialArgs; }; + + /** + Build a Nixvim package. + + This is a thin wrapper around `.config.build.package`. + + # Inputs + + `input` + : One of: + 1. Arguments for `evalNixvim`. + 2. A Nixvim configuration, as produced by `evalNixvim`. + 3. A Nixvim package, as produced by `buildNixvim`. + + # Output + + An installable Nixvim package. + */ + buildNixvim = lib.mirrorFunctionArgs self.modules.evalNixvim ( + input: + let + configuration = if input ? config.build.package then input else self.modules.evalNixvim input; + in + configuration.config.build.package + ); } // lib.mapAttrs ( name: msg: diff --git a/tests/lib-tests.nix b/tests/lib-tests.nix index 694e2f5af2..79437ada61 100644 --- a/tests/lib-tests.nix +++ b/tests/lib-tests.nix @@ -546,6 +546,11 @@ let "Nixvim (single-element): Trailing whitespaces" ]; }; + + buildNixvim_hasExpectedArgs = { + expr = lib.functionArgs lib.nixvim.modules.buildNixvim; + expected = lib.functionArgs lib.nixvim.modules.evalNixvim; + }; }; in if results == [ ] then From 0639f67e2f2010bc3bd03e50cbe20ee1d824f080 Mon Sep 17 00:00:00 2001 From: Matt Sturgeon Date: Fri, 21 Nov 2025 12:30:08 +0000 Subject: [PATCH 2/4] lib/modules: init `testNixvim` Introduce a thin wrapper around `.config.build.test`, intended to replace the legacy `mkTestDerivationFromNvim` and `mkTestDerivationFromNixvimModule` functions. --- lib/modules.nix | 25 +++++++++++++++++++++++++ tests/lib-tests.nix | 5 +++++ 2 files changed, 30 insertions(+) diff --git a/lib/modules.nix b/lib/modules.nix index 711e789557..ec0e98f197 100644 --- a/lib/modules.nix +++ b/lib/modules.nix @@ -82,6 +82,31 @@ in in configuration.config.build.package ); + + /** + Build a Nixvim test derivation. + + This is a thin wrapper around `.config.build.test`. + + # Inputs + + `input` + : One of: + 1. Arguments for `evalNixvim`. + 2. A Nixvim configuration, as produced by `evalNixvim`. + 3. A Nixvim package, as produced by `buildNixvim`. + + # Output + + A buildable Nixvim test. + */ + testNixvim = lib.mirrorFunctionArgs self.modules.evalNixvim ( + input: + let + configuration = if input ? config.build.package then input else self.modules.evalNixvim input; + in + configuration.config.build.test + ); } // lib.mapAttrs ( name: msg: diff --git a/tests/lib-tests.nix b/tests/lib-tests.nix index 79437ada61..485084ffe8 100644 --- a/tests/lib-tests.nix +++ b/tests/lib-tests.nix @@ -551,6 +551,11 @@ let expr = lib.functionArgs lib.nixvim.modules.buildNixvim; expected = lib.functionArgs lib.nixvim.modules.evalNixvim; }; + + testNixvim_hasExpectedArgs = { + expr = lib.functionArgs lib.nixvim.modules.testNixvim; + expected = lib.functionArgs lib.nixvim.modules.evalNixvim; + }; }; in if results == [ ] then From ebaa5f67624f90fc2c09e1f97bab914fb9c6ea17 Mon Sep 17 00:00:00 2001 From: Matt Sturgeon Date: Fri, 21 Nov 2025 12:39:21 +0000 Subject: [PATCH 3/4] lib/modules: extract internal `wrapEvalNixvim` impl --- lib/modules.nix | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/lib/modules.nix b/lib/modules.nix index ec0e98f197..c45685b2b4 100644 --- a/lib/modules.nix +++ b/lib/modules.nix @@ -14,6 +14,12 @@ let applyExtraConfig = "It has been moved to `lib.plugins.utils`"; mkConfigAt = "It has been moved to `lib.plugins.utils`"; }; + + wrapEvalNixvim = + pred: fn: + lib.mirrorFunctionArgs self.modules.evalNixvim ( + input: fn (if pred input then input else self.modules.evalNixvim input) + ); in { # Evaluate nixvim modules, checking warnings and assertions @@ -75,12 +81,8 @@ in An installable Nixvim package. */ - buildNixvim = lib.mirrorFunctionArgs self.modules.evalNixvim ( - input: - let - configuration = if input ? config.build.package then input else self.modules.evalNixvim input; - in - configuration.config.build.package + buildNixvim = wrapEvalNixvim (input: input ? config.build.package) ( + configuration: configuration.config.build.package ); /** @@ -100,12 +102,8 @@ in A buildable Nixvim test. */ - testNixvim = lib.mirrorFunctionArgs self.modules.evalNixvim ( - input: - let - configuration = if input ? config.build.package then input else self.modules.evalNixvim input; - in - configuration.config.build.test + testNixvim = wrapEvalNixvim (input: input ? config.build.test) ( + configuration: configuration.config.build.test ); } // lib.mapAttrs ( From abf15275d2e99689aa3c491117aad399f8d7edc6 Mon Sep 17 00:00:00 2001 From: Matt Sturgeon Date: Fri, 21 Nov 2025 12:48:21 +0000 Subject: [PATCH 4/4] modules/output: include `config` and `options` in `build.package` Similar to the legacy "standalone wrapper" `makeNixvimWithModule`, thread the configuration's `config` and `options` to the final package. This allows using such a package as the input to functions like `testNixvim`. --- modules/top-level/output.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/top-level/output.nix b/modules/top-level/output.nix index e41be4161d..df59014983 100644 --- a/modules/top-level/output.nix +++ b/modules/top-level/output.nix @@ -1,6 +1,7 @@ { pkgs, config, + options, lib, ... }: @@ -319,6 +320,9 @@ in printInitPackage ]; meta.mainProgram = "nvim"; + passthru = { + inherit config options; + }; }; printInitPackage = pkgs.writeShellApplication {