Screen Too Small

This course material requires a larger screen to properly display the terminal and editor interfaces.

Please use a tablet, laptop, or desktop computer for the best learning experience.

You can continue browsing, but the experience will be significantly limited.

9/25
Free Trial: 3 lessons remaining
Unlock Full Access

Breaking up is easy to do

Estimated time: 5 minutes

We've done so much, but looking at our init.lua, it's hard to imagine this not getting confusing really quickly. Single responsibility — this isn't that.

So let's break up. Let me show you how — it's easy to do.

First, let's remember how we currently setup plugins.

local opts = {}

local plugins = {
  { "catppuccin/nvim", name = "catppuccin", priority = 1000 },
  {
    'nvim-telescope/telescope.nvim', tag = '0.1.6',
    dependencies = { 'nvim-lua/plenary.nvim' }
  },
  {"nvim-treesitter/nvim-treesitter", build = ":TSUpdate"},
  {
    "nvim-neo-tree/neo-tree.nvim",
    branch = "v3.x",
    dependencies = {
      "nvim-lua/plenary.nvim",
      "nvim-tree/nvim-web-devicons",
      "MunifTanjim/nui.nvim",
    }

  }
}
require("lazy").setup(plugins, opts)
  1. We define opts as an empty lua table.
  2. We define plugins as a nested lua table. For each plugin, we add another table.

By convention, we can create a file called plugins.lua in a lua directory. If this exists and returns a lua table like we have in our init.lua, we'd be in business.

To utilize this, we need to do a few things.

  1. Update the require("lazy") line from this require("lazy").setup(plugins, opts) to require("lazy").setup("plugins")
  2. Create the lua/plugins.lua file.
  3. Move our plugins lua table to the plugins.lua file.

After you've updated the require("lazy") line in init.lua, let's move on to creating the plugins.lua file. You can do this via Neotree!

  • control+n - open Neotree
  • a - add a new file/directory
  • type lua/plugins.lua to create the file

Once created, we should select and delete the entire block defining the plugins lua table. Open the new file via Neotree (control+n) and paste the lua table.

We won't need to define a local variable plugins here. We can just return it instead. It should now look like this.

return {
  { "catppuccin/nvim", name = "catppuccin", priority = 1000 },
  {
    'nvim-telescope/telescope.nvim', tag = '0.1.6',
    dependencies = { 'nvim-lua/plenary.nvim' }
  },
  {"nvim-treesitter/nvim-treesitter", build = ":TSUpdate"},
  {
    "nvim-neo-tree/neo-tree.nvim",
    branch = "v3.x",
    dependencies = {
      "nvim-lua/plenary.nvim",
      "nvim-tree/nvim-web-devicons",
      "MunifTanjim/nui.nvim",
    }

  }
}

Once this is done, let's close Neovim and reopen it. Everything should still work as before. Let's try opening Neotree with <C-n>. Good? Great!

But what does this really get us? We still have one big plugins file.

Great Question!

By having Lazy use require("lazy").setup("plugins"), it will look for any lua files within the lua directory. As long as each file returns a Lua table, it will load and merge these together. Even better, it recognizes when a file within this directory is updated and will reflect those changes on save!

So what's next? It's time to actually break up our plugins!

You've completed this lesson!

You completed this lesson less than a minute ago.