diff --git a/colors/nvchad.lua b/colors/nvchad.lua new file mode 100644 index 0000000..f35cc9b --- /dev/null +++ b/colors/nvchad.lua @@ -0,0 +1,2 @@ +dofile(vim.g.base46_cache .. "defaults") +dofile(vim.g.base46_cache .. "statusline") diff --git a/init.lua b/init.lua deleted file mode 100644 index 21f0b6f..0000000 --- a/init.lua +++ /dev/null @@ -1,21 +0,0 @@ -require "core" - -local custom_init_path = vim.api.nvim_get_runtime_file("lua/custom/init.lua", false)[1] - -if custom_init_path then - dofile(custom_init_path) -end - -require("core.utils").load_mappings() - -local lazypath = vim.fn.stdpath "data" .. "/lazy/lazy.nvim" - --- bootstrap lazy.nvim! -if not vim.loop.fs_stat(lazypath) then - require("core.bootstrap").gen_chadrc_template() - require("core.bootstrap").lazy(lazypath) -end - -dofile(vim.g.base46_cache .. "defaults") -vim.opt.rtp:prepend(lazypath) -require "plugins" diff --git a/lua/core/init.lua b/lua/core/init.lua deleted file mode 100644 index 19804e1..0000000 --- a/lua/core/init.lua +++ /dev/null @@ -1,115 +0,0 @@ -local opt = vim.opt -local g = vim.g -local config = require("core.utils").load_config() - --------------------------------------- globals ----------------------------------------- -g.nvchad_theme = config.ui.theme -g.base46_cache = vim.fn.stdpath "data" .. "/nvchad/base46/" -g.toggle_theme_icon = "  " -g.transparency = config.ui.transparency - --------------------------------------- options ------------------------------------------ -opt.laststatus = 3 -- global statusline -opt.showmode = false - -opt.clipboard = "unnamedplus" -opt.cursorline = true - --- Indenting -opt.expandtab = true -opt.shiftwidth = 2 -opt.smartindent = true -opt.tabstop = 2 -opt.softtabstop = 2 - -opt.fillchars = { eob = " " } -opt.ignorecase = true -opt.smartcase = true -opt.mouse = "a" - --- Numbers -opt.number = true -opt.numberwidth = 2 -opt.ruler = false - --- disable nvim intro -opt.shortmess:append "sI" - -opt.signcolumn = "yes" -opt.splitbelow = true -opt.splitright = true -opt.termguicolors = true -opt.timeoutlen = 400 -opt.undofile = true - --- interval for writing swap file to disk, also used by gitsigns -opt.updatetime = 250 - --- go to previous/next line with h,l,left arrow and right arrow --- when cursor reaches end/beginning of line -opt.whichwrap:append "<>[]hl" - -g.mapleader = " " - --- disable some default providers -for _, provider in ipairs { "node", "perl", "python3", "ruby" } do - vim.g["loaded_" .. provider .. "_provider"] = 0 -end - --- add binaries installed by mason.nvim to path -local is_windows = vim.loop.os_uname().sysname == "Windows_NT" -vim.env.PATH = vim.fn.stdpath "data" .. "/mason/bin" .. (is_windows and ";" or ":") .. vim.env.PATH - --------------------------------------- autocmds ------------------------------------------ -local autocmd = vim.api.nvim_create_autocmd - --- dont list quickfix buffers -autocmd("FileType", { - pattern = "qf", - callback = function() - vim.opt_local.buflisted = false - end, -}) - --- reload some chadrc options on-save -autocmd("BufWritePost", { - pattern = vim.tbl_map(function(path) - return vim.fs.normalize(vim.loop.fs_realpath(path)) - end, vim.fn.glob(vim.fn.stdpath "config" .. "/lua/custom/**/*.lua", true, true, true)), - group = vim.api.nvim_create_augroup("ReloadNvChad", {}), - - callback = function(opts) - local fp = vim.fn.fnamemodify(vim.fs.normalize(vim.api.nvim_buf_get_name(opts.buf)), ":r") --[[@as string]] - local app_name = vim.env.NVIM_APPNAME and vim.env.NVIM_APPNAME or "nvim" - local module = string.gsub(fp, "^.*/" .. app_name .. "/lua/", ""):gsub("/", ".") - - require("plenary.reload").reload_module "base46" - require("plenary.reload").reload_module(module) - require("plenary.reload").reload_module "custom.chadrc" - - config = require("core.utils").load_config() - - vim.g.nvchad_theme = config.ui.theme - vim.g.transparency = config.ui.transparency - - -- statusline - require("plenary.reload").reload_module("nvchad.statusline." .. config.ui.statusline.theme) - vim.opt.statusline = "%!v:lua.require('nvchad.statusline." .. config.ui.statusline.theme .. "').run()" - - -- tabufline - if config.ui.tabufline.enabled then - require("plenary.reload").reload_module "nvchad.tabufline.modules" - vim.opt.tabline = "%!v:lua.require('nvchad.tabufline.modules').run()" - end - - require("base46").load_all_highlights() - -- vim.cmd("redraw!") - end, -}) - --------------------------------------- commands ------------------------------------------ -local new_cmd = vim.api.nvim_create_user_command - -new_cmd("NvChadUpdate", function() - require "nvchad.updater"() -end, {}) diff --git a/lua/core/utils.lua b/lua/core/utils.lua deleted file mode 100644 index 8b2a03d..0000000 --- a/lua/core/utils.lua +++ /dev/null @@ -1,118 +0,0 @@ -local M = {} -local merge_tb = vim.tbl_deep_extend - -M.load_config = function() - local config = require "core.default_config" - local chadrc_path = vim.api.nvim_get_runtime_file("lua/custom/chadrc.lua", false)[1] - - if chadrc_path then - local chadrc = dofile(chadrc_path) - - config.mappings = M.remove_disabled_keys(chadrc.mappings, config.mappings) - config = merge_tb("force", config, chadrc) - config.mappings.disabled = nil - end - - return config -end - -M.remove_disabled_keys = function(chadrc_mappings, default_mappings) - if not chadrc_mappings then - return default_mappings - end - - -- store keys in a array with true value to compare - local keys_to_disable = {} - for _, mappings in pairs(chadrc_mappings) do - for mode, section_keys in pairs(mappings) do - if not keys_to_disable[mode] then - keys_to_disable[mode] = {} - end - section_keys = (type(section_keys) == "table" and section_keys) or {} - for k, _ in pairs(section_keys) do - keys_to_disable[mode][k] = true - end - end - end - - -- make a copy as we need to modify default_mappings - for section_name, section_mappings in pairs(default_mappings) do - for mode, mode_mappings in pairs(section_mappings) do - mode_mappings = (type(mode_mappings) == "table" and mode_mappings) or {} - for k, _ in pairs(mode_mappings) do - -- if key if found then remove from default_mappings - if keys_to_disable[mode] and keys_to_disable[mode][k] then - default_mappings[section_name][mode][k] = nil - end - end - end - end - - return default_mappings -end - -M.load_mappings = function(section, mapping_opt) - vim.schedule(function() - local function set_section_map(section_values) - if section_values.plugin then - return - end - - section_values.plugin = nil - - for mode, mode_values in pairs(section_values) do - local default_opts = merge_tb("force", { mode = mode }, mapping_opt or {}) - for keybind, mapping_info in pairs(mode_values) do - -- merge default + user opts - local opts = merge_tb("force", default_opts, mapping_info.opts or {}) - - mapping_info.opts, opts.mode = nil, nil - opts.desc = mapping_info[2] - - vim.keymap.set(mode, keybind, mapping_info[1], opts) - end - end - end - - local mappings = require("core.utils").load_config().mappings - - if type(section) == "string" then - mappings[section]["plugin"] = nil - mappings = { mappings[section] } - end - - for _, sect in pairs(mappings) do - set_section_map(sect) - end - end) -end - -M.lazy_load = function(plugin) - vim.api.nvim_create_autocmd({ "BufRead", "BufWinEnter", "BufNewFile" }, { - group = vim.api.nvim_create_augroup("BeLazyOnFileOpen" .. plugin, {}), - callback = function() - local file = vim.fn.expand "%" - local condition = file ~= "NvimTree_1" and file ~= "[lazy]" and file ~= "" - - if condition then - vim.api.nvim_del_augroup_by_name("BeLazyOnFileOpen" .. plugin) - - -- dont defer for treesitter as it will show slow highlighting - -- This deferring only happens only when we do "nvim filename" - if plugin ~= "nvim-treesitter" then - vim.schedule(function() - require("lazy").load { plugins = plugin } - - if plugin == "nvim-lspconfig" then - vim.cmd "silent! do FileType" - end - end, 0) - else - require("lazy").load { plugins = plugin } - end - end - end, - }) -end - -return M diff --git a/lua/nvchad/autocmds.lua b/lua/nvchad/autocmds.lua new file mode 100644 index 0000000..4583e42 --- /dev/null +++ b/lua/nvchad/autocmds.lua @@ -0,0 +1,70 @@ +local autocmd = vim.api.nvim_create_autocmd + +-- dont list quickfix buffers +autocmd("FileType", { + pattern = "qf", + callback = function() + vim.opt_local.buflisted = false + end, +}) + +-- reload some chadrc options on-save +autocmd("BufWritePost", { + pattern = vim.tbl_map(function(path) + return vim.fs.normalize(vim.loop.fs_realpath(path)) + end, vim.fn.glob(vim.fn.stdpath "config" .. "/lua/**/*.lua", true, true, true)), + group = vim.api.nvim_create_augroup("ReloadNvChad", {}), + + callback = function(opts) + local fp = vim.fn.fnamemodify(vim.fs.normalize(vim.api.nvim_buf_get_name(opts.buf)), ":r") --[[@as string]] + local app_name = vim.env.NVIM_APPNAME and vim.env.NVIM_APPNAME or "nvim" + local module = string.gsub(fp, "^.*/" .. app_name .. "/lua/", ""):gsub("/", ".") + + require("plenary.reload").reload_module "nvconfig" + require("plenary.reload").reload_module "chadrc" + require("plenary.reload").reload_module "base46" + require("plenary.reload").reload_module(module) + + local config = require "nvconfig" + + -- statusline + require("plenary.reload").reload_module "nvchad.stl.utils" + require("plenary.reload").reload_module("nvchad.stl." .. config.ui.statusline.theme) + vim.opt.statusline = "%!v:lua.require('nvchad.stl." .. config.ui.statusline.theme .. "')()" + + -- tabufline + if config.ui.tabufline.enabled then + require("plenary.reload").reload_module "nvchad.tabufline.modules" + vim.opt.tabline = "%!v:lua.require('nvchad.tabufline.modules')()" + end + + require("base46").load_all_highlights() + -- vim.cmd("redraw!") + end, +}) + +-- user event that loads after UIEnter + only if file buf is there +vim.api.nvim_create_autocmd({ "UIEnter", "BufReadPost", "BufNewFile" }, { + group = vim.api.nvim_create_augroup("NvFilePost", { clear = true }), + callback = function(args) + local file = vim.api.nvim_buf_get_name(args.buf) + local buftype = vim.api.nvim_buf_get_option(args.buf, "buftype") + + if not vim.g.ui_entered and args.event == "UIEnter" then + vim.g.ui_entered = true + end + + if file ~= "" and buftype ~= "nofile" and vim.g.ui_entered then + vim.api.nvim_exec_autocmds("User", { pattern = "FilePost", modeline = false }) + vim.api.nvim_del_augroup_by_name "NvFilePost" + + vim.schedule(function() + vim.api.nvim_exec_autocmds("FileType", {}) + + if vim.g.editorconfig then + require("editorconfig").config(args.buf) + end + end, 0) + end + end, +}) diff --git a/lua/plugins/configs/cmp.lua b/lua/nvchad/configs/cmp.lua similarity index 95% rename from lua/plugins/configs/cmp.lua rename to lua/nvchad/configs/cmp.lua index 444da73..46f8864 100644 --- a/lua/plugins/configs/cmp.lua +++ b/lua/nvchad/configs/cmp.lua @@ -2,7 +2,7 @@ local cmp = require "cmp" dofile(vim.g.base46_cache .. "cmp") -local cmp_ui = require("core.utils").load_config().ui.cmp +local cmp_ui = require("nvconfig").ui.cmp local cmp_style = cmp_ui.style local field_arrangement = { @@ -75,10 +75,12 @@ local options = { [""] = cmp.mapping.scroll_docs(4), [""] = cmp.mapping.complete(), [""] = cmp.mapping.close(), + [""] = cmp.mapping.confirm { behavior = cmp.ConfirmBehavior.Insert, select = true, }, + [""] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_next_item() @@ -87,10 +89,8 @@ local options = { else fallback() end - end, { - "i", - "s", - }), + end, { "i", "s" }), + [""] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_prev_item() @@ -99,10 +99,7 @@ local options = { else fallback() end - end, { - "i", - "s", - }), + end, { "i", "s" }), }, sources = { { name = "nvim_lsp" }, diff --git a/lua/nvchad/configs/gitsigns.lua b/lua/nvchad/configs/gitsigns.lua new file mode 100644 index 0000000..27f3105 --- /dev/null +++ b/lua/nvchad/configs/gitsigns.lua @@ -0,0 +1,26 @@ +local options = { + signs = { + add = { text = "│" }, + change = { text = "│" }, + delete = { text = "󰍵" }, + topdelete = { text = "‾" }, + changedelete = { text = "~" }, + untracked = { text = "│" }, + }, + + on_attach = function(bufnr) + local gs = package.loaded.gitsigns + + local function opts(desc) + return { buffer = bufnr, desc = desc } + end + + local map = vim.keymap.set + + map("n", "rh", gs.reset_hunk, opts "Reset Hunk") + map("n", "ph", gs.preview_hunk, opts "Preview Hunk") + map("n", "gb", gs.blame_line, opts "Blame Line") + end, +} + +return options diff --git a/lua/plugins/configs/lazy_nvim.lua b/lua/nvchad/configs/lazy_nvim.lua similarity index 100% rename from lua/plugins/configs/lazy_nvim.lua rename to lua/nvchad/configs/lazy_nvim.lua diff --git a/lua/nvchad/configs/lspconfig.lua b/lua/nvchad/configs/lspconfig.lua new file mode 100644 index 0000000..e80b190 --- /dev/null +++ b/lua/nvchad/configs/lspconfig.lua @@ -0,0 +1,94 @@ +local M = {} +local map = vim.keymap.set +local conf = require("nvconfig").ui.lsp + +-- export on_attach & capabilities +M.on_attach = function(client, bufnr) + local function opts(desc) + return { buffer = bufnr, desc = desc } + end + + map("n", "gD", vim.lsp.buf.declaration, opts "Lsp Go to declaration") + map("n", "gd", vim.lsp.buf.definition, opts "Lsp Go to definition") + map("n", "K", vim.lsp.buf.hover, opts "Lsp hover information") + map("n", "gi", vim.lsp.buf.implementation, opts "Lsp Go to implementation") + map("n", "sh", vim.lsp.buf.signature_help, opts "Lsp Show signature help") + map("n", "wa", vim.lsp.buf.add_workspace_folder, opts "Lsp Add workspace folder") + map("n", "wr", vim.lsp.buf.remove_workspace_folder, opts "Lsp Remove workspace folder") + + map("n", "wl", function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, opts "Lsp List workspace folders") + + map("n", "D", vim.lsp.buf.type_definition, opts "Lsp Go to type definition") + + map("n", "ra", function() + require "nvchad.lsp.renamer"() + end, opts "Lsp NvRenamer") + + map({ "n", "v" }, "ca", vim.lsp.buf.code_action, opts "Lsp Code action") + map("n", "gr", vim.lsp.buf.references, opts "Lsp Show references") + + -- setup signature popup + if conf.signature and client.server_capabilities.signatureHelpProvider then + require("nvchad.lsp.signature").setup(client, bufnr) + end +end + +-- disable semanticTokens +M.on_init = function(client, _) + if not conf.semantic_tokens and client.supports_method "textDocument/semanticTokens" then + client.server_capabilities.semanticTokensProvider = nil + end +end + +M.capabilities = vim.lsp.protocol.make_client_capabilities() + +M.capabilities.textDocument.completion.completionItem = { + documentationFormat = { "markdown", "plaintext" }, + snippetSupport = true, + preselectSupport = true, + insertReplaceSupport = true, + labelDetailsSupport = true, + deprecatedSupport = true, + commitCharactersSupport = true, + tagSupport = { valueSet = { 1 } }, + resolveSupport = { + properties = { + "documentation", + "detail", + "additionalTextEdits", + }, + }, +} + +M.defaults = function() + dofile(vim.g.base46_cache .. "lsp") + require "nvchad.lsp" + + require("lspconfig").lua_ls.setup { + on_attach = M.on_attach, + capabilities = M.capabilities, + on_init = M.on_init, + + settings = { + Lua = { + diagnostics = { + globals = { "vim" }, + }, + workspace = { + library = { + [vim.fn.expand "$VIMRUNTIME/lua"] = true, + [vim.fn.expand "$VIMRUNTIME/lua/vim/lsp"] = true, + [vim.fn.stdpath "data" .. "/lazy/ui/nvchad_types"] = true, + [vim.fn.stdpath "data" .. "/lazy/lazy.nvim/lua/lazy"] = true, + }, + maxPreload = 100000, + preloadFileSize = 10000, + }, + }, + }, + } +end + +return M diff --git a/lua/nvchad/configs/luasnip.lua b/lua/nvchad/configs/luasnip.lua new file mode 100644 index 0000000..f164d11 --- /dev/null +++ b/lua/nvchad/configs/luasnip.lua @@ -0,0 +1,23 @@ +-- vscode format +require("luasnip.loaders.from_vscode").lazy_load { exclude = vim.g.vscode_snippets_exclude or {} } +require("luasnip.loaders.from_vscode").lazy_load { paths = "your path!" } +require("luasnip.loaders.from_vscode").lazy_load { paths = vim.g.vscode_snippets_path or "" } + +-- snipmate format +require("luasnip.loaders.from_snipmate").load() +require("luasnip.loaders.from_snipmate").lazy_load { paths = vim.g.snipmate_snippets_path or "" } + +-- lua format +require("luasnip.loaders.from_lua").load() +require("luasnip.loaders.from_lua").lazy_load { paths = vim.g.lua_snippets_path or "" } + +vim.api.nvim_create_autocmd("InsertLeave", { + callback = function() + if + require("luasnip").session.current_nodes[vim.api.nvim_get_current_buf()] + and not require("luasnip").session.jump_active + then + require("luasnip").unlink_current() + end + end, +}) diff --git a/lua/plugins/configs/mason.lua b/lua/nvchad/configs/mason.lua similarity index 84% rename from lua/plugins/configs/mason.lua rename to lua/nvchad/configs/mason.lua index 3692a15..a87f593 100644 --- a/lua/plugins/configs/mason.lua +++ b/lua/nvchad/configs/mason.lua @@ -1,5 +1,5 @@ local options = { - ensure_installed = { "lua-language-server" }, -- not an option from mason.nvim + ensure_installed = { "lua-language-server", 'stylua' }, -- not an option from mason.nvim PATH = "skip", diff --git a/lua/plugins/configs/nvimtree.lua b/lua/nvchad/configs/nvimtree.lua similarity index 90% rename from lua/plugins/configs/nvimtree.lua rename to lua/nvchad/configs/nvimtree.lua index b4a8aee..da68148 100644 --- a/lua/plugins/configs/nvimtree.lua +++ b/lua/nvchad/configs/nvimtree.lua @@ -1,7 +1,6 @@ local options = { filters = { dotfiles = false, - exclude = { vim.fn.stdpath "config" .. "/lua/custom" }, }, disable_netrw = true, hijack_netrw = true, @@ -19,7 +18,7 @@ local options = { preserve_window_proportions = true, }, git = { - enable = false, + enable = true, ignore = true, }, filesystem_watchers = { @@ -32,11 +31,11 @@ local options = { }, renderer = { root_folder_label = false, - highlight_git = false, + highlight_git = true, highlight_opened_files = "none", indent_markers = { - enable = false, + enable = true, }, icons = { @@ -44,7 +43,7 @@ local options = { file = true, folder = true, folder_arrow = true, - git = false, + git = true, }, glyphs = { diff --git a/lua/plugins/configs/telescope.lua b/lua/nvchad/configs/telescope.lua similarity index 90% rename from lua/plugins/configs/telescope.lua rename to lua/nvchad/configs/telescope.lua index 784fb19..0df500e 100644 --- a/lua/plugins/configs/telescope.lua +++ b/lua/nvchad/configs/telescope.lua @@ -50,6 +50,14 @@ local options = { }, extensions_list = { "themes", "terms" }, + extensions = { + fzf = { + fuzzy = true, + override_generic_sorter = true, + override_file_sorter = true, + case_mode = "smart_case", + }, + }, } return options diff --git a/lua/plugins/configs/treesitter.lua b/lua/nvchad/configs/treesitter.lua similarity index 73% rename from lua/plugins/configs/treesitter.lua rename to lua/nvchad/configs/treesitter.lua index b21b55d..897c4e3 100644 --- a/lua/plugins/configs/treesitter.lua +++ b/lua/nvchad/configs/treesitter.lua @@ -1,5 +1,5 @@ local options = { - ensure_installed = { "lua" }, + ensure_installed = { "lua", "vim", "vimdoc" }, highlight = { enable = true, diff --git a/lua/nvchad/mappings.lua b/lua/nvchad/mappings.lua new file mode 100644 index 0000000..3342751 --- /dev/null +++ b/lua/nvchad/mappings.lua @@ -0,0 +1,135 @@ +local map = vim.keymap.set + +map("i", "", "^i", { desc = "Move Beginning of line" }) +map("i", "", "", { desc = "Move End of line" }) +map("i", "", "", { desc = "Move Left" }) +map("i", "", "", { desc = "Move Right" }) +map("i", "", "", { desc = "Move Down" }) +map("i", "", "", { desc = "Move Up" }) + +map("n", "", "noh", { desc = "General Clear highlights" }) + +map("n", "", "h", { desc = "Switch Window left" }) +map("n", "", "l", { desc = "Switch Window right" }) +map("n", "", "j", { desc = "Switch Window down" }) +map("n", "", "k", { desc = "Switch Window up" }) + +map("n", "", "w", { desc = "File Save" }) +map("n", "", "%y+", { desc = "File Copy whole" }) + +map("n", "n", "set nu!", { desc = "Toggle Line number" }) +map("n", "rn", "set rnu!", { desc = "Toggle Relative number" }) +map("n", "ch", "NvCheatsheet", { desc = "Toggle NvCheatsheet" }) + +map("n", "fm", function() + require("conform").format { lsp_fallback = true } +end, { desc = "Format Files" }) + +-- global lsp mappings +map("n", "lf", vim.diagnostic.open_float, { desc = "Lsp floating diagnostics" }) +map("n", "[d", vim.diagnostic.goto_prev, { desc = "Lsp prev diagnostic" }) +map("n", "]d", vim.diagnostic.goto_next, { desc = "Lsp next diagnostic" }) +map("n", "q", vim.diagnostic.setloclist, { desc = "Lsp diagnostic loclist" }) + +-- tabufline +map("n", "b", "enew", { desc = "Buffer New" }) + +map("n", "", function() + require("nvchad.tabufline").next() +end, { desc = "Buffer Goto next" }) + +map("n", "", function() + require("nvchad.tabufline").prev() +end, { desc = "Buffer Goto prev" }) + +map("n", "x", function() + require("nvchad.tabufline").close_buffer() +end, { desc = "Buffer Close" }) + +-- Comment +map("n", "/", function() + require("Comment.api").toggle.linewise.current() +end, { desc = "Comment Toggle" }) + +map( + "v", + "/", + "lua require('Comment.api').toggle.linewise(vim.fn.visualmode())", + { desc = "Comment Toggle" } +) + +-- nvimtree +map("n", "", "NvimTreeToggle", { desc = "Nvimtree Toggle window" }) +map("n", "e", "NvimTreeFocus", { desc = "Nvimtree Focus window" }) + +-- telescope +map("n", "fw", "Telescope live_grep", { desc = "Telescope Live grep" }) +map("n", "fb", "Telescope buffers", { desc = "Telescope Find buffers" }) +map("n", "fh", "Telescope help_tags", { desc = "Telescope Help page" }) + +map("n", "fo", "Telescope oldfiles", { desc = "Telescope Find oldfiles" }) +map("n", "fz", "Telescope current_buffer_fuzzy_find", { desc = "Telescope Find in current buffer" }) +map("n", "cm", "Telescope git_commits", { desc = "Telescope Git commits" }) +map("n", "gt", "Telescope git_status", { desc = "Telescope Git status" }) +map("n", "pt", "Telescope terms", { desc = "Telescope Pick hidden term" }) +map("n", "th", "Telescope themes", { desc = "Telescope Nvchad themes" }) +map("n", "ff", "Telescope find_files", { desc = "Telescope Find files" }) +map( + "n", + "fa", + "Telescope find_files follow=true no_ignore=true hidden=true", + { desc = "Telescope Find all files" } +) + +-- terminal +map("t", "", "", { desc = "Terminal Escape terminal mode" }) + +-- new terminals +map("n", "h", function() + require("nvchad.term").new { pos = "sp", size = 0.3 } +end, { desc = "Terminal New horizontal term" }) + +map("n", "v", function() + require("nvchad.term").new { pos = "vsp", size = 0.3 } +end, { desc = "Terminal New vertical window" }) + +-- toggleable +map({ "n", "t" }, "", function() + require("nvchad.term").toggle { pos = "vsp", id = "vtoggleTerm", size = 0.3 } +end, { desc = "Terminal Toggleable vertical term" }) + +map({ "n", "t" }, "", function() + require("nvchad.term").toggle { pos = "sp", id = "htoggleTerm", size = 0.3 } +end, { desc = "Terminal New horizontal term" }) + +map({ "n", "t" }, "", function() + require("nvchad.term").toggle { pos = "float", id = "floatTerm" } +end, { desc = "Terminal Toggle Floating term" }) + +map("t", "", function() + local win = vim.api.nvim_get_current_win() + vim.api.nvim_win_close(win, true) +end, { desc = "Terminal Close term in terminal mode" }) + +-- whichkey +map("n", "wK", "WhichKey ", { desc = "Whichkey all keymaps" }) + +map("n", "wk", function() + vim.cmd("WhichKey " .. vim.fn.input "WhichKey: ") +end, { desc = "Whichkey query lookup" }) + +-- blankline +map("n", "cc", function() + local config = { scope = {} } + config.scope.exclude = { language = {}, node_type = {} } + config.scope.include = { node_type = {} } + local node = require("ibl.scope").get(vim.api.nvim_get_current_buf(), config) + + if node then + local start_row, _, end_row, _ = node:range() + if start_row ~= end_row then + vim.api.nvim_win_set_cursor(vim.api.nvim_get_current_win(), { start_row + 1, 0 }) + vim.api.nvim_feedkeys("_", "n", true) + end + end +end, { desc = "Blankline Jump to current context" }) diff --git a/lua/nvchad/options.lua b/lua/nvchad/options.lua new file mode 100644 index 0000000..26350b7 --- /dev/null +++ b/lua/nvchad/options.lua @@ -0,0 +1,59 @@ +local opt = vim.opt +local o = vim.o +local g = vim.g + +-------------------------------------- globals ----------------------------------------- +g.toggle_theme_icon = "  " + +-------------------------------------- options ------------------------------------------ +o.laststatus = 3 +o.showmode = false + +o.clipboard = "unnamedplus" +o.cursorline = true +o.cursorlineopt = "number" + +-- Indenting +o.expandtab = true +o.shiftwidth = 2 +o.smartindent = true +o.tabstop = 2 +o.softtabstop = 2 + +opt.fillchars = { eob = " " } +o.ignorecase = true +o.smartcase = true +o.mouse = "a" + +-- Numbers +o.number = true +o.numberwidth = 2 +o.ruler = false + +-- disable nvim intro +opt.shortmess:append "sI" + +o.signcolumn = "yes" +o.splitbelow = true +o.splitright = true +o.timeoutlen = 400 +o.undofile = true + +-- interval for writing swap file to disk, also used by gitsigns +o.updatetime = 250 + +-- go to previous/next line with h,l,left arrow and right arrow +-- when cursor reaches end/beginning of line +opt.whichwrap:append "<>[]hl" + +-- g.mapleader = " " + +-- disable some default providers +vim.g["loaded_node_provider"] = 0 +vim.g["loaded_python3_provider"] = 0 +vim.g["loaded_perl_provider"] = 0 +vim.g["loaded_ruby_provider"] = 0 + +-- add binaries installed by mason.nvim to path +local is_windows = vim.fn.has("win32") ~= 0 +vim.env.PATH = vim.fn.stdpath "data" .. "/mason/bin" .. (is_windows and ";" or ":") .. vim.env.PATH diff --git a/lua/nvchad/plugins/init.lua b/lua/nvchad/plugins/init.lua new file mode 100644 index 0000000..4669a3d --- /dev/null +++ b/lua/nvchad/plugins/init.lua @@ -0,0 +1,158 @@ +return { + + "nvim-lua/plenary.nvim", + + -- formatting! + { + "stevearc/conform.nvim", + opts = { + formatters_by_ft = { + lua = { "stylua" }, + }, + }, + config = function(_, opts) + require("conform").setup(opts) + end, + }, + + { + "nvim-treesitter/nvim-treesitter", + event = { "BufReadPost", "BufNewFile" }, + cmd = { "TSInstall", "TSBufEnable", "TSBufDisable", "TSModuleInfo" }, + build = ":TSUpdate", + opts = function() + return require "nvchad.configs.treesitter" + end, + config = function(_, opts) + dofile(vim.g.base46_cache .. "syntax") + dofile(vim.g.base46_cache .. "treesitter") + require("nvim-treesitter.configs").setup(opts) + end, + }, + + -- git stuff + { + "lewis6991/gitsigns.nvim", + event = "User FilePost", + opts = function() + return require "nvchad.configs.gitsigns" + end, + config = function(_, opts) + dofile(vim.g.base46_cache .. "git") + require("gitsigns").setup(opts) + end, + }, + + -- lsp stuff + { + "williamboman/mason.nvim", + cmd = { "Mason", "MasonInstall", "MasonInstallAll", "MasonUpdate" }, + opts = function() + return require "nvchad.configs.mason" + end, + config = function(_, opts) + dofile(vim.g.base46_cache .. "mason") + require("mason").setup(opts) + + -- custom nvchad cmd to install all mason binaries listed + vim.api.nvim_create_user_command("MasonInstallAll", function() + if opts.ensure_installed and #opts.ensure_installed > 0 then + vim.cmd("MasonInstall " .. table.concat(opts.ensure_installed, " ")) + end + end, {}) + + vim.g.mason_binaries_list = opts.ensure_installed + end, + }, + + { + "neovim/nvim-lspconfig", + event = "User FilePost", + config = function() + require("nvchad.configs.lspconfig").defaults() + end, + }, + + -- load luasnips + cmp related in insert mode only + { + "hrsh7th/nvim-cmp", + event = "InsertEnter", + dependencies = { + { + -- snippet plugin + "L3MON4D3/LuaSnip", + dependencies = "rafamadriz/friendly-snippets", + opts = { history = true, updateevents = "TextChanged,TextChangedI" }, + config = function(_, opts) + require("luasnip").config.set_config(opts) + require "nvchad.configs.luasnip" + end, + }, + + -- autopairing of (){}[] etc + { + "windwp/nvim-autopairs", + opts = { + fast_wrap = {}, + disable_filetype = { "TelescopePrompt", "vim" }, + }, + config = function(_, opts) + require("nvim-autopairs").setup(opts) + + -- setup cmp for autopairs + local cmp_autopairs = require "nvim-autopairs.completion.cmp" + require("cmp").event:on("confirm_done", cmp_autopairs.on_confirm_done()) + end, + }, + + -- cmp sources plugins + { + "saadparwaiz1/cmp_luasnip", + "hrsh7th/cmp-nvim-lua", + "hrsh7th/cmp-nvim-lsp", + "hrsh7th/cmp-buffer", + "hrsh7th/cmp-path", + }, + }, + opts = function() + return require "nvchad.configs.cmp" + end, + config = function(_, opts) + require("cmp").setup(opts) + end, + }, + + { + "numToStr/Comment.nvim", + keys = { + { "gcc", mode = "n", desc = "Comment toggle current line" }, + { "gc", mode = { "n", "o" }, desc = "Comment toggle linewise" }, + { "gc", mode = "x", desc = "Comment toggle linewise (visual)" }, + { "gbc", mode = "n", desc = "Comment toggle current block" }, + { "gb", mode = { "n", "o" }, desc = "Comment toggle blockwise" }, + { "gb", mode = "x", desc = "Comment toggle blockwise (visual)" }, + }, + config = function(_, opts) + require("Comment").setup(opts) + end, + }, + + { + "nvim-telescope/telescope.nvim", + dependencies = { "nvim-treesitter/nvim-treesitter" }, + cmd = "Telescope", + opts = function() + return require "nvchad.configs.telescope" + end, + config = function(_, opts) + dofile(vim.g.base46_cache .. "telescope") + local telescope = require "telescope" + telescope.setup(opts) + + -- load extensions + for _, ext in ipairs(opts.extensions_list) do + telescope.load_extension(ext) + end + end, + }, +} diff --git a/lua/nvchad/plugins/ui.lua b/lua/nvchad/plugins/ui.lua new file mode 100644 index 0000000..677e3c0 --- /dev/null +++ b/lua/nvchad/plugins/ui.lua @@ -0,0 +1,84 @@ +return { + + { + "NvChad/base46", + branch = "v2.5", + build = function() + require("base46").load_all_highlights() + end, + }, + + { + "NvChad/ui", + branch = "v2.5", + lazy = false, + config = function() + require "nvchad" + end, + }, + + { + "NvChad/nvim-colorizer.lua", + event = "User FilePost", + config = function(_, opts) + require("colorizer").setup(opts) + + -- execute colorizer as soon as possible + vim.defer_fn(function() + require("colorizer").attach_to_buffer(0) + end, 0) + end, + }, + + { + "nvim-tree/nvim-web-devicons", + opts = function() + return { override = require "nvchad.icons.devicons" } + end, + config = function(_, opts) + dofile(vim.g.base46_cache .. "devicons") + require("nvim-web-devicons").setup(opts) + end, + }, + + { + "lukas-reineke/indent-blankline.nvim", + event = "User FilePost", + opts = { + indent = { char = "│", highlight = "IblChar" }, + scope = { char = "│", highlight = "IblScopeChar" }, + }, + config = function(_, opts) + dofile(vim.g.base46_cache .. "blankline") + + local hooks = require "ibl.hooks" + hooks.register(hooks.type.WHITESPACE, hooks.builtin.hide_first_space_indent_level) + require("ibl").setup(opts) + + dofile(vim.g.base46_cache .. "blankline") + end, + }, + + -- file managing , picker etc + { + "nvim-tree/nvim-tree.lua", + cmd = { "NvimTreeToggle", "NvimTreeFocus" }, + opts = function() + return require "nvchad.configs.nvimtree" + end, + config = function(_, opts) + dofile(vim.g.base46_cache .. "nvimtree") + require("nvim-tree").setup(opts) + end, + }, + + { + "folke/which-key.nvim", + keys = { "", "", "", '"', "'", "`", "c", "v", "g" }, + cmd = "WhichKey", + config = function(_, opts) + dofile(vim.g.base46_cache .. "whichkey") + require("which-key").setup(opts) + end, + }, +} diff --git a/lua/core/default_config.lua b/lua/nvconfig.lua similarity index 68% rename from lua/core/default_config.lua rename to lua/nvconfig.lua index 639916a..cfa8d56 100644 --- a/lua/core/default_config.lua +++ b/lua/nvconfig.lua @@ -1,9 +1,5 @@ local M = {} -M.options = { - nvchad_branch = "v2.0", -} - M.ui = { ------------------------------- base46 ------------------------------------- -- hl = highlights @@ -13,18 +9,11 @@ M.ui = { theme_toggle = { "onedark", "one_light" }, theme = "onedark", -- default theme transparency = false, - lsp_semantic_tokens = false, -- needs nvim v0.9, just adds highlight groups for lsp semantic tokens - -- https://github.com/NvChad/base46/tree/v2.0/lua/base46/extended_integrations - extended_integrations = {}, -- these aren't compiled by default, ex: "alpha", "notify" - - -- cmp themeing cmp = { icons = true, lspkind_text = true, style = "default", -- default/flat_light/flat_dark/atom/atom_colored - border_color = "grey_fg", -- only applicable for "default" style, use color names from base30 variables - selected_item_bg = "colored", -- colored / simple }, telescope = { style = "borderless" }, -- borderless / bordered @@ -35,18 +24,18 @@ M.ui = { -- default/round/block/arrow separators work only for default statusline theme -- round and block will work for minimal theme only separator_style = "default", - overriden_modules = nil, + order = nil, + modules = nil, }, -- lazyload it when there are 1+ buffers tabufline = { - show_numbers = false, enabled = true, lazyload = true, - overriden_modules = nil, + order = { "treeOffset", "buffers", "tabs", "btns" }, + modules = nil, }, - -- nvdash (dashboard) nvdash = { load_on_startup = false, @@ -75,18 +64,43 @@ M.ui = { cheatsheet = { theme = "grid" }, -- simple/grid lsp = { - -- show function signatures i.e args as you type - signature = { - disabled = false, - silent = true, -- silences 'no signature help available' message from appearing + signature = true, + semantic_tokens = false, + }, + + term = { + -- hl = "Normal:term,WinSeparator:WinSeparator", + sizes = { sp = 0.3, vsp = 0.2 }, + float = { + relative = "editor", + row = 0.3, + col = 0.25, + width = 0.5, + height = 0.4, + border = "single", }, }, } -M.plugins = "" -- path i.e "custom.plugins", so make custom/plugins.lua file +M.base46 = { + integrations = { + "blankline", + "cmp", + "defaults", + "devicons", + "git", + "lsp", + "mason", + "nvcheatsheet", + "nvdash", + "nvimtree", + "statusline", + "syntax", + "treesitter", + "tbline", + "telescope", + "whichkey", + }, +} -M.lazy_nvim = require "plugins.configs.lazy_nvim" -- config for lazy.nvim startup options - -M.mappings = require "core.mappings" - -return M +return vim.tbl_deep_extend("force", M, require "chadrc") diff --git a/lua/plugins/configs/others.lua b/lua/plugins/configs/others.lua deleted file mode 100644 index dafd5a4..0000000 --- a/lua/plugins/configs/others.lua +++ /dev/null @@ -1,66 +0,0 @@ -local M = {} -local utils = require "core.utils" - -M.blankline = { - indentLine_enabled = 1, - filetype_exclude = { - "help", - "terminal", - "lazy", - "lspinfo", - "TelescopePrompt", - "TelescopeResults", - "mason", - "nvdash", - "nvcheatsheet", - "", - }, - buftype_exclude = { "terminal" }, - show_trailing_blankline_indent = false, - show_first_indent_level = false, - show_current_context = true, - show_current_context_start = true, -} - -M.luasnip = function(opts) - require("luasnip").config.set_config(opts) - - -- vscode format - require("luasnip.loaders.from_vscode").lazy_load() - require("luasnip.loaders.from_vscode").lazy_load { paths = vim.g.vscode_snippets_path or "" } - - -- snipmate format - require("luasnip.loaders.from_snipmate").load() - require("luasnip.loaders.from_snipmate").lazy_load { paths = vim.g.snipmate_snippets_path or "" } - - -- lua format - require("luasnip.loaders.from_lua").load() - require("luasnip.loaders.from_lua").lazy_load { paths = vim.g.lua_snippets_path or "" } - - vim.api.nvim_create_autocmd("InsertLeave", { - callback = function() - if - require("luasnip").session.current_nodes[vim.api.nvim_get_current_buf()] - and not require("luasnip").session.jump_active - then - require("luasnip").unlink_current() - end - end, - }) -end - -M.gitsigns = { - signs = { - add = { text = "│" }, - change = { text = "│" }, - delete = { text = "󰍵" }, - topdelete = { text = "‾" }, - changedelete = { text = "~" }, - untracked = { text = "│" }, - }, - on_attach = function(bufnr) - utils.load_mappings("gitsigns", { buffer = bufnr }) - end, -} - -return M