From 9961cc0113191ed5db81f9d6dfc9443ed4e00702 Mon Sep 17 00:00:00 2001 From: Galen Rowell Date: Sun, 19 Sep 2021 18:11:28 +1000 Subject: [PATCH] refactor: clean & re-organise default_config + chadrc this completely overhauls the design of the two configuration files, aiming to move options & various tables into a more sensible table structure BREAKING CHANGE: this will break any user modificiations to the current config --- lua/core/default_config.lua | 216 ++++++++++++++--------------- lua/core/mappings.lua | 19 +-- lua/core/options.lua | 4 +- lua/core/utils.lua | 4 +- lua/custom/chadrc.lua | 47 ++++--- lua/plugins/configs/lspconfig.lua | 2 +- lua/plugins/configs/others.lua | 10 +- lua/plugins/configs/statusline.lua | 2 +- lua/plugins/init.lua | 8 +- 9 files changed, 154 insertions(+), 158 deletions(-) diff --git a/lua/core/default_config.lua b/lua/core/default_config.lua index 554b171..4fa4a76 100644 --- a/lua/core/default_config.lua +++ b/lua/core/default_config.lua @@ -2,107 +2,116 @@ -- use custom/chadrc.lua instead local M = {} -M.ui, M.options, M.plugin_status, M.mappings, M.custom = {}, {}, {}, {}, {} - --- non plugin ui configs, available without any plugins -M.ui = { - italic_comments = false, - -- theme to be used, to see all available themes, open the theme switcher by + th - theme = "onedark", - -- theme toggler, toggle between two themes, see theme_toggleer mappings - theme_toggler = { - enabled = false, - fav_themes = { - "onedark", - "one-light", - }, - }, - -- Enable this only if your terminal has the colorscheme set which nvchad uses - -- For Ex : if you have onedark set in nvchad , set onedark's bg color on your terminal - transparency = false, -} - --- plugin related ui options -M.ui.plugin = { - -- statusline related options - statusline = { - -- these are filetypes, not pattern matched - -- if a filetype is present in shown, it will always show the statusline, irrespective of filetypes in hidden - hidden = { - "help", - "dashboard", - "NvimTree", - "terminal", - }, - shown = {}, - -- default, round , slant , block , arrow - style = "default", - }, -} +M.options, M.ui, M.mappings, M.plugin = {}, {}, {}, {} -- non plugin normal, available without any plugins M.options = { + -- NeoVim/Vim options clipboard = "unnamedplus", cmdheight = 1, - copy_cut = true, -- copy cut text ( x key ), visual and normal mode - copy_del = true, -- copy deleted text ( dd key ), visual and normal mode - expandtab = true, + ruler = false, hidden = true, ignorecase = true, - insert_nav = true, -- navigation in insertmode - window_nav = true, mapleader = " ", mouse = "a", number = true, -- relative numbers in normal mode tool at the bottom of options.lua numberwidth = 2, - permanent_undo = true, + relativenumber = false, + expandtab = true, shiftwidth = 2, smartindent = true, tabstop = 8, -- Number of spaces that a in the file counts for timeoutlen = 400, - relativenumber = false, - ruler = false, + -- interval for writing swap file to disk, also used by gitsigns updatetime = 250, - -- used for updater - update_url = "https://github.com/NvChad/NvChad", - update_branch = "main", + undofile = true, -- keep a permanent undo (across restarts) + -- NvChad options + nvChad = { + copy_cut = true, -- copy cut text ( x key ), visual and normal mode + copy_del = true, -- copy deleted text ( dd key ), visual and normal mode + insert_nav = true, -- navigation in insertmode + window_nav = true, + theme_toggler = false, + -- used for updater + update_url = "https://github.com/NvChad/NvChad", + update_branch = "main", + }, } +-- ui configs +M.ui = { + italic_comments = false, + -- theme to be used, check available themes with ` + t + h` + theme = "onedark", + -- toggle between two themes, see theme_toggler mappings + theme_toggler = { + "onedark", + "gruvchad", + }, + -- Enable this only if your terminal has the colorscheme set which nvchad uses + -- For Ex : if you have onedark set in nvchad, set onedark's bg color on your terminal + transparency = false, +} + -- these are plugin related options -M.options.plugin = { - autosave = false, -- autosave on changed text or insert mode leave - -- timeout to be used for using escape with a key combination, see mappings.plugin.better_escape - esc_insertmode_timeout = 300, -} - --- enable and disable plugins (false for disable) -M.plugin_status = { - autosave = false, -- to autosave files - blankline = true, -- beautified blank lines - bufferline = true, -- buffer shown as tabs - cheatsheet = true, -- fuzzy search your commands/keymappings - colorizer = true, - comment = true, -- universal commentor - dashboard = false, -- a nice looking dashboard - esc_insertmode = true, -- escape from insert mode using custom keys - feline = true, -- statusline - gitsigns = true, -- gitsigns in statusline - lspsignature = true, -- lsp enhancements - neoformat = true, -- universal formatter - neoscroll = true, -- smooth scroll - telescope_media = false, -- see media files in telescope picker - truezen = false, -- no distraction mode for nvim - vim_fugitive = false, -- git in nvim - vim_matchup = true, -- % magic, match it but improved +M.plugins = { + -- enable and disable plugins (false for disable) + plugin_status = { + autosave = false, -- to autosave files + blankline = true, -- show code scope with symbols + bufferline = true, -- list open buffers up the top, easy switching too + cheatsheet = true, -- search your commands/keymappings + colorizer = true, -- color RGB, HEX, CSS, NAME color codes + comment = true, -- easily (un)comment code, language aware + dashboard = false, -- NeoVim 'home screen' on open + esc_insertmode = true, -- map to with no lag + feline = true, -- statusline + gitsigns = true, -- gitsigns in statusline + lspsignature = true, -- lsp enhancements + neoformat = true, -- universal code formatter + neoscroll = true, -- smooth scroll + telescope_media = false, -- media previews within telescope finders + truezen = false, -- distraction free & minimalist UI mode + vim_fugitive = false, -- git integration & tooling + vim_matchup = true, -- % operator enhancements + }, + options = { + lspconfig = { + servers = {} -- eg: "HTML" + }, + statusline = { -- statusline related options + -- these are filetypes, not pattern matched + -- shown filetypes will overrule hidden filetypes + hidden = { + "help", + "dashboard", + "NvimTree", + "terminal", + }, + shown = {}, + -- default, round , slant , block , arrow + style = "default", + }, + autosave = false, -- autosave on changed text or insert mode leave + -- timeout to be used for using escape with a key combination, see mappings.plugin.better_escape + esc_insertmode_timeout = 300, + }, + default_plugin_config_replace = {}, } -- mappings -- don't use a single keymap twice -- -- non plugin mappings M.mappings = { + -- custom = {}, -- all custom user mappings -- close current focused buffer close_buffer = "x", copy_whole_file = "", -- copy all contents of the current buffer + line_number_toggle = "n", -- show or hide line number + new_buffer = "", -- open a new buffer + new_tab = "b", -- open a new vim tab + save_file = "", -- save file using :w + theme_toggler = "tt", -- for theme toggler, see in ui.theme_toggler -- navigation in insert mode, only if enabled in options insert_nav = { backward = "", @@ -112,27 +121,21 @@ M.mappings = { prev_line = "", top_of_line = "", }, + --better window movement window_nav = { - --better window movement moveLeft = "", moveRight = "", moveUp = "", moveDown = "", }, - line_number_toggle = "n", -- show or hide line number - new_buffer = "", -- open a new buffer - new_tab = "b", -- open a new vim tab - save_file = "", -- save file using :w - theme_toggler = "tt", -- for theme toggler, see in ui.theme_toggler -- terminal related mappings terminal = { -- multiple mappings can be given for esc_termmode and esc_hide_termmode -- get out of terminal mode esc_termmode = { "jk" }, -- multiple mappings allowed -- get out of terminal mode and hide it - -- it does not close it, see pick_term mapping to see hidden terminals esc_hide_termmode = { "JK" }, -- multiple mappings allowed - -- show hidden terminal buffers in a telescope picker + -- show & recover hidden terminal buffers in a telescope picker pick_term = "W", -- below three are for spawning terminals new_horizontal = "h", @@ -144,19 +147,22 @@ M.mappings = { } -- all plugins related mappings --- to get short info about a plugin, see the respective string in plugin_status, if not present, then info here -M.mappings.plugin = { +M.mappings.plugins = { + -- list open buffers up the top, easy switching too bufferline = { next_buffer = "", -- next buffer prev_buffer = "", -- previous buffer }, + -- search your commands/keymappings cheatsheet = { default_keys = "dk", user_keys = "uk", }, + -- easily (un)comment code, language aware comment = { - toggle = "/", -- trigger comment on a single/selected lines/number prefix + toggle = "/", -- toggle comment (works on multiple lines) }, + -- NeoVim 'home screen' on open dashboard = { bookmarks = "bm", new_file = "fn", -- basically create a new buffer @@ -164,18 +170,20 @@ M.mappings.plugin = { session_load = "l", -- load a saved session session_save = "s", -- save a session }, - -- note: this is an edditional mapping to escape, escape key will still work - better_escape = { + -- map to with no lag + better_escape = { -- will still work esc_insertmode = { "jk" }, -- multiple mappings allowed }, + -- file explorer/tree nvimtree = { - -- file tree toggle = "", focus = "e", }, + -- universal code formatter neoformat = { format = "fm", }, + -- multitool for finding & picking things telescope = { buffers = "fb", find_files = "ff", @@ -185,16 +193,19 @@ M.mappings.plugin = { help_tags = "fh", live_grep = "fw", oldfiles = "fo", - themes = "th", + themes = "th", -- NvChad theme picker + -- media previews within telescope finders + telescope_media = { + media_files = "fp", + }, }, - telescope_media = { - media_files = "fp", - }, - truezen = { -- distraction free modes mapping, hide statusline, tabline, line numbers + -- distraction free & minimalist UI mode + truezen = { ataraxis_mode = "zz", -- center focus_mode = "zf", minimalistic_mode = "zm", -- as it is }, + -- git integration & tooling vim_fugitive = { diff_get_2 = "gh", diff_get_3 = "gl", @@ -203,26 +214,5 @@ M.mappings.plugin = { }, } --- user custom mappings --- e.g: name = { "mode" , "keys" , "cmd" , "options"} --- name: can be empty or something unique with repect to other custom mappings --- { mode, key, cmd } or name = { mode, key, cmd } --- mode: usage: mode or { mode1, mode2 }, multiple modes allowed, available modes => :h map-modes, --- keys: multiple keys allowed, same synxtax as modes --- cmd: for vim commands, must use ':' at start and add at the end if want to execute --- options: see :h nvim_set_keymap() opts section -M.custom.mappings = { - -- clear_all = { - -- "n", - -- "cc", - -- "gg0vG$d", - -- }, -} -M.plugins = { - lspconfig = { - -- servers = {"html", "cssls"} - servers = {}, - }, -} return M diff --git a/lua/core/mappings.lua b/lua/core/mappings.lua index 8de91d7..d87fd04 100644 --- a/lua/core/mappings.lua +++ b/lua/core/mappings.lua @@ -5,7 +5,8 @@ local config = utils.load_config() local map = utils.map local maps = config.mappings -local plugin_maps = maps.plugin +local plugin_maps = maps.plugins +local nvChad_options = config.options.nvChad local cmd = vim.cmd @@ -32,17 +33,17 @@ M.misc = function() local function optional_mappings() -- don't yank text on cut ( x ) - if not config.options.copy_cut then + if not nvChad_options.copy_cut then map({ "n", "v" }, "x", '"_x') end -- don't yank text on delete ( dd ) - if not config.options.copy_del then + if not nvChad_options.copy_del then map({ "n", "v" }, "dd", '"_dd') end -- navigation within insert mode - if config.options.insert_nav then + if nvChad_options.insert_nav then local inav = maps.insert_nav map("i", inav.backward, "") @@ -54,7 +55,7 @@ M.misc = function() end -- easier navigation between windows - if config.options.window_nav then + if nvChad_options.window_nav then local wnav = maps.window_nav map("n", wnav.moveLeft, "h") @@ -64,11 +65,11 @@ M.misc = function() end -- check the theme toggler - if config.ui.theme_toggler.enabled then + if nvChad_options.theme_toggler then map( "n", maps.theme_toggler, - ":lua require('nvchad').toggle_theme(require('core.utils').load_config().ui.theme_toggler.fav_themes) " + ":lua require('nvchad').toggle_theme(require('core.utils').load_config().ui.theme_toggler) " ) end end @@ -113,7 +114,7 @@ M.misc = function() end local function user_config_mappings() - local custom_maps = config.custom.mappings or "" + local custom_maps = config.mappings.custom or "" if type(custom_maps) ~= "table" then return end @@ -190,7 +191,7 @@ M.telescope = function() end M.telescope_media = function() - local m = plugin_maps.telescope_media + local m = plugin_maps.telescope.telescope_media map("n", m.media_files, ":Telescope media_files ") end diff --git a/lua/core/options.lua b/lua/core/options.lua index 6872be6..dd46b42 100644 --- a/lua/core/options.lua +++ b/lua/core/options.lua @@ -15,7 +15,7 @@ opt.expandtab = options.expandtab opt.shiftwidth = options.shiftwidth opt.smartindent = options.smartindent --- disable tilde on end of buffer: https://github.com/ neovim/neovim/pull/8546#issuecomment-643643758 +-- disable tilde on end of buffer: https://github.com/neovim/neovim/pull/8546#issuecomment-643643758 opt.fillchars = { eob = " " } opt.hidden = options.hidden @@ -37,7 +37,7 @@ opt.splitright = true opt.tabstop = options.tabstop opt.termguicolors = true opt.timeoutlen = options.timeoutlen -opt.undofile = options.permanent_undo +opt.undofile = options.undofile -- interval for writing swap file to disk, also used by gitsigns opt.updatetime = options.updatetime diff --git a/lua/core/utils.lua b/lua/core/utils.lua index 3ef5977..92928be 100644 --- a/lua/core/utils.lua +++ b/lua/core/utils.lua @@ -117,8 +117,8 @@ end -- hide statusline -- tables fetched from load_config function M.hide_statusline = function() - local hidden = require("core.utils").load_config().ui.plugin.statusline.hidden - local shown = require("core.utils").load_config().ui.plugin.statusline.shown + local hidden = require("core.utils").load_config().plugins.options.statusline.hidden + local shown = require("core.utils").load_config().plugins.options.statusline.shown local api = vim.api local buftype = api.nvim_buf_get_option("%", "ft") diff --git a/lua/custom/chadrc.lua b/lua/custom/chadrc.lua index 385b6f2..cab9743 100644 --- a/lua/custom/chadrc.lua +++ b/lua/custom/chadrc.lua @@ -1,7 +1,7 @@ -- IMPORTANT NOTE : This is the user config, can be edited. Will be preserved if updated with internal updater local M = {} -M.ui, M.options, M.plugin_status, M.mappings, M.custom = {}, {}, {}, {}, {} +M.options, M.ui, M.mappings, M.plugins = {}, {}, {}, {} -- To use this file, copy the strucutre of `core/default_config.lua`, -- then define your new var, an example of setting relative number: @@ -11,25 +11,15 @@ M.ui, M.options, M.plugin_status, M.mappings, M.custom = {}, {}, {}, {}, {} -- } --- To change the Packer `config` of a plugin that comes with NvChad, --- add a table entry below matching the plugin github name --- '-' -> '_', remove any '.lua', '.nvim' extensions --- this string will be called in a `require` --- use "(custom.configs).my_func()" to call a function --- use "custom.blankline" to call a file -M.custom.default_plugin_overrides = { - -- indent_blankline = "custom.blankline", -} - -- user custom mappings --- e.g: name = { "mode" , "keys" , "cmd" , "options"} --- name: can be empty or something unique with repect to other custom mappings --- { mode, key, cmd } or name = { mode, key, cmd } --- mode: usage: mode or { mode1, mode2 }, multiple modes allowed, available modes => :h map-modes, --- keys: multiple keys allowed, same synxtax as modes --- cmd: for vim commands, must use ':' at start and add at the end if want to execute --- options: see :h nvim_set_keymap() opts section -M.custom.mappings = { +-- format: name = { "mode" , "keys" , "cmd" , "options"} + -- name: can be empty or something unique with repect to other custom mappings + -- { mode, key, cmd } or name = { mode, key, cmd } + -- mode: usage: mode or { mode1, mode2 }, multiple modes allowed, available modes => :h map-modes, + -- keys: multiple keys allowed, same synxtax as modes + -- cmd: for vim commands, must use ':' at start and add at the end if want to execute + -- options: see :h nvim_set_keymap() opts section +M.mappings.custom = { -- clear_all = { -- "n", -- "cc", @@ -37,4 +27,23 @@ M.custom.mappings = { -- }, } +-- NvChad included plugin options & overrides +M.plugins = { + options = { + -- lspconfig = { + -- -- servers = {"html", "cssls"} + -- servers = {}, + -- }, + }, + -- To change the Packer `config` of a plugin that comes with NvChad, + -- add a table entry below matching the plugin github name + -- '-' -> '_', remove any '.lua', '.nvim' extensions + -- this string will be called in a `require` + -- use "(custom.configs).my_func()" to call a function + -- use "custom.blankline" to call a file + default_plugin_config_replace = { + + }, +} + return M diff --git a/lua/plugins/configs/lspconfig.lua b/lua/plugins/configs/lspconfig.lua index 6704a21..96017c8 100644 --- a/lua/plugins/configs/lspconfig.lua +++ b/lua/plugins/configs/lspconfig.lua @@ -57,7 +57,7 @@ capabilities.textDocument.completion.completionItem.resolveSupport = { }, } -local servers = require("core.utils").load_config().plugins.lspconfig.servers +local servers = require("core.utils").load_config().plugins.options.lspconfig.servers for _, lsp in ipairs(servers) do nvim_lsp[lsp].setup { diff --git a/lua/plugins/configs/others.lua b/lua/plugins/configs/others.lua index d967f26..959e5f3 100644 --- a/lua/plugins/configs/others.lua +++ b/lua/plugins/configs/others.lua @@ -1,7 +1,5 @@ local M = {} -local config = require("core.utils").load_config() - M.autopairs = function() local present1, autopairs = pcall(require, "nvim-autopairs") local present2, autopairs_completion = pcall(require, "nvim-autopairs.completion.cmp") @@ -25,7 +23,7 @@ M.autosave = function() end autosave.setup { - enabled = config.options.plugin.autosave, -- takes boolean value from chadrc.lua + enabled = config.plugins.options.autosave, -- takes boolean value from init.lua execution_message = "autosaved at : " .. vim.fn.strftime "%H:%M:%S", events = { "InsertLeave", "TextChanged" }, conditions = { @@ -40,10 +38,10 @@ M.autosave = function() end M.better_escape = function() - local m = require("core.utils").load_config().mappings.plugin.better_escape.esc_insertmode + local config = require("core.utils").load_config() require("better_escape").setup { - mapping = m, - timeout = config.options.plugin.esc_insertmode_timeout or 300, + mapping = config.mappings.plugins.better_escape.esc_insertmode, + timeout = config.plugins.options.esc_insertmode_timeout, } end diff --git a/lua/plugins/configs/statusline.lua b/lua/plugins/configs/statusline.lua index 813fce7..d485e6f 100644 --- a/lua/plugins/configs/statusline.lua +++ b/lua/plugins/configs/statusline.lua @@ -42,7 +42,7 @@ local icon_styles = { }, } -local user_statusline_style = require("core.utils").load_config().ui.plugin.statusline.style +local user_statusline_style = require("core.utils").load_config().plugins.options.statusline.style local statusline_style = icon_styles[user_statusline_style] -- Initialize the components table diff --git a/lua/plugins/init.lua b/lua/plugins/init.lua index a2bea44..b9f6519 100644 --- a/lua/plugins/init.lua +++ b/lua/plugins/init.lua @@ -7,16 +7,14 @@ end local use = packer.use return packer.startup(function() - local plugin_status = require("core.utils").load_config().plugin_status - - -- local plugin_overrides = require("core.utils").load_config().custom.plugin_overrides + local plugin_status = require("core.utils").load_config().plugins.plugin_status -- FUNCTION: override_req, use `chadrc` plugin config override if present -- name = name inside `default_config` / `chadrc` -- default_req = run this if 'name' does not exist in `default_config` / `chadrc` -- if override or default_req start with `(`, then strip that and assume override calls a function, not a whole file local override_req = function(name, default_req) - local override = require("core.utils").load_config().custom.default_plugin_overrides[name] + local override = require("core.utils").load_config().plugins.default_plugin_config_replace[name] local result if override == nil then @@ -166,7 +164,7 @@ return packer.startup(function() "Pocco81/AutoSave.nvim", config = override_req("autosave", "(plugins.configs.others).autosave()"), cond = function() - return require("core.utils").load_config().options.plugin.autosave == true + return require("core.utils").load_config().plugins.options.autosave == true end, }