{ lib , plugins , nvim-lspconfig , nlsp-settings-nvim , lspsaga-nvim , luasnip , nvim-cmp , cmp-nvim-lsp , cmp-luasnip , cmp-tabby , ... }: let tabbymlEnable = lib.attrByPath [ "tabbyml" "enable" ] false plugins; tabbymlDefaultSettings = { host = "http://127.0.0.1:8080"; }; tabbymlSettings = lib.toLua (lib.attrByPath [ "tabbyml" "settings" ] tabbymlDefaultSettings plugins); tabbymlLuaConfig = lib.optional tabbymlEnable (lib.readSubFile ./cmp-tabby.lua { inherit tabbymlSettings; }); cmpSources = lib.toLua ([ { name = "nvim_lsp"; } { name = "luasnip"; } { name = "orgmode"; } ] ++ lib.optional tabbymlEnable [{ name = "cmp-tabby"; }]); cmpLuaConfig = lib.readSubFile ./nvim-cmp.lua { inherit cmpSources; }; lspconfigLuaConfig = lib.readSubFile ./lspconfig.lua { inherit lspConfigServers lspSagaSettings; }; lsp = [ nvim-lspconfig nlsp-settings-nvim lspsaga-nvim ]; snippets = [ luasnip ]; completions = [ nvim-cmp # Autocompletion cmp-nvim-lsp # LSP source for nvim-cmp cmp-luasnip # Snippets source for nvim-cmp ] ++ lib.optional tabbymlEnable [ cmp-tabby ]; lspConfigServers = lib.toLua (lib.attrByPath [ "lspConfig" "servers" ] [ ] plugins); lspSagaSettings = lib.toLua (lib.attrByPath [ "lspSaga" "settings" ] { } plugins); in { luaConfig = lspconfigLuaConfig + tabbymlLuaConfig + cmpLuaConfig; plugins = lsp ++ snippets ++ completions; }