Neovim config for the lazy https://lazyvim.github.io/
Find a file
2023-01-09 10:53:03 +01:00
.github ci: releas-as 0.1.0-alpha 2023-01-08 10:16:13 +01:00
doc chore(build): auto-generate vimdoc 2023-01-09 08:55:07 +00:00
lua/lazyvim docs: more docs 2023-01-09 10:53:03 +01:00
.gitignore ci: templates 2023-01-04 21:56:53 +01:00
.neoconf.json feat: initial commit 2022-12-30 17:30:52 +01:00
init.lua feat(init)!: disable init.lua and show a message on how to use LazyVim 2023-01-07 11:44:40 +01:00
lazy-lock.json chore: updated lazy.nvim 2023-01-06 22:48:09 +01:00
LICENSE docs: added LICENSE 2023-01-01 09:48:09 +01:00
README.md docs: more docs 2023-01-09 10:53:03 +01:00
stylua.toml feat: initial commit 2022-12-30 17:30:52 +01:00

LazyVim

Neovim config for the lazy powered by 💤 lazy.nvim.

Can't decide between building a config from scratch or using one of the existing Neovim distros?

With LazyVim you don't have to. Configuring LazyVim is exactly the same as you would configure a config from scratch. You can easily add new plugins, change the config for existing ones or disable plugins.

image

🚀 Getting Started

You can find a starter template for LazyVim here

TLDR:

require("lazy").setup({
  spec = {
    -- import LazyVim plugins
    { "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
    version = "*", -- try installing the latest stable version for plugins that support semver
  },
})

📂 File Structure

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

~/.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.

Example spec: lua/plugins/example.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 = { { "<leader>cs", "<cmd>SymbolsOutline<cr>", 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
      {
        "<leader>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", "<leader>co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" })
          vim.keymap.set("n", "<leader>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<string, fun(server:string, opts:_.lspconfig.options):boolean?>
      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

LazyVim uses which-key.nvim to help you remember your keymaps. Just press any key like <space> and you'll see a popup with all possible keymaps starting with <space>.

image

General
Key Description Mode
<C-h> Go to left window n
<C-j> Go to lower window n
<C-k> Go to upper window n
<C-l> Go to right window n
<C-Up> Increase window height n
<C-Down> Decrease window height n
<C-Left> Decrease window width n
<C-Right> Increase window width n
<A-j> Move down n, v, i
<A-k> Move up n, v, i
<S-h> Prev buffer n
<S-l> Next buffer n
[p Paste below n
]p Paste above n
<esc> Escape and clear hlsearch i, n
n Next search result n, x, o
N Prev search result n, x, o
<C-s> Save file i, v, n, s
<leader>l Lazy n
<leader>fn New File n
<leader>xl Open Location List n
<leader>xq Open Quickfix List n
<leader>tf Toggle format on Save n
<leader>ts Toggle Spelling n
<leader>tw Toggle Word Wrap n
<leader>tn Toggle Line Numbers n
<leader>td Toggle Diagnostics n
<leader>tc Toggle Conceal n
<leader>gg Lazygit (cwd) n
<leader>gG Lazygit (root dir) n
<leader>qq Quit all n
<leader>hl Highlight Groups at cursor n
<leader>ot Terminal (root dir) n
<leader>oT Terminal (cwd) n
<esc><esc> Enter Normal Mode t
<leader>ww other-window n
<leader>wd delete-window n
<leader>w- split-window-below n
<leader>w| split-window-right n
<leader><tab>l Last n
<leader><tab>f First n
<leader><tab><tab> New Tab n
<leader><tab>] Next n
<leader><tab>d Close n
<leader><tab>[ Previous n
<leader>b] Next Buffer n
<leader>bb Switch to Other Buffer n
<leader>b[ Previous Buffer n
<leader>` Switch to Other Buffer n
LSP
Key Description Mode
<leader>cd Line Diagnostics n
<leader>cl Lsp Info n
<leader>xd Telescope Diagnostics n
gd Goto Definition n
gr References n
gD Goto Declaration n
gI Goto Implementation n
gt Goto Type Definition n
K Hover n
gK Signature Help n
[d Next Diagnostic n
]d Prev Diagnostic n
]e Next Error n
[e Prev Error n
]w Next Warning n
[w Prev Warning n
<leader>ca Code Action n, v
<leader>cf Format Document n
<leader>cf Format Range v
<leader>cr Rename n
Plugins
Key Description Mode
<leader>cm mason.nvim Mason n
<leader>bd mini.bufremove Delete Buffer n
<leader>bD mini.bufremove Delete Buffer (Force) n
<leader>ft neo-tree.nvim NeoTree (root dir) n
<leader>fT neo-tree.nvim NeoTree (cwd) n
<S-Enter> noice.nvim Redirect Cmdline c
<leader>nl noice.nvim Noice Last Message n
<leader>nh noice.nvim Noice History n
<leader>na noice.nvim Noice All n
<c-f> noice.nvim Scroll forward n
<c-b> noice.nvim Scroll backward n
<leader>nd nvim-notify Delete all Notifications n
<leader>sr nvim-spectre Replace in files (Spectre) n
<leader>qs persistence.nvim Restore Session n
<leader>ql persistence.nvim Restore Last Session n
<leader>qd persistence.nvim Don't Save Current Session n
<leader>/ telescope.nvim Find in Files (Grep) n
<leader><space> telescope.nvim Find Files (root dir) n
<leader>fb telescope.nvim Buffers n
<leader>ff telescope.nvim Find Files (root dir) n
<leader>fF telescope.nvim Find Files (cwd) n
<leader>fr telescope.nvim Recent n
<leader>gc telescope.nvim commits n
<leader>gs telescope.nvim status n
<leader>ha telescope.nvim Auto Commands n
<leader>hc telescope.nvim Commands n
<leader>hf telescope.nvim File Types n
<leader>hh telescope.nvim Help Pages n
<leader>hk telescope.nvim Key Maps n
<leader>hm telescope.nvim Man Pages n
<leader>ho telescope.nvim Options n
<leader>hs telescope.nvim Search Highlight Groups n
<leader>ht telescope.nvim Telescope n
<leader>sb telescope.nvim Buffer n
<leader>sc telescope.nvim Command History n
<leader>sg telescope.nvim Grep (root dir) n
<leader>sG telescope.nvim Grep (cwd) n
<leader>sm telescope.nvim Jump to Mark n
<leader>, telescope.nvim Switch Buffer n
<leader>: telescope.nvim Command History n
<leader>ss telescope.nvim Goto Symbol n
]t todo-comments.nvim Next todo comment n
[t todo-comments.nvim Previous todo comment n
<leader>xt todo-comments.nvim Todo Trouble n
<leader>xtt todo-comments.nvim Todo Trouble n
<leader>xT todo-comments.nvim Todo Telescope n
<leader>xx trouble.nvim Document Diagnostics (Trouble) n
<leader>xX trouble.nvim Workspace Diagnostics (Trouble) n
]] vim-illuminate Next Reference n
[[ vim-illuminate Prev Reference n

📦 Plugins

Core
Extras: lang.json

To use this, add it to your lazy.nvim imports:

require("lazy").setup({
  spec = {
    { "folke/LazyVim", import = "lazyvim.plugins" },
    { import = "lazyvim.plugins.extras.lang.json" },
    { import = "plugins" },
  },
})
Extras: lang.typescript

To use this, add it to your lazy.nvim imports:

require("lazy").setup({
  spec = {
    { "folke/LazyVim", import = "lazyvim.plugins" },
    { import = "lazyvim.plugins.extras.lang.typescript" },
    { import = "plugins" },
  },
})
Extras: ui.mini-starter

To use this, add it to your lazy.nvim imports:

require("lazy").setup({
  spec = {
    { "folke/LazyVim", import = "lazyvim.plugins" },
    { import = "lazyvim.plugins.extras.ui.mini-starter" },
    { import = "plugins" },
  },
})