{ enableDevIcons ? false , enableBarBar ? false , enableTabby ? false , enableOrgMode ? false , viAlias ? false , vimAlias ? false , grammarFileTypes ? [ "nix" ] , theme ? { } , wrapNeovim , neovim-unwrapped , tree-sitter , vimPlugins , lib , ... }: let inherit (builtins) catAttrs isFunction readFile; myLib = import ./lib.nix { inherit lib; }; pluginParams = vimPlugins // { inherit tree-sitter grammarFileTypes; inherit enableDevIcons enableTabby enableOrgMode; themeCfg = theme; lib = myLib; }; callPlugin = op: if isFunction op then op pluginParams else import op pluginParams; callPlugins = list: map callPlugin list; plugins = callPlugins [ ./plugins/config ./plugins/syntax ./plugins/git ./plugins/explorer ./plugins/theme ./plugins/lsp ./plugins/formatter ./plugins/ux ]; basePlugins = [ vimPlugins.plenary-nvim ]; customPlugins = catAttrs "plugins" plugins; allPlugins = basePlugins ++ customPlugins; basicConfigs = map readFile [ ./config/basic.lua ]; pluginConfigs = catAttrs "luaConfig" plugins; allConfigs = basicConfigs ++ pluginConfigs; in wrapNeovim neovim-unwrapped { inherit viAlias; inherit vimAlias; withPython3 = false; withNodeJs = false; withRuby = false; configure = { customRC = myLib.mkLuaRc allConfigs; packages.myVimPackages = { start = allPlugins; }; }; }