From b79ac693127f87561c44c5ba8a82ad29e9e85d20 Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Wed, 25 Dec 2024 22:27:32 +0100 Subject: [PATCH] Fix automatic dependency retrival --- flake.nix | 2 +- nvim/mknvim.nix | 62 +++++++++++++++++++++++++++++-------------------- 2 files changed, 38 insertions(+), 26 deletions(-) diff --git a/flake.nix b/flake.nix index b1b53f3..146d0ce 100644 --- a/flake.nix +++ b/flake.nix @@ -111,7 +111,7 @@ pkgs = nixpkgs.legacyPackages.${system}; in rec { default = nvim; - nvim = import ./nvim (inputs // { inherit pkgs; }); + nvim = import ./nvim (inputs // { inherit pkgs; lib = nixpkgs.lib; }); }); }; } diff --git a/nvim/mknvim.nix b/nvim/mknvim.nix index 7f800fe..4e054c8 100644 --- a/nvim/mknvim.nix +++ b/nvim/mknvim.nix @@ -18,48 +18,60 @@ withNodeJs ? false, withSqlite ? false, }: let - normalize = optional: p: let - defaultPlugin = { - plugin = null; - config = null; - inherit optional; - }; - in - defaultPlugin - // ( - if (p ? plugin) - then p - else {plugin = p;} - ); - builder = (import ./bytecompile.nix) {inherit pkgs lib;}; pack = (import ./pack.nix) {inherit pkgs lib;}; nvim = builder.byteCompileVim package; - removeDependencies = p: p // {plugin = p.plugin.overrideAttrs (prev: prev // {dependencies = [];});}; + pluginPack = let + normalize = optional: p: let + defaultPlugin = { + plugin = null; + config = null; + inherit optional; + }; + in + defaultPlugin + // ( + if (p ? plugin) + then p + else {plugin = p;} + ); - start = map (p: lib.pipe p [(normalize false) removeDependencies builder.byteCompile]) plugins.start; - opts = map (p: lib.pipe p [(normalize true) removeDependencies builder.byteCompile]) plugins.opts; - startPacked = pack.packPlugins start; + removeDependencies = p: p // {plugin = removeAttrs p.plugin ["dependencies"];}; - pluginPack = lib.pipe ([startPacked] ++ opts) [ - pkgs.neovimUtils.normalizedPluginsToVimPackage - (p: {packages = p;}) - pkgs.neovimUtils.packDir - ]; + preparePlugin = p: + lib.pipe p [ + removeDependencies + builder.byteCompile + ]; + + withDeps = p: [p] ++ builtins.concatMap withDeps (map (normalize false) (p.plugin.dependencies or [])); + + preparePlugins = ps: map preparePlugin (lib.unique (builtins.concatMap withDeps ps)); + + allPlugs = (map (normalize false) plugins.start) ++ (map (normalize true) plugins.opts); + partitioned = builtins.partition (p: p.optional) (preparePlugins allPlugs); + start = [(pack.packPlugins partitioned.wrong)]; + opts = partitioned.right; + in + lib.pipe (start ++ opts) [ + pkgs.neovimUtils.normalizedPluginsToVimPackage + (p: {packages = p;}) + pkgs.neovimUtils.packDir + ]; initLua = # lua '' vim.opt.rtp = { "${config}", - "${pluginPack}", + "${pluginPack}/pack/packages/start/vimplugin-plugin-pack", vim.env.VIMRUNTIME, "${config}/after", } vim.opt.packpath = { - "${pluginPack}", + "${pluginPack}/pack/packages/opts", vim.env.VIMRUNTIME, }