Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 82 additions & 0 deletions lib/modules.nix
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,88 @@ in
}
// extraSpecialArgs;
};

/**
Build a Nixvim package.

# Inputs

`input`
: One of:
1. A Nixvim module.
2. A Nixvim configuration.
3. A Nixvim package.

# Output

An installable Nixvim package.
*/
buildNixvim =
input:
if lib.isDerivation input then
lib.throwIfNot (input ? config.build.package)
"buildNixvim: received a derivation without the expected `config` attribute."
input.config.build.package
else if lib.isType "configuration" input then
lib.throwIfNot (input ? config.build.package)
"buildNixvim: received a configuration without the expected `build.package` option."
input.config.build.package
else
self.modules.buildNixvimWith {
modules = [ input ];
};

/**
Build a Nixvim package using the same interface as `evalNixvim`.

# Output

An installable Nixvim package.
*/
buildNixvimWith = lib.mirrorFunctionArgs self.modules.evalNixvim (
args: (self.modules.evalNixvim args).config.build.package
);

/**
Build a Nixvim test derivation.

# Inputs

`input`
: One of:
1. A Nixvim module.
2. A Nixvim configuration.
3. A Nixvim package.

# Output

A buildable Nixvim test.
*/
testNixvim =
input:
if lib.isDerivation input then
lib.throwIfNot (input ? config.build.test)
"testNixvim: received a derivation without the expected `config` attribute."
input.config.build.test
else if lib.isType "configuration" input then
lib.throwIfNot (input ? config.build.test)
"testNixvim: received a configuration without the expected `build.test` option."
input.config.build.test
else
self.modules.testNixvimWith {
modules = [ input ];
};

/**
Build a Nixvim test derivation using the same interface as `evalNixvim`.

# Output

A buildable Nixvim test.
*/
testNixvimWith = lib.mirrorFunctionArgs self.modules.evalNixvim (
args: (self.modules.evalNixvim args).config.build.test
);
}
// lib.mapAttrs (
name: msg:
Expand Down
4 changes: 4 additions & 0 deletions modules/top-level/output.nix
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
pkgs,
config,
options,
lib,
...
}:
Expand Down Expand Up @@ -319,6 +320,9 @@ in
printInitPackage
];
meta.mainProgram = "nvim";
passthru = {
inherit config options;
};
};

printInitPackage = pkgs.writeShellApplication {
Expand Down
10 changes: 10 additions & 0 deletions tests/lib-tests.nix
Original file line number Diff line number Diff line change
Expand Up @@ -546,6 +546,16 @@ let
"Nixvim (single-element): Trailing whitespaces"
];
};

buildNixvimWith_hasExpectedArgs = {
expr = lib.functionArgs lib.nixvim.modules.buildNixvimWith;
expected = lib.functionArgs lib.nixvim.modules.evalNixvim;
};

testNixvimWith_hasExpectedArgs = {
expr = lib.functionArgs lib.nixvim.modules.testNixvimWith;
expected = lib.functionArgs lib.nixvim.modules.evalNixvim;
};
};
in
if results == [ ] then
Expand Down