diff --git a/init.lua b/init.lua
index cdfdf8f..44dfe9b 100644
--- a/init.lua
+++ b/init.lua
@@ -15,12 +15,11 @@
-- You should have received a copy of the GNU General Public License
-- along with this program. If not, see .
--- Settings {{
vim.loader.enable()
vim.g.mapleader = ","
-local dataPath = vim.fn.stdpath("data")
+local datapath = vim.fn.stdpath("data")
-- Options
local opt = vim.opt
@@ -59,178 +58,143 @@ opt.mouse = "a"
opt.mousehide = true
opt.sessionoptions = "blank,buffers,curdir,folds,tabpages,winsize"
opt.updatetime = 300
-opt.undodir = dataPath .. "/undo"
-opt.viewdir = dataPath .. "/views"
--- }}
-
--- Plugins {{
-local Plug = vim.fn["plug#"]
-vim.call("plug#begin", dataPath .. "/plugged")
-
--- General
-Plug "rmehri01/onenord.nvim"
-Plug "ellisonleao/gruvbox.nvim"
-Plug "nvim-lualine/lualine.nvim"
-Plug "nvim-mini/mini.icons"
-Plug "lukas-reineke/indent-blankline.nvim"
-Plug "nvim-focus/focus.nvim"
-Plug "nxhung2304/lastplace.nvim"
-Plug "kevinhwang91/nvim-hlslens"
-Plug "nvim-lua/plenary.nvim"
-Plug "nvim-telescope/telescope.nvim"
-Plug "nvim-telescope/telescope-file-browser.nvim"
-Plug "smoka7/hop.nvim"
-Plug "nvim-mini/mini.cursorword"
-Plug "nvim-mini/mini.surround"
-Plug "nvim-tree/nvim-tree.lua"
-
--- Completion
-Plug "neovim/nvim-lspconfig"
-Plug "hrsh7th/nvim-cmp"
-Plug "hrsh7th/cmp-nvim-lsp"
-Plug "hrsh7th/cmp-buffer"
-Plug "hrsh7th/cmp-path"
-Plug "hrsh7th/cmp-cmdline"
-Plug "hrsh7th/cmp-nvim-lsp-signature-help"
-Plug "SirVer/ultisnips"
-Plug "quangnguyen30192/cmp-nvim-ultisnips"
-Plug "honza/vim-snippets"
-
--- Programming
-Plug "dense-analysis/ale"
-Plug "tpope/vim-fugitive"
-Plug "lewis6991/gitsigns.nvim"
-Plug "stevearc/conform.nvim"
-Plug "windwp/nvim-autopairs"
-
-vim.call("plug#end")
--- }}
+opt.undodir = datapath .. "/undo"
+opt.viewdir = datapath .. "/views"
+
+-- Bootstrap lazy.nvim
+local lazypath = datapath .. "/lazy/lazy.nvim"
+if not vim.uv.fs_stat(lazypath) then
+ vim.fn.system({
+ "git", "clone", "--filter=blob:none",
+ "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath,
+ })
+end
+opt.rtp:prepend(lazypath)
+
+require("lazy").setup({
+ -- UI & Themes
+ { "rmehri01/onenord.nvim", priority = 1000, config = function() vim.cmd.colorscheme("onenord") end },
+ { "ellisonleao/gruvbox.nvim" },
+ { "nvim-lualine/lualine.nvim", opts = {} },
+ { "nvim-mini/mini.icons", config = function()
+ require("mini.icons").setup()
+ require("mini.icons").mock_nvim_web_devicons()
+ end },
+ { "lukas-reineke/indent-blankline.nvim", main = "ibl", opts = {} },
+ { "nvim-focus/focus.nvim", opts = {} },
+ { "nxhung2304/lastplace.nvim", opts = {} },
+ { "kevinhwang91/nvim-hlslens", opts = {} },
+ { "nvim-lua/plenary.nvim" },
+
+ -- Telescope
+ { "nvim-telescope/telescope.nvim",
+ dependencies = { "nvim-telescope/telescope-file-browser.nvim" },
+ keys = {
+ { "b", "Telescope buffers", desc = "Buffers" },
+ { "f", function()
+ local builtin = require("telescope.builtin")
+ if not pcall(builtin.git_files) then builtin.find_files() end
+ end, desc = "Find Files" },
+ },
+ config = function()
+ require("telescope").setup{}
+ require("telescope").load_extension("file_browser")
+ end
+ },
+ -- Navigation & Editing
+ { "smoka7/hop.nvim",
+ keys = { { "", "HopWord", desc = "Hop Word" } },
+ opts = {}
+ },
+ { "nvim-mini/mini.cursorword", opts = {} },
+ { "nvim-mini/mini.surround", opts = {} },
+ { "nvim-tree/nvim-tree.lua",
+ keys = { { "e", "NvimTreeFindFileToggle", desc = "Tree" } },
+ opts = {}
+ },
--- UI {{
+ -- LSP & Completion
+ { "neovim/nvim-lspconfig", config = function()
+ vim.lsp.config("*", { capabilities = require("cmp_nvim_lsp").default_capabilities() })
+ vim.lsp.enable({"clangd", "cmake", "pylsp"})
+ end },
+ { "hrsh7th/nvim-cmp",
+ dependencies = {
+ "hrsh7th/cmp-nvim-lsp",
+ "hrsh7th/cmp-buffer",
+ "hrsh7th/cmp-path",
+ "hrsh7th/cmp-cmdline",
+ "hrsh7th/cmp-nvim-lsp-signature-help",
+ "quangnguyen30192/cmp-nvim-ultisnips",
+ },
+ config = function()
+ local cmp = require("cmp")
+ cmp.setup({
+ snippet = { expand = function(args) vim.fn["UltiSnips#Anon"](args.body) end },
+ mapping = cmp.mapping.preset.insert({
+ [""] = cmp.mapping.select_prev_item(),
+ [""] = cmp.mapping.select_next_item(),
+ [""] = cmp.mapping.scroll_docs(-4),
+ [""] = cmp.mapping.scroll_docs(4),
+ [""] = cmp.mapping.complete(),
+ [""] = cmp.mapping.close(),
+ [""] = cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = true }),
+ [""] = cmp.mapping(cmp.mapping.select_next_item(), { "i", "s" }),
+ [""] = cmp.mapping(cmp.mapping.select_prev_item(), { "i", "s" }),
+ }),
+ sources = cmp.config.sources({
+ { name = "nvim_lsp" },
+ { name = "ultisnips" },
+ { name = "nvim_lsp_signature_help" }
+ }, {
+ { name = "buffer" },
+ })
+ })
+ cmp.setup.filetype("gitcommit", { sources = cmp.config.sources({{ name = "buffer" }}) })
+ cmp.setup.cmdline("/", { mapping = cmp.mapping.preset.cmdline(), sources = {{ name = "buffer" }} })
+ cmp.setup.cmdline(":", {
+ mapping = cmp.mapping.preset.cmdline(),
+ sources = cmp.config.sources({{ name = "path" }}, {{ name = "cmdline" }})
+ })
+ end
+ },
+ { "SirVer/ultisnips" },
+ { "honza/vim-snippets" },
+
+ -- Programming
+ { "dense-analysis/ale" },
+ { "tpope/vim-fugitive",
+ keys = {
+ { "gs", "Git", desc = "Git" },
+ { "gc", "Git commit", desc = "Git Commit" },
+ }
+ },
+ { "lewis6991/gitsigns.nvim", opts = {} },
+ { "stevearc/conform.nvim", opts = {
+ formatters_by_ft = {
+ ["_"] = { "trim_whitespace" },
+ c = { "clang-format" },
+ cpp = { "clang-format" },
+ python = { "ruff_format", "ruff_organize_imports" },
+ },
+ format_on_save = { timeout_ms = 500, lsp_format = "fallback" },
+ }},
+ { "windwp/nvim-autopairs", opts = {} },
+}, { checker = { enabled = false } })
+
+-- UI
require("vim._core.ui2").enable()
-
-vim.opt.background = "dark"
-vim.cmd([[colorscheme onenord]])
+opt.background = "dark"
vim.diagnostic.config({ virtual_text = true })
--- }}
-
-
--- Plugin Settings {{
-require("lualine").setup{}
-require("ibl").setup{}
-require("gitsigns").setup{}
-require("nvim-autopairs").setup{}
-require('mini.surround').setup()
-require("nvim-tree").setup{}
-require("hlslens").setup{}
-require("mini.icons").setup()
-require("lastplace").setup{}
-require("focus").setup{}
-require('mini.cursorword').setup{}
-
--- nvim-cmp
-local cmp = require("cmp")
-cmp.setup({
- snippet = {
- expand = function(args)
- vim.fn["UltiSnips#Anon"](args.body)
- end,
- },
- mapping = cmp.mapping.preset.insert({
- [""] = cmp.mapping.select_prev_item(),
- [""] = cmp.mapping.select_next_item(),
- [""] = cmp.mapping.scroll_docs(-4),
- [""] = cmp.mapping.scroll_docs(4),
- [""] = cmp.mapping.complete(),
- [""] = cmp.mapping.close(),
- [""] = cmp.mapping.confirm({
- behavior = cmp.ConfirmBehavior.Replace,
- select = true,
- }),
- [""] = cmp.mapping(cmp.mapping.select_next_item(), { "i", "s" }),
- [""] = cmp.mapping(cmp.mapping.select_prev_item(), { "i", "s" }),
- }),
- sources = cmp.config.sources({
- { name = "nvim_lsp" },
- { name = "ultisnips" },
- { name = "nvim_lsp_signature_help" }
- }, {
- { name = "buffer" },
- })
-})
-
--- Set configuration for specific file type
-cmp.setup.filetype("gitcommit", {
- sources = cmp.config.sources({{ name = "buffer" }})
-})
-
--- Use buffer source for `/`
-cmp.setup.cmdline("/", {
- mapping = cmp.mapping.preset.cmdline(),
- sources = {{ name = "buffer" }}
-})
--- Use cmdline & path source for ":"
-cmp.setup.cmdline(":", {
- mapping = cmp.mapping.preset.cmdline(),
- sources = cmp.config.sources({{ name = "path" }}, {{ name = "cmdline" }})
-})
-
--- Setup LSP
-vim.lsp.config("*", { capabilities = require("cmp_nvim_lsp").default_capabilities() })
-vim.lsp.enable({"clangd", "cmake", "pylsp"})
-vim.lsp.log.set_level("off")
-
--- ALE
+-- Plugin settings
vim.g.ale_use_neovim_diagnostics_api = 1
vim.g.ale_disable_lsp = 1
vim.g.ale_lint_on_text_changed = "normal"
vim.g.ale_lint_on_insert_leave = 1
-
--- Fugitive
-vim.keymap.set("n", "gs", ":Git", { noremap = true, silent = true})
-vim.keymap.set("n", "gc", ":Git commit", { noremap = true, silent = true})
-
--- Hop
-require("hop").setup{}
-vim.keymap.set("", "", ":HopWord", { noremap = true, silent = true })
-
--- Telescope
-local telescope = require("telescope")
-telescope.setup{}
-telescope.load_extension("file_browser")
-local builtin = require("telescope.builtin")
-vim.keymap.set("n", "b", builtin.buffers, { silent = true })
-vim.keymap.set("n", "f", function()
- if not pcall(builtin.git_files) then builtin.find_files() end
-end, { silent = true })
-
--- Nvim-Tree
-vim.keymap.set("n", "e", ":NvimTreeFindFileToggle", { noremap = true, silent = true })
-
--- UltiSnips
vim.g.UltiSnipsJumpForwardTrigger = ""
vim.g.UltiSnipsJumpBackwardTrigger = ""
--- Mini Icons
-require("mini.icons").mock_nvim_web_devicons()
-
--- Undo
vim.cmd("packadd nvim.undotree")
-vim.keymap.set('n', '', function() vim.cmd("Undotree") end, { noremap = true, silent = true })
-
--- Conform
-require("conform").setup({
- formatters_by_ft = {
- ["_"] = { "trim_whitespace" },
- c = { "clang-format" },
- cpp = { "clang-format" },
- python = { "ruff_format", "ruff_organize_imports" },
- },
- format_on_save = {
- timeout_ms = 500,
- lsp_format = "fallback",
- },
-})
--- }}
+vim.keymap.set('n', '', "Undotree", { silent = true })