diff --git a/README.md b/README.md
index bf2d374e..78952b8d 100644
--- a/README.md
+++ b/README.md
@@ -25,6 +25,9 @@ require("lazy").setup({
{ "LazyVim/LazyVim", import = "lazyvim.plugins" },
-- import/override with your plugins
{ import = "plugins" },
+ -- import any extras modules here
+ -- { import = "lazyvim.plugins.extras.lang.typescript" },
+ -- { import = "lazyvim.plugins.extras.lang.json" },
},
defaults = {
lazy = true, -- every plugin is lazy-loaded by default
@@ -33,14 +36,232 @@ require("lazy").setup({
})
```
-## ✅ Todo
+## 📂 File Structure
-- [ ] documentation
-- [x] treesitter auto-install seems broken. Switch to `ensure_installed` instead?
-- [x] list all plugins in readme
-- [ ] test all-the-things
-- [x] auto-generate keymaps for README.md
-- [x] auto-generate plugins for README.md
+The files under config will be automatically loaded at the appropriate time,
+so you don't need to require those files manually.
+
+You can add your custom plugin specs under `lua/plugins/`. All files there
+will be automatically loaded by [lazy.nvim](https://github.com/folke/lazy.nvim)
+
+
+~/.config/nvim
+├── lua
+│ ├── config
+│ │ ├── autocmds.lua
+│ │ ├── keymaps.lua
+│ │ ├── lazy.lua
+│ │ └── options.lua
+│ └── plugins
+│ ├── spec1.lua
+│ ├── **
+│ └── spec2.lua
+└── init.toml
+
+
+## 🚀 Configuring **LazyVim**
+
+Configuring **LazyVim** is exactly the same as using **lazy.nvim** to build
+a config from scratch.
+
+For the full plugin spec documentation please check the **lazy.nvim**
+[readme](https://github.com/folke/lazy.nvim).
+
+Example spec: lua/plugins/example.lua
+
+
+
+```lua
+-- every spec file under config.plugins will be loaded automatically by lazy.nvim
+--
+-- In your plugin files, you can:
+-- * add extra plugins
+-- * disable/enabled LazyVim plugins
+-- * override the configuration of LazyVim plugins
+return {
+ -- change trouble config
+ {
+ "folke/trouble.nvim",
+ -- opts will be merged with the parent spec
+ opts = { use_diagnostic_signs = true },
+ },
+
+ -- disable trouble
+ { "folke/trouble.nvim", enabled = false },
+
+ -- add symbols-outline
+ {
+ "simrat39/symbols-outline.nvim",
+ cmd = "SymbolsOutline",
+ keys = { { "cs", "SymbolsOutline", desc = "Symbols Outline" } },
+ config = true,
+ },
+
+ -- override nvim-cmp and add cmp-emoji
+ {
+ "hrsh7th/nvim-cmp",
+ dependencies = { "hrsh7th/cmp-emoji" },
+ ---@param opts cmp.ConfigSchema
+ opts = function(_, opts)
+ local cmp = require("cmp")
+ opts.sources = cmp.config.sources(vim.list_extend(opts.sources, { { name = "emoji" } }))
+ end,
+ },
+
+ -- change some telescope options and add telescope-fzf-native
+ {
+ "nvim-telescope/telescope.nvim",
+ dependencies = { { "nvim-telescope/telescope-fzf-native.nvim", build = "make" } },
+ keys = {
+ -- add a keymap to browse plugin files
+ -- stylua: ignore
+ {
+ "fp",
+ function() require("telescope.builtin").find_files({ cwd = require("lazy.core.config").options.root }) end,
+ desc = "Find Plugin File",
+ },
+ },
+ -- change some options
+ opts = {
+ defaults = {
+ layout_strategy = "horizontal",
+ layout_config = { prompt_position = "top" },
+ sorting_strategy = "ascending",
+ winblend = 0,
+ },
+ },
+ -- apply the config and additionally load fzf-native
+ config = function(_, opts)
+ local telescope = require("telescope")
+ telescope.setup(opts)
+ telescope.load_extension("fzf")
+ end,
+ },
+
+ -- add pyright and setup tsserver with typescript.nvim
+ {
+ "neovim/nvim-lspconfig",
+ dependencies = {
+ "jose-elias-alvarez/typescript.nvim",
+ init = function()
+ require("lazyvim.util").on_attach(function(_, buffer)
+ -- stylua: ignore
+ vim.keymap.set( "n", "co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" })
+ vim.keymap.set("n", "cR", "TypescriptRenameFile", { desc = "Rename File", buffer = buffer })
+ end)
+ end,
+ },
+ ---@class PluginLspOpts
+ opts = {
+ ---@type lspconfig.options
+ servers = {
+ -- pyright will be automatically installed with mason and loaded with lspconfig
+ pyright = {},
+ tsserver = {},
+ },
+ -- you can do any additional lsp server setup here
+ -- return true if you don't want this server to be setup with lspconfig
+ ---@type table
+ setup = {
+ -- example to setup with typescript.nvim
+ tsserver = function(_, opts)
+ require("typescript").setup({ server = opts })
+ return true
+ end,
+ -- Specify * to use this function as a fallback for any server
+ -- ["*"] = function(server, opts) end,
+ },
+ },
+ },
+
+ -- for typescript, LazyVim also includes extra specs to properly setup lspconfig,
+ -- treesitter, mason and typescript.nvim. So instead of the above, you can use:
+ { import = "lazyvim.plugins.extras.lang.typescript" },
+
+ -- add more treesitter parsers
+ {
+ "nvim-treesitter/nvim-treesitter",
+ opts = {
+ ensure_installed = {
+ "bash",
+ "help",
+ "html",
+ "javascript",
+ "json",
+ "lua",
+ "markdown",
+ "markdown_inline",
+ "python",
+ "query",
+ "regex",
+ "tsx",
+ "typescript",
+ "vim",
+ "yaml",
+ },
+ },
+ },
+
+ -- since `vim.tbl_deep_extend`, can only merge tables and not lists, the code above
+ -- would overwrite `ensure_installed` with the ne value.
+ -- If you'd rather extend the default config, use the code below instead:
+ {
+ "nvim-treesitter/nvim-treesitter",
+ opts = function(_, opts)
+ vim.list_extend(opts.ensure_installed, {
+ -- add tsx and treesitter
+ ensure_installed = {
+ "tsx",
+ "typescript",
+ },
+ })
+ end,
+ },
+
+ -- the opts function can als be used to change the default opts:
+ {
+ "nvim-lualine/lualine.nvim",
+ event = "VeryLazy",
+ opts = function(_, opts)
+ table.insert(opts.sections.lualine_x, "😄")
+ end,
+ },
+
+ -- or you can return new options to override all the defaults
+ {
+ "nvim-lualine/lualine.nvim",
+ event = "VeryLazy",
+ opts = function()
+ return {
+ --[[add your custom lualine config here]]
+ }
+ end,
+ },
+
+ -- use mini.starter instead of alpha
+ { import = "lazyvim.plugins.extras.ui.mini-starter" },
+
+ -- add jsonls and schemastore ans setup treesitter for json, json5 and jsonc
+ { import = "lazyvim.plugins.extras.lang.json" },
+
+ -- add any tools you want to have installed below
+ {
+ "williamboman/mason.nvim",
+ opts = {
+ ensure_installed = {
+ "stylua",
+ "shellcheck",
+ "shfmt",
+ "flake8",
+ },
+ },
+ },
+}
+```
+
+
+
+
## ⌨️ Keymaps
@@ -198,7 +419,7 @@ possible keymaps starting with ``.
-Core Plugins
+Core
- [alpha-nvim](https://github.com/goolord/alpha-nvim)
- [catppuccin](https://github.com/catppuccin/nvim)
diff --git a/lua/lazyvim/util/build.lua b/lua/lazyvim/util/build.lua
index 1d629afa..06caefc0 100644
--- a/lua/lazyvim/util/build.lua
+++ b/lua/lazyvim/util/build.lua
@@ -101,7 +101,7 @@ function M.update()
---@type string[]
local plugins = {
- "Core Plugins
",
+ "Core
",
"",
Docs.plugins(core.plugins).content,
"",
@@ -138,6 +138,8 @@ require("lazy").setup({
end
end)
data.plugins = { content = table.concat(plugins, "\n") }
+ local examples = vim.fn.fnamemodify(root .. "/../LazyVim-starter/lua/plugins/example.lua", ":p")
+ data.examples = Util.read_file(examples):gsub("^[^\n]+\n[^\n]+\n[^\n]+\n", "")
Docs.save(data)
end