diff --git a/init.lua b/init.lua index 21f0b6f..9e53d71 100644 --- a/init.lua +++ b/init.lua @@ -1,12 +1,6 @@ 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() +pcall(require, 'custom') local lazypath = vim.fn.stdpath "data" .. "/lazy/lazy.nvim" @@ -19,3 +13,7 @@ end dofile(vim.g.base46_cache .. "defaults") vim.opt.rtp:prepend(lazypath) require "plugins" + +vim.schedule(function() + require "core.mappings" +end, 0) diff --git a/lua/core/bootstrap.lua b/lua/core/bootstrap.lua index 50a8484..ee3f37d 100644 --- a/lua/core/bootstrap.lua +++ b/lua/core/bootstrap.lua @@ -33,7 +33,15 @@ M.lazy = function(install_path) require "plugins" -- mason packages & show post_bootstrap screen - require "nvchad.post_install"() + vim.cmd "MasonInstallAll" + local lastpkg = vim.g.mason_binaries_list[#vim.g.mason_binaries_list] + + -- Keep track of which mason pkgs get installed + require("mason-registry"):on("package:install:success", function(pkg) + if tostring(pkg) == "Package(name=" .. lastpkg .. ")" then + print "All done! Now read nvchad.com " + end + end) end M.gen_chadrc_template = function() diff --git a/lua/core/default_config.lua b/lua/core/default_config.lua deleted file mode 100644 index 0ee9467..0000000 --- a/lua/core/default_config.lua +++ /dev/null @@ -1,121 +0,0 @@ -local M = {} - -M.options = { - nvchad_branch = "v3.0", -} - -M.ui = { - ------------------------------- base46 ------------------------------------- - -- hl = highlights - hl_add = {}, - hl_override = {}, - changed_themes = {}, - theme_toggle = { "onedark", "one_light" }, - theme = "onedark", -- default theme - transparency = false, - - -- cmp themeing - cmp = { - icons = true, - lspkind_text = true, - style = "default", -- default/flat_light/flat_dark/atom/atom_colored - }, - - telescope = { style = "borderless" }, -- borderless / bordered - - ------------------------------- nvchad_ui modules ----------------------------- - statusline = { - theme = "default", -- default/vscode/vscode_colored/minimal - -- 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, - }, - - -- lazyload it when there are 1+ buffers - tabufline = { - show_numbers = false, - enabled = true, - lazyload = true, - overriden_modules = nil, - }, - - -- nvdash (dashboard) - nvdash = { - load_on_startup = false, - - header = { - " ▄ ▄ ", - " ▄ ▄▄▄ ▄ ▄▄▄ ▄ ▄ ", - " █ ▄ █▄█ ▄▄▄ █ █▄█ █ █ ", - " ▄▄ █▄█▄▄▄█ █▄█▄█▄▄█▄▄█ █ ", - " ▄ █▄▄█ ▄ ▄▄ ▄█ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ", - " █▄▄▄▄ ▄▄▄ █ ▄ ▄▄▄ ▄ ▄▄▄ ▄ ▄ █ ▄", - "▄ █ █▄█ █▄█ █ █ █▄█ █ █▄█ ▄▄▄ █ █", - "█▄█ ▄ █▄▄█▄▄█ █ ▄▄█ █ ▄ █ █▄█▄█ █", - " █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█ █▄█▄▄▄█ ", - }, - - buttons = { - { " Find File", "Spc f f", "Telescope find_files" }, - { "󰈚 Recent Files", "Spc f o", "Telescope oldfiles" }, - { "󰈭 Find Word", "Spc f w", "Telescope live_grep" }, - { " Bookmarks", "Spc m a", "Telescope marks" }, - { " Themes", "Spc t h", "Telescope themes" }, - { " Mappings", "Spc c h", "NvCheatsheet" }, - }, - }, - - cheatsheet = { theme = "grid" }, -- simple/grid - - lsp = { - 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", - }, - behavior = { - auto_insert = true, - }, - }, -} - -M.plugins = "" -- path i.e "custom.plugins", so make custom/plugins.lua file - -M.lazy_nvim = require "plugins.configs.lazy_nvim" -- config for lazy.nvim startup options - -M.mappings = require "core.mappings" - -M.base46 = { - integrations = { - "blankline", - "cmp", - "defaults", - "devicons", - "git", - "lsp", - "mason", - "nvchad_updater", - "nvcheatsheet", - "nvdash", - "nvimtree", - "statusline", - "syntax", - "treesitter", - "tbline", - "telescope", - "whichkey", - }, -} - -return M diff --git a/lua/core/mappings.lua b/lua/core/mappings.lua index 93118be..cb1a279 100644 --- a/lua/core/mappings.lua +++ b/lua/core/mappings.lua @@ -1,479 +1,135 @@ --- n, v, i, t = mode names - -local M = {} - -M.general = { - i = { - -- go to beginning and end - [""] = { "^i", "Beginning of line" }, - [""] = { "", "End of line" }, - - -- navigate within insert mode - [""] = { "", "Move left" }, - [""] = { "", "Move right" }, - [""] = { "", "Move down" }, - [""] = { "", "Move up" }, - }, - - n = { - [""] = { " noh ", "Clear highlights" }, - -- switch between windows - [""] = { "h", "Window left" }, - [""] = { "l", "Window right" }, - [""] = { "j", "Window down" }, - [""] = { "k", "Window up" }, - - -- save - [""] = { " w ", "Save file" }, - - -- Copy all - [""] = { " %y+ ", "Copy whole file" }, - - -- line numbers - ["n"] = { " set nu! ", "Toggle line number" }, - ["rn"] = { " set rnu! ", "Toggle relative number" }, - - -- Allow moving the cursor through wrapped lines with j, k, and - -- http://www.reddit.com/r/vim/comments/2k4cbr/problem_with_gj_and_gk/ - -- empty mode is same as using :map - -- also don't use g[j|k] when in operator pending mode, so it doesn't alter d, y or c behaviour - ["j"] = { 'v:count || mode(1)[0:1] == "no" ? "j" : "gj"', "Move down", opts = { expr = true } }, - ["k"] = { 'v:count || mode(1)[0:1] == "no" ? "k" : "gk"', "Move up", opts = { expr = true } }, - [""] = { 'v:count || mode(1)[0:1] == "no" ? "k" : "gk"', "Move up", opts = { expr = true } }, - [""] = { 'v:count || mode(1)[0:1] == "no" ? "j" : "gj"', "Move down", opts = { expr = true } }, - - -- new buffer - ["b"] = { " enew ", "New buffer" }, - ["ch"] = { " NvCheatsheet ", "Mapping cheatsheet" }, - - ["fm"] = { - function() - vim.lsp.buf.format { async = true } - end, - "LSP formatting", - }, - }, - - t = { - [""] = { vim.api.nvim_replace_termcodes("", true, true, true), "Escape terminal mode" }, - }, - - v = { - [""] = { 'v:count || mode(1)[0:1] == "no" ? "k" : "gk"', "Move up", opts = { expr = true } }, - [""] = { 'v:count || mode(1)[0:1] == "no" ? "j" : "gj"', "Move down", opts = { expr = true } }, - ["<"] = { ""] = { ">gv", "Indent line" }, - }, - - x = { - ["j"] = { 'v:count || mode(1)[0:1] == "no" ? "j" : "gj"', "Move down", opts = { expr = true } }, - ["k"] = { 'v:count || mode(1)[0:1] == "no" ? "k" : "gk"', "Move up", opts = { expr = true } }, - -- Don't copy the replaced text after pasting in visual mode - -- https://vim.fandom.com/wiki/Replace_a_word_with_yanked_text#Alternative_mapping_for_paste - ["p"] = { 'p:let @+=@0:let @"=@0', "Dont copy replaced text", opts = { silent = true } }, - }, -} - -M.tabufline = { - plugin = true, - - n = { - -- cycle through buffers - [""] = { - function() - require("nvchad.tabufline").tabuflineNext() - end, - "Goto next buffer", - }, - - [""] = { - function() - require("nvchad.tabufline").tabuflinePrev() - end, - "Goto prev buffer", - }, - - -- close buffer + hide terminal buffer - ["x"] = { - function() - require("nvchad.tabufline").close_buffer() - end, - "Close buffer", - }, - }, -} - -M.comment = { - plugin = true, - - -- toggle comment in both modes - n = { - ["/"] = { - function() - require("Comment.api").toggle.linewise.current() - end, - "Toggle comment", - }, - }, - - v = { - ["/"] = { - "lua require('Comment.api').toggle.linewise(vim.fn.visualmode())", - "Toggle comment", - }, - }, -} - -M.lspconfig = { - plugin = true, - - -- See ` :help vim.lsp.*` for documentation on any of the below functions - - n = { - ["gD"] = { - function() - vim.lsp.buf.declaration() - end, - "LSP declaration", - }, - - ["gd"] = { - function() - vim.lsp.buf.definition() - end, - "LSP definition", - }, - - ["K"] = { - function() - vim.lsp.buf.hover() - end, - "LSP hover", - }, - - ["gi"] = { - function() - vim.lsp.buf.implementation() - end, - "LSP implementation", - }, - - ["ls"] = { - function() - vim.lsp.buf.signature_help() - end, - "LSP signature help", - }, - - ["D"] = { - function() - vim.lsp.buf.type_definition() - end, - "LSP definition type", - }, - - ["ra"] = { - function() - require("nvchad.renamer").open() - end, - "LSP rename", - }, - - ["ca"] = { - function() - vim.lsp.buf.code_action() - end, - "LSP code action", - }, - - ["gr"] = { - function() - vim.lsp.buf.references() - end, - "LSP references", - }, - - ["lf"] = { - function() - vim.diagnostic.open_float { border = "rounded" } - end, - "Floating diagnostic", - }, - - ["[d"] = { - function() - vim.diagnostic.goto_prev { float = { border = "rounded" } } - end, - "Goto prev", - }, - - ["]d"] = { - function() - vim.diagnostic.goto_next { float = { border = "rounded" } } - end, - "Goto next", - }, - - ["q"] = { - function() - vim.diagnostic.setloclist() - end, - "Diagnostic setloclist", - }, - - ["wa"] = { - function() - vim.lsp.buf.add_workspace_folder() - end, - "Add workspace folder", - }, - - ["wr"] = { - function() - vim.lsp.buf.remove_workspace_folder() - end, - "Remove workspace folder", - }, - - ["wl"] = { - function() - print(vim.inspect(vim.lsp.buf.list_workspace_folders())) - end, - "List workspace folders", - }, - }, - - v = { - ["ca"] = { - function() - vim.lsp.buf.code_action() - end, - "LSP code action", - }, - }, -} - -M.nvimtree = { - plugin = true, - - n = { - -- toggle - [""] = { " NvimTreeToggle ", "Toggle nvimtree" }, - - -- focus - ["e"] = { " NvimTreeFocus ", "Focus nvimtree" }, - }, -} - -M.telescope = { - plugin = true, - - n = { - -- find - ["ff"] = { " Telescope find_files ", "Find files" }, - ["fa"] = { " Telescope find_files follow=true no_ignore=true hidden=true ", "Find all" }, - ["fw"] = { " Telescope live_grep ", "Live grep" }, - ["fb"] = { " Telescope buffers ", "Find buffers" }, - ["fh"] = { " Telescope help_tags ", "Help page" }, - ["fo"] = { " Telescope oldfiles ", "Find oldfiles" }, - ["fz"] = { " Telescope current_buffer_fuzzy_find ", "Find in current buffer" }, - - -- git - ["cm"] = { " Telescope git_commits ", "Git commits" }, - ["gt"] = { " Telescope git_status ", "Git status" }, - - -- pick a hidden term - ["pt"] = { " Telescope terms ", "Pick hidden term" }, - - -- theme switcher - ["th"] = { " Telescope themes ", "Nvchad themes" }, - - ["ma"] = { " Telescope marks ", "telescope bookmarks" }, - }, -} - -M.terminal = { - n = { - -- spawn new terms - ["h"] = { - function() - require("nvchad.term").new { pos = "sp", size = 0.3 } - end, - "New horizontal term", - }, - - ["v"] = { - function() - require("nvchad.term").new { pos = "vsp", size = 0.3 } - end, - "New vertical term", - }, - - -- toggle terms - [""] = { - function() - require("nvchad.term").toggle { pos = "vsp", id = "vtoggleTerm", size = 0.3 } - end, - "New vertical term", - }, - - [""] = { - function() - require("nvchad.term").toggle { pos = "sp", id = "htoggleTerm", size = 0.2 } - end, - "New vertical term", - }, - - [""] = { - function() - require("nvchad.term").toggle { pos = "float", id = "floatTerm" } - end, - "Toggleable Floating term", - }, - }, - - -- toggle terms in terminal mode - t = { - [""] = { - function() - local win = vim.api.nvim_get_current_win() - vim.api.nvim_win_close(win, true) - end, - "close term in terminal mode", - }, - - [""] = { - function() - require("nvchad.term").toggle { pos = "vsp", id = "vtoggleTerm" } - end, - "New vertical term", - }, - - [""] = { - function() - require("nvchad.term").toggle { pos = "sp", id = "htoggleTerm" } - end, - "New vertical term", - }, - - [""] = { - function() - require("nvchad.term").toggle { pos = "float", id = "floatTerm" } - end, - "Toggleable Floating term", - }, - }, -} - -M.whichkey = { - plugin = true, - - n = { - ["wK"] = { - function() - vim.cmd "WhichKey" - end, - "Which-key all keymaps", - }, - ["wk"] = { - function() - local input = vim.fn.input "WhichKey: " - vim.cmd("WhichKey " .. input) - end, - "Which-key query lookup", - }, - }, -} - -M.blankline = { - plugin = true, - - 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, - - "Jump to current context", - }, - }, -} - -M.gitsigns = { - plugin = true, - - n = { - -- Navigation through hunks - ["]c"] = { - function() - if vim.wo.diff then - return "]c" - end - vim.schedule(function() - require("gitsigns").next_hunk() - end) - return "" - end, - "Jump to next hunk", - opts = { expr = true }, - }, - - ["[c"] = { - function() - if vim.wo.diff then - return "[c" - end - vim.schedule(function() - require("gitsigns").prev_hunk() - end) - return "" - end, - "Jump to prev hunk", - opts = { expr = true }, - }, - - -- Actions - ["rh"] = { - function() - require("gitsigns").reset_hunk() - end, - "Reset hunk", - }, - - ["ph"] = { - function() - require("gitsigns").preview_hunk() - end, - "Preview hunk", - }, - - ["gb"] = { - function() - package.loaded.gitsigns.blame_line() - end, - "Blame line", - }, - - ["td"] = { - function() - require("gitsigns").toggle_deleted() - end, - "Toggle deleted", - }, - }, -} - -return M +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" }) + +-- global lsp mappings +map("n", "fm", function() + vim.lsp.buf.format { async = true } +end, { desc = "Lsp formatting" }) + +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").tabuflineNext() +end, { desc = "Buffer Goto next" }) + +map("n", "", function() + require("nvchad.tabufline").tabuflinePrev() +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" }) + +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 term" }) + +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.2 } +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" }) + +pcall(require, "custom.mappings") diff --git a/lua/core/utils.lua b/lua/core/utils.lua deleted file mode 100644 index 6f4dfae..0000000 --- a/lua/core/utils.lua +++ /dev/null @@ -1,90 +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("nvconfig").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 - -return M diff --git a/lua/nvconfig.lua b/lua/nvconfig.lua index df0d4a4..bfaebc7 100644 --- a/lua/nvconfig.lua +++ b/lua/nvconfig.lua @@ -1,2 +1,125 @@ --- check default config at core/default_config.lua -return require("core.utils").load_config() +local M = {} + +M.options = { + nvchad_branch = "v3.0", +} + +M.ui = { + ------------------------------- base46 ------------------------------------- + -- hl = highlights + hl_add = {}, + hl_override = {}, + changed_themes = {}, + theme_toggle = { "onedark", "one_light" }, + theme = "onedark", -- default theme + transparency = false, + + -- cmp themeing + cmp = { + icons = true, + lspkind_text = true, + style = "default", -- default/flat_light/flat_dark/atom/atom_colored + }, + + telescope = { style = "borderless" }, -- borderless / bordered + + ------------------------------- nvchad_ui modules ----------------------------- + statusline = { + theme = "default", -- default/vscode/vscode_colored/minimal + -- 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, + }, + + -- lazyload it when there are 1+ buffers + tabufline = { + show_numbers = false, + enabled = true, + lazyload = true, + overriden_modules = nil, + }, + + -- nvdash (dashboard) + nvdash = { + load_on_startup = false, + + header = { + " ▄ ▄ ", + " ▄ ▄▄▄ ▄ ▄▄▄ ▄ ▄ ", + " █ ▄ █▄█ ▄▄▄ █ █▄█ █ █ ", + " ▄▄ █▄█▄▄▄█ █▄█▄█▄▄█▄▄█ █ ", + " ▄ █▄▄█ ▄ ▄▄ ▄█ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ", + " █▄▄▄▄ ▄▄▄ █ ▄ ▄▄▄ ▄ ▄▄▄ ▄ ▄ █ ▄", + "▄ █ █▄█ █▄█ █ █ █▄█ █ █▄█ ▄▄▄ █ █", + "█▄█ ▄ █▄▄█▄▄█ █ ▄▄█ █ ▄ █ █▄█▄█ █", + " █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█ █▄█▄▄▄█ ", + }, + + buttons = { + { " Find File", "Spc f f", "Telescope find_files" }, + { "󰈚 Recent Files", "Spc f o", "Telescope oldfiles" }, + { "󰈭 Find Word", "Spc f w", "Telescope live_grep" }, + { " Bookmarks", "Spc m a", "Telescope marks" }, + { " Themes", "Spc t h", "Telescope themes" }, + { " Mappings", "Spc c h", "NvCheatsheet" }, + }, + }, + + cheatsheet = { theme = "grid" }, -- simple/grid + + lsp = { + 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", + }, + behavior = { + auto_insert = true, + }, + }, +} + +M.plugins = "" -- path i.e "custom.plugins", so make custom/plugins.lua file + +M.lazy_nvim = require "plugins.configs.lazy_nvim" -- config for lazy.nvim startup options + +M.base46 = { + integrations = { + "blankline", + "cmp", + "defaults", + "devicons", + "git", + "lsp", + "mason", + "nvchad_updater", + "nvcheatsheet", + "nvdash", + "nvimtree", + "statusline", + "syntax", + "treesitter", + "tbline", + "telescope", + "whichkey", + }, +} + +local chadrc_exists, chadrc = pcall(require, "custom.chadrc") + +if chadrc_exists then + M = vim.tbl_deep_extend("force", M, chadrc) +end + +return M diff --git a/lua/plugins/configs/cmp.lua b/lua/plugins/configs/cmp.lua index 9b669a8..46f8864 100644 --- a/lua/plugins/configs/cmp.lua +++ b/lua/plugins/configs/cmp.lua @@ -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/plugins/configs/gitsigns.lua b/lua/plugins/configs/gitsigns.lua new file mode 100644 index 0000000..27f3105 --- /dev/null +++ b/lua/plugins/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/lspconfig.lua b/lua/plugins/configs/lspconfig.lua index 55dac4d..3eb71a1 100644 --- a/lua/plugins/configs/lspconfig.lua +++ b/lua/plugins/configs/lspconfig.lua @@ -1,8 +1,8 @@ local M = {} +local map = vim.keymap.set -- export on_attach & capabilities for custom lspconfigs M.on_attach = function(client, bufnr) - local utils = require "core.utils" local conf = require("nvconfig").ui.lsp -- semanticTokens @@ -14,7 +14,30 @@ M.on_attach = function(client, bufnr) require("nvchad.signature").setup(client, bufnr) end - utils.load_mappings("lspconfig", { buffer = 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", "", 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.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") end M.capabilities = vim.lsp.protocol.make_client_capabilities() diff --git a/lua/plugins/configs/luasnip.lua b/lua/plugins/configs/luasnip.lua new file mode 100644 index 0000000..f40672d --- /dev/null +++ b/lua/plugins/configs/luasnip.lua @@ -0,0 +1,23 @@ +-- vscode format +require("luasnip.loaders.from_vscode").lazy_load() +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/others.lua b/lua/plugins/configs/others.lua deleted file mode 100644 index 9e01f8d..0000000 --- a/lua/plugins/configs/others.lua +++ /dev/null @@ -1,50 +0,0 @@ -local M = {} -local utils = require "core.utils" - -M.blankline = { - indent = { char = "│", highlight = "IblChar" }, - scope = { char = "│", highlight = "IblScopeChar" }, -} - -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 diff --git a/lua/plugins/configs/treesitter.lua b/lua/plugins/configs/treesitter.lua index b21b55d..897c4e3 100644 --- a/lua/plugins/configs/treesitter.lua +++ b/lua/plugins/configs/treesitter.lua @@ -1,5 +1,5 @@ local options = { - ensure_installed = { "lua" }, + ensure_installed = { "lua", "vim", "vimdoc" }, highlight = { enable = true, diff --git a/lua/plugins/init.lua b/lua/plugins/init.lua index 26e9ba0..645c09b 100644 --- a/lua/plugins/init.lua +++ b/lua/plugins/init.lua @@ -14,7 +14,7 @@ local default_plugins = { { "NvChad/ui", - branch = "v3.0", + branch = "clean", lazy = false, config = function() require "nvchad" @@ -48,11 +48,11 @@ local default_plugins = { { "lukas-reineke/indent-blankline.nvim", event = "User FilePost", - opts = function() - return require("plugins.configs.others").blankline - end, + opts = { + indent = { char = "│", highlight = "IblChar" }, + scope = { char = "│", highlight = "IblScopeChar" }, + }, config = function(_, opts) - require("core.utils").load_mappings "blankline" dofile(vim.g.base46_cache .. "blankline") local hooks = require "ibl.hooks" @@ -81,7 +81,7 @@ local default_plugins = { "lewis6991/gitsigns.nvim", event = "User FilePost", opts = function() - return require("plugins.configs.others").gitsigns + return require "plugins.configs.gitsigns" end, config = function(_, opts) dofile(vim.g.base46_cache .. "git") @@ -130,7 +130,8 @@ local default_plugins = { dependencies = "rafamadriz/friendly-snippets", opts = { history = true, updateevents = "TextChanged,TextChangedI" }, config = function(_, opts) - require("plugins.configs.others").luasnip(opts) + require("luasnip").config.set_config(opts) + require "plugins.configs.luasnip" end, }, @@ -178,7 +179,7 @@ local default_plugins = { { "gb", mode = "x", desc = "Comment toggle blockwise (visual)" }, }, init = function() - require("core.utils").load_mappings "comment" + vim.g.comment_maps = true end, config = function(_, opts) require("Comment").setup(opts) @@ -189,9 +190,6 @@ local default_plugins = { { "nvim-tree/nvim-tree.lua", cmd = { "NvimTreeToggle", "NvimTreeFocus" }, - init = function() - require("core.utils").load_mappings "nvimtree" - end, opts = function() return require "plugins.configs.nvimtree" end, @@ -205,9 +203,6 @@ local default_plugins = { "nvim-telescope/telescope.nvim", dependencies = { "nvim-treesitter/nvim-treesitter" }, cmd = "Telescope", - init = function() - require("core.utils").load_mappings "telescope" - end, opts = function() return require "plugins.configs.telescope" end, @@ -227,9 +222,6 @@ local default_plugins = { { "folke/which-key.nvim", keys = { "", "", "", '"', "'", "`", "c", "v", "g" }, - init = function() - require("core.utils").load_mappings "whichkey" - end, cmd = "WhichKey", config = function(_, opts) dofile(vim.g.base46_cache .. "whichkey")