diff --git a/docs/helpers.md b/docs/helpers.md index 9a2cc3ce..862b5944 100644 --- a/docs/helpers.md +++ b/docs/helpers.md @@ -37,3 +37,6 @@ A certain number of helpers are defined that can be useful: ```lua {"a", "b", [foo] = "bar"} ``` + +- `helpers.enableExceptInTests`: Evaluates to `true`, except in `mkTestDerivationFromNixvimModule` + where it evaluates to `false`. This allows to skip instantiating plugins that can't be run in tests. diff --git a/flake-modules/helpers.nix b/flake-modules/helpers.nix index 712b4003..f49afa64 100644 --- a/flake-modules/helpers.nix +++ b/flake-modules/helpers.nix @@ -1,7 +1,7 @@ {getHelpers, ...}: { - _module.args.getHelpers = pkgs: + _module.args.getHelpers = pkgs: _nixvimTests: import ../lib/helpers.nix { - inherit pkgs; + inherit pkgs _nixvimTests; inherit (pkgs) lib; }; @@ -10,6 +10,6 @@ config, ... }: { - _module.args.helpers = getHelpers pkgs; + _module.args.helpers = getHelpers pkgs false; }; } diff --git a/flake-modules/lib.nix b/flake-modules/lib.nix index 49c72e3f..6bf85925 100644 --- a/flake-modules/lib.nix +++ b/flake-modules/lib.nix @@ -13,7 +13,7 @@ }: import ../lib { inherit pkgs lib; - inherit (config.legacyPackages) makeNixvim; + inherit (config.legacyPackages) makeNixvim makeNixvimWithModule; } ) ); diff --git a/flake-modules/tests.nix b/flake-modules/tests.nix index 9251965b..8458e62b 100644 --- a/flake-modules/tests.nix +++ b/flake-modules/tests.nix @@ -1,4 +1,4 @@ -{ +{self, ...}: { perSystem = { pkgs, config, @@ -10,7 +10,7 @@ }: { checks = { tests = import ../tests { - inherit pkgs helpers; + inherit pkgs helpers makeNixvimWithModule; inherit (pkgs) lib; makeNixvim = configuration: makeNixvimWithModuleUnfree { @@ -25,6 +25,11 @@ inherit makeNixvimWithModule; }; + enable-except-in-tests = import ../tests/enable-except-in-tests.nix { + inherit pkgs makeNixvimWithModule; + inherit (self.lib.${system}.check) mkTestDerivationFromNixvimModule; + }; + lib-tests = import ../tests/lib-tests.nix { inherit pkgs helpers; inherit (pkgs) lib; diff --git a/lib/default.nix b/lib/default.nix index b5713a32..568de1a5 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -1,12 +1,13 @@ # Args probably only needs pkgs and lib { makeNixvim, + makeNixvimWithModule, pkgs, ... } @ args: { # Add all exported modules here check = import ../tests/test-derivation.nix { - inherit makeNixvim pkgs; + inherit makeNixvim makeNixvimWithModule pkgs; }; helpers = import ./helpers.nix args; } diff --git a/lib/helpers.nix b/lib/helpers.nix index cbb5ad95..3a9f8cf3 100644 --- a/lib/helpers.nix +++ b/lib/helpers.nix @@ -1,10 +1,11 @@ { lib, pkgs, + _nixvimTests, ... }: let nixvimTypes = import ./types.nix {inherit lib nixvimOptions;}; - nixvimUtils = import ./utils.nix {inherit lib;}; + nixvimUtils = import ./utils.nix {inherit lib _nixvimTests;}; nixvimOptions = import ./options.nix {inherit lib nixvimTypes nixvimUtils;}; inherit (import ./to-lua.nix {inherit lib;}) toLuaObject; in diff --git a/lib/utils.nix b/lib/utils.nix index b8c528df..c8bae485 100644 --- a/lib/utils.nix +++ b/lib/utils.nix @@ -1,9 +1,14 @@ -{lib}: +{ + lib, + _nixvimTests, +}: with lib; { listToUnkeyedAttrs = list: builtins.listToAttrs (lib.lists.imap0 (idx: lib.nameValuePair "__unkeyed-${toString idx}") list); + enableExceptInTests = !_nixvimTests; + emptyTable = {"__empty" = null;}; /* diff --git a/templates/simple/flake.nix b/templates/simple/flake.nix index 2045407d..8f95a06c 100644 --- a/templates/simple/flake.nix +++ b/templates/simple/flake.nix @@ -29,7 +29,7 @@ }: let nixvimLib = nixvim.lib.${system}; nixvim' = nixvim.legacyPackages.${system}; - nvim = nixvim'.makeNixvimWithModule { + nixvimModule = { inherit pkgs; module = config; # You can use `extraSpecialArgs` to pass additional arguments to your module files @@ -37,13 +37,11 @@ # inherit (inputs) foo; }; }; + nvim = nixvim'.makeNixvimWithModule nixvimModule; in { checks = { # Run `nix flake check .` to verify that your config is not broken - default = nixvimLib.check.mkTestDerivationFromNvim { - inherit nvim; - name = "A nixvim configuration"; - }; + default = nixvimLib.check.mkTestDerivationFromNixvimModule nixvimModule; }; packages = { diff --git a/tests/default.nix b/tests/default.nix index 632cafee..1e30b351 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -1,11 +1,12 @@ { makeNixvim, + makeNixvimWithModule, lib, helpers, pkgs, }: let fetchTests = import ./fetch-tests.nix; - test-derivation = import ./test-derivation.nix {inherit pkgs makeNixvim;}; + test-derivation = import ./test-derivation.nix {inherit pkgs makeNixvim makeNixvimWithModule;}; inherit (test-derivation) mkTestDerivation; # List of files containing configurations diff --git a/tests/enable-except-in-tests.nix b/tests/enable-except-in-tests.nix new file mode 100644 index 00000000..9a25521b --- /dev/null +++ b/tests/enable-except-in-tests.nix @@ -0,0 +1,41 @@ +{ + pkgs, + mkTestDerivationFromNixvimModule, + makeNixvimWithModule, +}: let + module = {helpers, ...}: { + plugins.image.enable = helpers.enableExceptInTests; + }; + + inTest = mkTestDerivationFromNixvimModule { + name = "enable-except-in-tests-test"; + inherit pkgs module; + }; + + notInTest = let + nvim = makeNixvimWithModule { + inherit pkgs module; + }; + in + pkgs.runCommand "enable-except-in-tests-not-in-test" { + printConfig = "${nvim}/bin/nixvim-print-init"; + } '' + if ! "$printConfig" | grep 'require("image").setup'; then + echo "image.nvim is not present in the configuration" + echo -e "configuration:\n$($printConfig)" + exit 1 + fi + + touch $out + ''; +in + pkgs.linkFarm "enable-except-in-tests" [ + { + name = "in-test"; + path = inTest; + } + { + name = "not-in-test"; + path = notInTest; + } + ] diff --git a/tests/test-derivation.nix b/tests/test-derivation.nix index e42a37d3..6f3bba27 100644 --- a/tests/test-derivation.nix +++ b/tests/test-derivation.nix @@ -1,6 +1,7 @@ { pkgs, makeNixvim, + makeNixvimWithModule, }: let # Create a nix derivation from a nixvim executable. # The build phase simply consists in running the provided nvim binary. @@ -40,6 +41,21 @@ ''; }; + mkTestDerivationFromNixvimModule = { + name ? "nixvim-check", + pkgs, + module, + extraSpecialArgs ? {}, + }: let + nvim = makeNixvimWithModule { + inherit pkgs module extraSpecialArgs; + _nixvimTests = true; + }; + in + mkTestDerivationFromNvim { + inherit name nvim; + }; + # Create a nix derivation from a nixvim configuration. # The build phase simply consists in running neovim with the given configuration. mkTestDerivation = name: config: let @@ -56,5 +72,5 @@ inherit (testAttributes) dontRun; }; in { - inherit mkTestDerivation mkTestDerivationFromNvim; + inherit mkTestDerivation mkTestDerivationFromNvim mkTestDerivationFromNixvimModule; } diff --git a/wrappers/darwin.nix b/wrappers/darwin.nix index 01c99ee6..84cb0b2b 100644 --- a/wrappers/darwin.nix +++ b/wrappers/darwin.nix @@ -9,7 +9,7 @@ ... } @ args: let inherit (lib) mkEnableOption mkOption mkOptionType mkForce mkMerge mkIf types; - helpers = getHelpers pkgs; + helpers = getHelpers pkgs false; shared = import ./_shared.nix {inherit modules helpers;} args; cfg = config.programs.nixvim; in { diff --git a/wrappers/hm.nix b/wrappers/hm.nix index bf2e9f37..2b313d69 100644 --- a/wrappers/hm.nix +++ b/wrappers/hm.nix @@ -9,7 +9,7 @@ ... } @ args: let inherit (lib) mkEnableOption mkOption mkOptionType mkMerge mkIf types; - helpers = getHelpers pkgs; + helpers = getHelpers pkgs false; shared = import ./_shared.nix {inherit modules helpers;} args; cfg = config.programs.nixvim; files = diff --git a/wrappers/nixos.nix b/wrappers/nixos.nix index 3dbd37b5..d101f207 100644 --- a/wrappers/nixos.nix +++ b/wrappers/nixos.nix @@ -9,7 +9,7 @@ ... } @ args: let inherit (lib) mkEnableOption mkOption mkOptionType mkForce mkMerge mkIf types; - helpers = getHelpers pkgs; + helpers = getHelpers pkgs false; shared = import ./_shared.nix {inherit modules helpers;} args; cfg = config.programs.nixvim; files = diff --git a/wrappers/standalone.nix b/wrappers/standalone.nix index b68652b4..f169259b 100644 --- a/wrappers/standalone.nix +++ b/wrappers/standalone.nix @@ -5,11 +5,12 @@ default_pkgs: { }: { pkgs ? default_pkgs, extraSpecialArgs ? {}, + _nixvimTests ? false, module, }: let inherit (pkgs) lib; - helpers = getHelpers pkgs; + helpers = getHelpers pkgs _nixvimTests; shared = import ./_shared.nix {inherit modules helpers;} { inherit pkgs lib; config = {};