2023-03-22 07:42:02 +01:00
|
|
|
{
|
|
|
|
pkgs,
|
|
|
|
makeNixvim,
|
|
|
|
}: let
|
|
|
|
# Create a nix derivation from a nixvim executable.
|
|
|
|
# The build phase simply consists in running the provided nvim binary.
|
|
|
|
mkTestDerivationFromNvim = {
|
2023-03-03 09:18:52 +00:00
|
|
|
name,
|
|
|
|
nvim,
|
2023-03-16 09:13:43 +01:00
|
|
|
dontRun,
|
2023-03-03 09:18:52 +00:00
|
|
|
...
|
|
|
|
}:
|
|
|
|
pkgs.stdenv.mkDerivation {
|
|
|
|
name = name;
|
|
|
|
|
2023-03-17 13:43:17 +01:00
|
|
|
nativeBuildInputs = [nvim pkgs.docker-client];
|
2023-03-03 09:18:52 +00:00
|
|
|
|
|
|
|
dontUnpack = true;
|
|
|
|
# We need to set HOME because neovim will try to create some files
|
|
|
|
#
|
|
|
|
# Because neovim does not return an exitcode when quitting we need to check if there are
|
|
|
|
# errors on stderr
|
2023-03-16 09:13:43 +01:00
|
|
|
buildPhase =
|
|
|
|
if !dontRun
|
|
|
|
then ''
|
|
|
|
output=$(HOME=$(realpath .) nvim -mn --headless "+q" 2>&1 >/dev/null)
|
|
|
|
if [[ -n $output ]]; then
|
|
|
|
echo "ERROR: $output"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
''
|
|
|
|
else ''
|
|
|
|
'';
|
2023-03-03 09:18:52 +00:00
|
|
|
|
|
|
|
# If we don't do this nix is not happy
|
|
|
|
installPhase = ''
|
|
|
|
mkdir $out
|
|
|
|
'';
|
|
|
|
};
|
2023-03-22 07:42:02 +01:00
|
|
|
|
|
|
|
# Create a nix derivation from a nixvim configuration.
|
|
|
|
# The build phase simply consists in running neovim with the given configuration.
|
|
|
|
mkTestDerivation = name: config: let
|
|
|
|
testAttributes =
|
|
|
|
if builtins.hasAttr "tests" config
|
|
|
|
then config.tests
|
|
|
|
else {
|
|
|
|
dontRun = false;
|
|
|
|
};
|
|
|
|
nvim = makeNixvim (pkgs.lib.attrsets.filterAttrs (n: _: n != "tests") config);
|
|
|
|
in
|
|
|
|
mkTestDerivationFromNvim {
|
|
|
|
inherit name nvim;
|
|
|
|
inherit (testAttributes) dontRun;
|
|
|
|
};
|
|
|
|
in
|
|
|
|
mkTestDerivation
|