Restructure config | Move some to a packer plugin | Lot of cleanup
* move teleacope files, updater and related utils to https://github.com/NvChad/core * restructure config file and directory structure * expose mappings for better escape * allow multiple mappings for some * improve merge table function for the same * move autocommands to a seperate file * rearrange everything alphabetically where sanely possible * rearrange packer plugin list on the basis of trigerred state config structure now . ├── init.lua ├── LICENSE ├── lua │ ├── chadrc.lua │ ├── colors │ │ ├── highlights.lua │ │ ├── init.lua │ │ └── themes │ │ ├── chadracula.lua │ │ ├── everforest.lua │ │ ├── gruvchad.lua │ │ ├── javacafe.lua │ │ ├── mountain.lua │ │ ├── norchad.lua │ │ ├── one-light.lua │ │ ├── onedark.lua │ │ ├── tokyonight.lua │ │ └── tomorrow-night.lua │ ├── core │ │ ├── autocmds.lua │ │ ├── init.lua │ │ ├── mappings.lua │ │ ├── options.lua │ │ └── utils.lua │ ├── default_config.lua │ └── plugins │ ├── configs │ │ ├── autopairs.lua │ │ ├── autosave.lua │ │ ├── bufferline.lua │ │ ├── chadsheet.lua │ │ ├── compe.lua │ │ ├── dashboard.lua │ │ ├── gitsigns.lua │ │ ├── icons.lua │ │ ├── lspconfig.lua │ │ ├── luasnip.lua │ │ ├── nvimtree.lua │ │ ├── others.lua │ │ ├── statusline.lua │ │ ├── telescope.lua │ │ ├── treesitter.lua │ │ └── zenmode.lua │ ├── init.lua │ └── packerInit.lua └── README.md
This commit is contained in:
		
							parent
							
								
									44ae0178f4
								
							
						
					
					
						commit
						9ffddb6b52
					
				
							
								
								
									
										14
									
								
								init.lua
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								init.lua
									
									
									
									
									
								
							| @ -1,12 +1,10 @@ | ||||
| local chad_modules = { | ||||
|    "options", | ||||
|    "mappings", | ||||
| local init_modules = { | ||||
|    "core", | ||||
| } | ||||
| 
 | ||||
| for i = 1, #chad_modules, 1 do | ||||
|    if not pcall(require, chad_modules[i]) then | ||||
|       error("Error loading " .. chad_modules[i] .. "\n") | ||||
| for _, module in ipairs(init_modules) do | ||||
|    local ok, err = pcall(require, module) | ||||
|    if not ok then | ||||
|       error("Error loading " .. module .. "\n\n" .. err) | ||||
|    end | ||||
| end | ||||
| 
 | ||||
| require("mappings").misc() | ||||
|  | ||||
							
								
								
									
										264
									
								
								lua/chadrc.lua
									
									
									
									
									
								
							
							
						
						
									
										264
									
								
								lua/chadrc.lua
									
									
									
									
									
								
							| @ -1,161 +1,191 @@ | ||||
| -- IMPORTANT NOTE : This is user config | ||||
| -- IMPORTANT NOTE : This is the user config, can be edited. Will be preserved if updated with internal updater | ||||
| 
 | ||||
| local M = {} | ||||
| 
 | ||||
| M.ui = { | ||||
|    italic_comments = false, | ||||
| 
 | ||||
|    -- theme to be used, to see all available themes, open the theme switcher by <leader> + th | ||||
|    theme = "onedark", | ||||
| 
 | ||||
|    -- theme toggle | ||||
|    theme_toggler = false, | ||||
|    fav_themes = { | ||||
|       "onedark", | ||||
|       "gruvchad", | ||||
|    -- theme toggler, toggle between two themes, see theme_toggleer mappings | ||||
|    theme_toggler = { | ||||
|       enabled = false, | ||||
|       fav_themes = { | ||||
|          "onedark", | ||||
|          "gruvchad", | ||||
|       }, | ||||
|    }, | ||||
|    italic_comments = false, | ||||
| 
 | ||||
|    -- 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, | ||||
| 
 | ||||
|    -- 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 = {}, | ||||
|       shown = { | ||||
|          -- "terminal" | ||||
|    -- plugin related ui options | ||||
|    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 = {}, | ||||
|          shown = { | ||||
|             -- "terminal" | ||||
|          }, | ||||
|          -- default, round , slant , block , arrow | ||||
|          style = "default", | ||||
|       }, | ||||
|       style = "default", -- default, round , slant , block , arrow | ||||
|    }, | ||||
| } | ||||
| 
 | ||||
| M.options = { | ||||
|    permanent_undo = true, | ||||
|    ruler = false, | ||||
|    clipboard = "unnamedplus", | ||||
|    cmdheight = 1, | ||||
|    expandtab = true, | ||||
|    hidden = true, | ||||
|    ignorecase = true, | ||||
|    insert_nav = true, -- navigation in insertmode | ||||
|    mapleader = " ", | ||||
|    mouse = "a", | ||||
|    cmdheight = 1, | ||||
|    updatetime = 250, | ||||
|    timeoutlen = 400, | ||||
|    clipboard = "unnamedplus", | ||||
|    number = true, | ||||
|    -- relative numbers in normal mode tool at the bottom of options.lua | ||||
|    relativenumber = false, | ||||
|    numberwidth = 2, | ||||
|    expandtab = true, | ||||
|    permanent_undo = true, | ||||
|    shiftwidth = 2, | ||||
|    smartindent = true, | ||||
|    mapleader = " ", | ||||
|    autosave = false, | ||||
|    enable_insertNav = true, -- navigation in insertmode | ||||
|    timeoutlen = 400, | ||||
|    relativenumber = false, | ||||
|    ruler = false, | ||||
|    updatetime = 250, | ||||
|    -- used for updater | ||||
|    update_url = "https://github.com/NvChad/NvChad", | ||||
|    update_branch = "main", | ||||
| 
 | ||||
|    -- these are plugin related 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 = { | ||||
|    -- UI | ||||
|    nvim_bufferline = true, | ||||
|    galaxyline = true, | ||||
|    nvim_colorizer = true, | ||||
|    dashboard_nvim = true, | ||||
|    blankline = true, | ||||
|    truezen_nvim = true, | ||||
|    better_esc = true, | ||||
|    -- lsp stuff | ||||
|    lspkind = true, | ||||
|    lspsignature = true, | ||||
|    -- git stuff | ||||
|    gitsigns = true, | ||||
|    vim_fugitive = true, | ||||
|    -- misc | ||||
|    neoformat = true, | ||||
|    vim_matchup = true, | ||||
|    autosave_nvim = true, | ||||
|    nvim_comment = true, | ||||
|    neoscroll_nvim = true, | ||||
|    telescope_media = true, | ||||
|    cheatsheet = true, | ||||
|    autosave = true, -- 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 = true, -- a nice looking dashboard | ||||
|    esc_insertmode = true, -- escape from insert mode using custom keys | ||||
|    galaxyline = true, -- statusline | ||||
|    gitsigns = true, -- gitsigns in statusline | ||||
|    lspkind = true, -- lsp enhancements | ||||
|    lspsignature = true, -- lsp enhancements | ||||
|    neoformat = true, -- universal formatter | ||||
|    neoscroll = true, -- smooth scroll | ||||
|    telescope_media = true, -- see media files in telescope picker | ||||
|    truezen = true, -- no distraction mode for nvim | ||||
|    vim_fugitive = true, -- git in nvim | ||||
|    vim_matchup = true, -- % magic, match it but improved | ||||
| } | ||||
| 
 | ||||
| -- make sure you dont use same keys twice | ||||
| M.mappings = { | ||||
|    -- plugin specific | ||||
|    truezen = { | ||||
|       ataraxisMode = "<leader>zz", | ||||
|       minimalisticmode = "<leader>zm", | ||||
|       focusmode = "<leader>zf", | ||||
|    }, | ||||
|    comment_nvim = { | ||||
|       comment_toggle = "<leader>/", | ||||
|    }, | ||||
|    nvimtree = { | ||||
|       treetoggle = "<C-n>", -- file manager | ||||
|    }, | ||||
|    neoformat = { | ||||
|       format = "<leader>fm", | ||||
|    }, | ||||
|    dashboard = { | ||||
|       open = "<leader>db", | ||||
|       newfile = "<leader>fn", | ||||
|       bookmarks = "<leader>bm", | ||||
|       sessionload = "<leader>l", | ||||
|       sessionsave = "<leader>s", | ||||
|    }, | ||||
|    telescope = { | ||||
|       live_grep = "<leader>fw", | ||||
|       git_status = "<leader>gt", | ||||
|       git_commits = "<leader>cm", | ||||
|       find_files = "<leader>ff", | ||||
|       buffers = "<leader>fb", | ||||
|       help_tags = "<leader>fh", | ||||
|       oldfiles = "<leader>fo", | ||||
|       themes = "<leader>th", | ||||
|    }, | ||||
|    telescope_media = { | ||||
|       media_files = "<leader>fp", | ||||
|    }, | ||||
|    chadsheet = { | ||||
|       default_keys = "<leader>dk", | ||||
|       user_keys = "<leader>uk", | ||||
|    }, | ||||
|    bufferline = { | ||||
|       new_buffer = "<S-t>", | ||||
|       newtab = "<C-t>b", | ||||
|       close = "<S-x>", -- close a buffer with custom func in utils.lua | ||||
|       cycleNext = "<TAB>", -- next buffer | ||||
|       cyclePrev = "<S-Tab>", -- previous buffer | ||||
|    }, | ||||
|    fugitive = { | ||||
|       Git = "<leader>gs", | ||||
|       diffget_2 = "<leader>gh", | ||||
|       diffget_3 = "<leader>gl", | ||||
|       git_blame = "<leader>gb", | ||||
|    }, | ||||
|    terms = { -- below are NvChad mappings, not plugin mappings | ||||
|       esc_termmode = "jk", | ||||
|       esc_hide_termmode = "JK", | ||||
|       pick_term = "<leader>W", -- note: this is a telescope extension | ||||
|       new_wind = "<leader>w", | ||||
|       new_vert = "<leader>v", | ||||
|       new_hori = "<leader>h", | ||||
|    }, | ||||
|    -- navigation in insert mode | ||||
|    -- close current focused buffer | ||||
|    close_buffer = "<leader>x", | ||||
|    copy_whole_file = "<C-a>", -- copy all contents of the current buffer | ||||
| 
 | ||||
|    -- navigation in insert mode, only if enabled in options | ||||
|    insert_nav = { | ||||
|       forward = "<C-l>", | ||||
|       backward = "<C-h>", | ||||
|       top_of_line = "<C-a>", | ||||
|       end_of_line = "<C-e>", | ||||
|       prev_line = "<C-j>", | ||||
|       forward = "<C-l>", | ||||
|       next_line = "<C-k>", | ||||
|       prev_line = "<C-j>", | ||||
|       top_of_line = "<C-a>", | ||||
|    }, | ||||
|    misc = { | ||||
|       copywhole_file = "<C-a>", | ||||
|       toggle_linenr = "<leader>n", -- show or hide line number | ||||
|       theme_toggle = "<leader>x", | ||||
|       update_nvchad = "<leader>uu", | ||||
| 
 | ||||
|    line_number_toggle = "<leader>n", -- show or hide line number | ||||
|    new_buffer = "<S-t>", -- open a new buffer | ||||
|    new_tab = "<C-t>b", -- open a new vim tab | ||||
|    save_file = "<C-s>", -- save file using :w | ||||
|    theme_toggler = "<leader>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 | ||||
|       pick_term = "<leader>W", | ||||
|       -- below three are for spawning terminals | ||||
|       new_horizontal = "<leader>h", | ||||
|       new_vertical = "<leader>v", | ||||
|       new_window = "<leader>w", | ||||
|    }, | ||||
| 
 | ||||
|    -- update nvchad from nvchad, chadness 101 | ||||
|    update_nvchad = "<leader>uu", | ||||
| 
 | ||||
|    -- all plugins related mappings | ||||
|    -- to get short info about a plugin, see the respective string in plugin_status, if not present, then info here | ||||
|    plugin = { | ||||
|       bufferline = { | ||||
|          next_buffer = "<TAB>", -- next buffer | ||||
|          prev_buffer = "<S-Tab>", -- previous buffer | ||||
|       }, | ||||
|       chadsheet = { | ||||
|          default_keys = "<leader>dk", | ||||
|          user_keys = "<leader>uk", | ||||
|       }, | ||||
|       comment = { | ||||
|          toggle = "<leader>/", -- trigger comment on a single/selected lines/number prefix | ||||
|       }, | ||||
|       dashboard = { | ||||
|          bookmarks = "<leader>bm", | ||||
|          new_file = "<leader>fn", -- basically create a new buffer | ||||
|          open = "<leader>db", -- open dashboard | ||||
|          session_load = "<leader>l", -- load a saved session | ||||
|          session_save = "<leader>s", -- save a session | ||||
|       }, | ||||
|       -- note: this is an edditional mapping to escape, escape key will still work | ||||
|       better_escape = { | ||||
|          esc_insertmode = { "jk" }, -- multiple mappings allowed | ||||
|       }, | ||||
|       nvimtree = { | ||||
|          toggle = "<C-n>", -- file manager | ||||
|       }, | ||||
|       neoformat = { | ||||
|          format = "<leader>fm", | ||||
|       }, | ||||
|       telescope = { | ||||
|          buffers = "<leader>fb", | ||||
|          find_files = "<leader>ff", | ||||
|          git_commits = "<leader>cm", | ||||
|          git_status = "<leader>gt", | ||||
|          help_tags = "<leader>fh", | ||||
|          live_grep = "<leader>fw", | ||||
|          oldfiles = "<leader>fo", | ||||
|          themes = "<leader>th", | ||||
|       }, | ||||
|       telescope_media = { | ||||
|          media_files = "<leader>fp", | ||||
|       }, | ||||
|       truezen = { -- distraction free modes mapping, hide statusline, tabline, line numbers | ||||
|          ataraxis_mode = "<leader>zz", -- center | ||||
|          focus_mode = "<leader>zf", | ||||
|          minimalistic_mode = "<leader>zm", -- as it is | ||||
|       }, | ||||
|       vim_fugitive = { | ||||
|          diff_get_2 = "<leader>gh", | ||||
|          diff_get_3 = "<leader>gl", | ||||
|          git = "<leader>gs", | ||||
|          git_blame = "<leader>gb", | ||||
|       }, | ||||
|    }, | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -1,60 +1,55 @@ | ||||
| local cmd = vim.cmd | ||||
| 
 | ||||
| local global_theme = "themes/" .. vim.g.nvchad_theme | ||||
| local colors = require(global_theme) | ||||
| local colors = require("colors").get() | ||||
| 
 | ||||
| local white = colors.white | ||||
| local darker_black = colors.darker_black | ||||
| local black = colors.black | ||||
| local black2 = colors.black2 | ||||
| local one_bg = colors.one_bg | ||||
| local one_bg2 = colors.one_bg2 | ||||
| local blue = colors.blue | ||||
| local darker_black = colors.darker_black | ||||
| local folder_bg = colors.folder_bg | ||||
| local green = colors.green | ||||
| local grey = colors.grey | ||||
| local grey_fg = colors.grey_fg | ||||
| local red = colors.red | ||||
| local line = colors.line | ||||
| local green = colors.green | ||||
| local nord_blue = colors.nord_blue | ||||
| local blue = colors.blue | ||||
| local yellow = colors.yellow | ||||
| local purple = colors.purple | ||||
| local one_bg = colors.one_bg | ||||
| local one_bg2 = colors.one_bg2 | ||||
| local pmenu_bg = colors.pmenu_bg | ||||
| local folder_bg = colors.folder_bg | ||||
| local purple = colors.purple | ||||
| local red = colors.red | ||||
| local white = colors.white | ||||
| local yellow = colors.yellow | ||||
| 
 | ||||
| -- for guifg , bg | ||||
| 
 | ||||
| local function fg(group, color) | ||||
|    cmd("hi " .. group .. " guifg=" .. color) | ||||
| end | ||||
| local ui = require("core.utils").load_config().ui | ||||
| 
 | ||||
| local function bg(group, color) | ||||
|    cmd("hi " .. group .. " guibg=" .. color) | ||||
| end | ||||
| 
 | ||||
| local function fg(group, color) | ||||
|    cmd("hi " .. group .. " guifg=" .. color) | ||||
| end | ||||
| 
 | ||||
| local function fg_bg(group, fgcol, bgcol) | ||||
|    cmd("hi " .. group .. " guifg=" .. fgcol .. " guibg=" .. bgcol) | ||||
| end | ||||
| 
 | ||||
| -- blankline | ||||
| 
 | ||||
| fg("IndentBlanklineChar", line) | ||||
| 
 | ||||
| -- misc -- | ||||
| fg("LineNr", grey) | ||||
| 
 | ||||
| -- Comments | ||||
| local ui = require("utils").load_config().ui | ||||
| 
 | ||||
| if ui.italic_comments then | ||||
|    cmd("hi Comment gui=italic guifg=" .. grey_fg) | ||||
|    fg("Comment", grey_fg .. " gui=italic") | ||||
| else | ||||
|    fg("Comment", grey_fg) | ||||
| end | ||||
| 
 | ||||
| fg("NvimInternalError", red) | ||||
| fg("VertSplit", line) | ||||
| cmd "hi clear CursorLine" -- disable cusror line | ||||
| fg("cursorlinenr", white) -- line number | ||||
| 
 | ||||
| -- same it bg, so it doesn't appear | ||||
| fg("EndOfBuffer", black) | ||||
| -- fg_bg("Visual",light_grey, colors.lightbg) | ||||
| 
 | ||||
| -- For floating windows | ||||
| fg("FloatBorder", blue) | ||||
| bg("NormalFloat", one_bg) | ||||
| 
 | ||||
| -- Pmenu | ||||
| bg("Pmenu", one_bg) | ||||
| @ -62,74 +57,79 @@ bg("PmenuSbar", one_bg2) | ||||
| bg("PmenuSel", pmenu_bg) | ||||
| bg("PmenuThumb", nord_blue) | ||||
| 
 | ||||
| -- misc | ||||
| fg("LineNr", grey) | ||||
| 
 | ||||
| fg("NvimInternalError", red) | ||||
| 
 | ||||
| -- inactive statuslines as thin splitlines | ||||
| cmd("hi! StatusLineNC gui=underline guifg=" .. line) | ||||
| fg("StatusLineNC", line .. " gui=underline") | ||||
| 
 | ||||
| -- line n.o | ||||
| cmd "hi clear CursorLine" | ||||
| fg("cursorlinenr", white) | ||||
| fg("VertSplit", line) | ||||
| -- fg_bg("Visual",light_grey, colors.lightbg) | ||||
| 
 | ||||
| -- git signs --- | ||||
| if ui.transparency then | ||||
|    bg("Normal", "NONE") | ||||
|    bg("Folded", "NONE") | ||||
|    fg("Folded", "NONE") | ||||
|    fg("Comment", grey) | ||||
| end | ||||
| 
 | ||||
| ----- plugin related highlights ----- | ||||
| 
 | ||||
| -- dashboard -- | ||||
| fg("DashboardCenter", grey_fg) | ||||
| fg("DashboardFooter", grey_fg) | ||||
| fg("DashboardHeader", grey_fg) | ||||
| fg("DashboardShortcut", grey_fg) | ||||
| 
 | ||||
| -- git signs -- | ||||
| fg_bg("DiffAdd", nord_blue, "none") | ||||
| fg_bg("DiffChange", grey_fg, "none") | ||||
| fg_bg("DiffModified", nord_blue, "none") | ||||
| 
 | ||||
| -- NvimTree | ||||
| fg("NvimTreeFolderIcon", folder_bg) | ||||
| fg("NvimTreeFolderName", folder_bg) | ||||
| fg("NvimTreeGitDirty", red) | ||||
| fg("NvimTreeOpenedFolderName", blue) | ||||
| fg("NvimTreeEmptyFolderName", blue) | ||||
| fg("NvimTreeIndentMarker", one_bg2) | ||||
| fg("NvimTreeVertSplit", darker_black) | ||||
| bg("NvimTreeVertSplit", darker_black) | ||||
| fg("NvimTreeEndOfBuffer", darker_black) | ||||
| 
 | ||||
| cmd("hi NvimTreeRootFolder gui=underline guifg=" .. red) | ||||
| bg("NvimTreeNormal", darker_black) | ||||
| fg_bg("NvimTreeStatuslineNc", darker_black, darker_black) | ||||
| fg_bg("NvimTreeWindowPicker", red, black2) | ||||
| 
 | ||||
| -- telescope | ||||
| fg("TelescopeBorder", line) | ||||
| fg("TelescopePromptBorder", line) | ||||
| fg("TelescopeResultsBorder", line) | ||||
| fg("TelescopePreviewBorder", grey) | ||||
| 
 | ||||
| -- LspDiagnostics --- | ||||
| -- indent blankline plugin -- | ||||
| fg("IndentBlanklineChar", line) | ||||
| 
 | ||||
| -- LspDiagnostics -- | ||||
| -- error / warnings | ||||
| fg("LspDiagnosticsSignError", red) | ||||
| fg("LspDiagnosticsVirtualTextError", red) | ||||
| fg("LspDiagnosticsSignWarning", yellow) | ||||
| fg("LspDiagnosticsVirtualTextError", red) | ||||
| fg("LspDiagnosticsVirtualTextWarning", yellow) | ||||
| 
 | ||||
| -- info | ||||
| fg("LspDiagnosticsSignInformation", green) | ||||
| fg("LspDiagnosticsVirtualTextInformation", green) | ||||
| 
 | ||||
| -- hint | ||||
| -- hints | ||||
| fg("LspDiagnosticsSignHint", purple) | ||||
| fg("LspDiagnosticsVirtualTextHint", purple) | ||||
| 
 | ||||
| -- dashboard | ||||
| 
 | ||||
| fg("DashboardHeader", grey_fg) | ||||
| fg("DashboardCenter", grey_fg) | ||||
| fg("DashboardShortcut", grey_fg) | ||||
| fg("DashboardFooter", grey_fg) | ||||
| 
 | ||||
| if require("utils").load_config().ui.transparency then | ||||
|    bg("Normal", "NONE") | ||||
|    bg("Folded", "NONE") | ||||
|    fg("Folded", "NONE") | ||||
| -- NvimTree -- | ||||
| fg("NvimTreeEmptyFolderName", blue) | ||||
| fg("NvimTreeEndOfBuffer", darker_black) | ||||
| fg("NvimTreeFolderIcon", folder_bg) | ||||
| fg("NvimTreeFolderName", folder_bg) | ||||
| fg("NvimTreeGitDirty", red) | ||||
| fg("NvimTreeIndentMarker", one_bg2) | ||||
| bg("NvimTreeNormal", darker_black) | ||||
| fg("NvimTreeOpenedFolderName", blue) | ||||
| fg("NvimTreeRootFolder", red .. " gui=underline") -- enable underline for root folder in nvim tree | ||||
| fg_bg("NvimTreeStatuslineNc", darker_black, darker_black) | ||||
| fg("NvimTreeVertSplit", darker_black) | ||||
| bg("NvimTreeVertSplit", darker_black) | ||||
| fg_bg("NvimTreeWindowPicker", red, black2) | ||||
| -- disable some highlight in nvim tree if transparency enabled | ||||
| if ui.transparency then | ||||
|    bg("NvimTreeNormal", "NONE") | ||||
|    bg("NvimTreeStatusLineNC", "NONE") | ||||
|    bg("NvimTreeVertSplit", "NONE") | ||||
|    fg("NvimTreeVertSplit", grey) | ||||
|    bg("NvimTreeStatusLineNC", "NONE") | ||||
|    fg("Comment", grey) | ||||
| end | ||||
| 
 | ||||
| -- For floating windows | ||||
| bg("NormalFloat", one_bg) | ||||
| fg("FloatBorder", blue) | ||||
| -- telescope -- | ||||
| fg("TelescopeBorder", line) | ||||
| fg("TelescopePreviewBorder", grey) | ||||
| fg("TelescopePromptBorder", line) | ||||
| fg("TelescopeResultsBorder", line) | ||||
							
								
								
									
										36
									
								
								lua/colors/init.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								lua/colors/init.lua
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | ||||
| local M = {} | ||||
| 
 | ||||
| -- if theme given, load given theme if given, otherwise nvchad_theme | ||||
| M.init = function(theme) | ||||
|    if not theme then | ||||
|       theme = require("core.utils").load_config().ui.theme | ||||
|    end | ||||
| 
 | ||||
|    -- set the global theme, used at various places like theme switcher, highlights | ||||
|    vim.g.nvchad_theme = theme | ||||
| 
 | ||||
|    local present, base16 = pcall(require, "base16") | ||||
| 
 | ||||
|    if present then | ||||
|       -- first load the base16 theme | ||||
|       base16(base16.themes(theme), true) | ||||
| 
 | ||||
|       -- unload to force reload | ||||
|       package.loaded["colors.highlights" or false] = nil | ||||
|       -- then load the highlights | ||||
|       require "colors.highlights" | ||||
|    else | ||||
|       return false | ||||
|    end | ||||
| end | ||||
| 
 | ||||
| -- returns a table of colors for givem or current theme | ||||
| M.get = function(theme) | ||||
|    if not theme then | ||||
|       theme = vim.g.nvchad_theme | ||||
|    end | ||||
| 
 | ||||
|    return require("colors.themes." .. theme) | ||||
| end | ||||
| 
 | ||||
| return M | ||||
							
								
								
									
										17
									
								
								lua/core/autocmds.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								lua/core/autocmds.lua
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | ||||
| -- uncomment this if you want to open nvim with a dir | ||||
| -- vim.cmd [[ autocmd BufEnter * if &buftype != "terminal" | lcd %:p:h | endif ]] | ||||
| 
 | ||||
| -- Use relative & absolute line numbers in 'n' & 'i' modes respectively | ||||
| -- vim.cmd[[ au InsertEnter * set norelativenumber ]] | ||||
| -- vim.cmd[[ au InsertLeave * set relativenumber ]] | ||||
| 
 | ||||
| -- Don't show any numbers inside terminals | ||||
| vim.cmd [[ au TermOpen term://* setlocal nonumber norelativenumber | setfiletype terminal ]] | ||||
| 
 | ||||
| -- Don't show status line on certain windows | ||||
| vim.cmd [[ autocmd BufEnter,BufWinEnter,WinEnter,CmdwinEnter,TermEnter * lua require("core.utils").hide_statusline() ]] | ||||
| 
 | ||||
| -- Open a file from its last left off position | ||||
| -- vim.cmd [[ au BufReadPost * if expand('%:p') !~# '\m/\.git/' && line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif ]] | ||||
| -- File extension specific tabbing | ||||
| -- vim.cmd [[ autocmd Filetype python setlocal expandtab tabstop=4 shiftwidth=4 softtabstop=4 ]] | ||||
							
								
								
									
										15
									
								
								lua/core/init.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								lua/core/init.lua
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | ||||
| local core_modules = { | ||||
|    "core.options", | ||||
|    "core.autocmds", | ||||
|    "core.mappings", | ||||
| } | ||||
| 
 | ||||
| for _, module in ipairs(core_modules) do | ||||
|    local ok, err = pcall(require, module) | ||||
|    if not ok then | ||||
|       error("Error loading " .. module .. "\n\n" .. err) | ||||
|    end | ||||
| end | ||||
| 
 | ||||
| -- set all the non plugin mappings | ||||
| require("core.mappings").misc() | ||||
							
								
								
									
										202
									
								
								lua/core/mappings.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										202
									
								
								lua/core/mappings.lua
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,202 @@ | ||||
| local config = require("core.utils").load_config() | ||||
| local maps = config.mappings | ||||
| local plugin_maps = maps.plugin | ||||
| local cmd = vim.cmd | ||||
| 
 | ||||
| local function map(mode, lhs, rhs, opts) | ||||
|    local options = { noremap = true, silent = true } | ||||
|    if opts then | ||||
|       options = vim.tbl_extend("force", options, opts) | ||||
|    end | ||||
| 
 | ||||
|    -- if list of keys provided then run set for all of them | ||||
|    if type(lhs) == "table" then | ||||
|       for _, key in ipairs(lhs) do | ||||
|          vim.api.nvim_set_keymap(mode, key, rhs, options) | ||||
|       end | ||||
|    else | ||||
|       vim.api.nvim_set_keymap(mode, lhs, rhs, options) | ||||
|    end | ||||
| end | ||||
| 
 | ||||
| local opt, M = {}, {} | ||||
| 
 | ||||
| -- these mappings will only be called during initialization | ||||
| M.misc = function() | ||||
|    local function non_config_mappings() | ||||
|       -- dont copy any deleted text , this is disabled by default so uncomment the below mappings if you want them | ||||
|       -- map("n", "dd", [=[ "_dd ]=], opt) | ||||
|       -- map("v", "dd", [=[ "_dd ]=], opt) | ||||
|       -- map("v", "x", [=[ "_x ]=], opt) | ||||
|       -- todo: this should be configurable via chadrc | ||||
| 
 | ||||
|       -- Don't copy the replaced text after pasting in visual mode | ||||
|       map("v", "p", '"_dP', opt) | ||||
| 
 | ||||
|       -- Allow moving the cursor through wrapped lines with j, k, <Up> and <Down> | ||||
|       -- http://www.reddit.com/r/vim/comments/2k4cbr/problem_with_gj_and_gk/ | ||||
|       -- empty mode is same as using :map | ||||
|       map("", "j", 'v:count ? "j" : "gj"', { expr = true }) | ||||
|       map("", "k", 'v:count ? "k" : "gk"', { expr = true }) | ||||
|       map("", "<Down>", 'v:count ? "j" : "gj"', { expr = true }) | ||||
|       map("", "<Up>", 'v:count ? "k" : "gk"', { expr = true }) | ||||
| 
 | ||||
|       -- use ESC to turn off search highlighting | ||||
|       map("n", "<Esc>", ":noh <CR>", opt) | ||||
|    end | ||||
| 
 | ||||
|    local function optional_mappings() | ||||
|       -- navigation within insert mode | ||||
|       if config.options.insert_nav then | ||||
|          local inav = maps.insert_nav | ||||
| 
 | ||||
|          map("i", inav.backward, "<Left>", opt) | ||||
|          map("i", inav.end_of_line, "<End>", opt) | ||||
|          map("i", inav.forward, "<Right>", opt) | ||||
|          map("i", inav.next_line, "<Up>", opt) | ||||
|          map("i", inav.prev_line, "<Down>", opt) | ||||
|          map("i", inav.top_of_line, "<ESC>^i", opt) | ||||
|       end | ||||
| 
 | ||||
|       -- check the theme toggler | ||||
|       if config.ui.theme_toggler then | ||||
|          map( | ||||
|             "n", | ||||
|             maps.theme_toggler, | ||||
|             ":lua require('nvchad').toggle_theme(require('core.utils').load_config().ui.theme_toggler.fav_themes) <CR>", | ||||
|             opt | ||||
|          ) | ||||
|       end | ||||
|    end | ||||
| 
 | ||||
|    local function required_mappings() | ||||
|       map("n", maps.close_buffer, ":lua require('core.utils').close_buffer() <CR>", opt) -- close  buffer | ||||
|       map("n", maps.copy_whole_file, ":%y+ <CR>", opt) -- copy whole file content | ||||
|       map("n", maps.new_buffer, ":enew <CR>", opt) -- new buffer | ||||
|       map("n", maps.new_tab, ":tabnew <CR>", opt) -- new tabs | ||||
|       map("n", maps.line_number_toggle, ":set nu! <CR>", opt) -- toggle numbers | ||||
|       map("n", maps.save_file, ":w <CR>", opt) -- ctrl + s to save file | ||||
| 
 | ||||
|       -- terminal mappings -- | ||||
|       local term_maps = maps.terminal | ||||
|       -- get out of terminal mode | ||||
|       map("t", term_maps.esc_termmode, "<C-\\><C-n>", opt) | ||||
|       -- hide a term from within terminal mode | ||||
|       map("t", term_maps.esc_hide_termmode, "<C-\\><C-n> :lua require('core.utils').close_buffer() <CR>", opt) | ||||
|       -- pick a hidden term | ||||
|       map("n", term_maps.pick_term, ":Telescope terms <CR>", opt) | ||||
|       -- Open terminals | ||||
|       -- TODO this opens on top of an existing vert/hori term, fixme | ||||
|       map( | ||||
|          "n", | ||||
|          term_maps.new_horizontal, | ||||
|          ":execute 15 .. 'new +terminal' | let b:term_type = 'hori' | startinsert <CR>", | ||||
|          opt | ||||
|       ) | ||||
|       map("n", term_maps.new_vertical, ":execute 'vnew +terminal' | let b:term_type = 'vert' | startinsert <CR>", opt) | ||||
|       map("n", term_maps.new_window, ":execute 'terminal' | let b:term_type = 'wind' | startinsert <CR>", opt) | ||||
|       -- terminal mappings end -- | ||||
| 
 | ||||
|       -- Add Packer commands because we are not loading it at startup | ||||
|       cmd "silent! command PackerCompile lua require 'plugins' require('packer').compile()" | ||||
|       cmd "silent! command PackerInstall lua require 'plugins' require('packer').install()" | ||||
|       cmd "silent! command PackerStatus lua require 'plugins' require('packer').status()" | ||||
|       cmd "silent! command PackerSync lua require 'plugins' require('packer').sync()" | ||||
|       cmd "silent! command PackerUpdate lua require 'plugins' require('packer').update()" | ||||
| 
 | ||||
|       -- add NvChadUpdate command and mapping | ||||
|       cmd "silent! command! NvChadUpdate lua require('nvchad').update_nvchad()" | ||||
|       map("n", maps.update_nvchad, ":NvChadUpdate <CR>", opt) | ||||
|    end | ||||
| 
 | ||||
|    non_config_mappings() | ||||
|    optional_mappings() | ||||
|    required_mappings() | ||||
| end | ||||
| 
 | ||||
| -- below are all plugin related mappinsg | ||||
| 
 | ||||
| M.better_escape = function() | ||||
|    vim.g.better_escape_shortcut = plugin_maps.better_escape.esc_insertmode or { "" } | ||||
| end | ||||
| 
 | ||||
| M.bufferline = function() | ||||
|    local m = plugin_maps.bufferline | ||||
| 
 | ||||
|    map("n", m.next_buffer, ":BufferLineCycleNext <CR>", opt) | ||||
|    map("n", m.prev_buffer, ":BufferLineCyclePrev <CR>", opt) | ||||
| end | ||||
| 
 | ||||
| M.chadsheet = function() | ||||
|    local m = plugin_maps.chadsheet | ||||
| 
 | ||||
|    map("n", m.default_keys, ":lua require('cheatsheet').show_cheatsheet_telescope() <CR>", opt) | ||||
|    map( | ||||
|       "n", | ||||
|       m.user_keys, | ||||
|       ":lua require('cheatsheet').show_cheatsheet_telescope{bundled_cheatsheets = false, bundled_plugin_cheatsheets = false } <CR>", | ||||
|       opt | ||||
|    ) | ||||
| end | ||||
| 
 | ||||
| M.comment = function() | ||||
|    local m = plugin_maps.comment.toggle | ||||
|    map("n", m, ":CommentToggle <CR>", opt) | ||||
|    map("v", m, ":CommentToggle <CR>", opt) | ||||
| end | ||||
| 
 | ||||
| M.dashboard = function() | ||||
|    local m = plugin_maps.dashboard | ||||
| 
 | ||||
|    map("n", m.bookmarks, ":DashboardJumpMarks <CR>", opt) | ||||
|    map("n", m.new_file, ":DashboardNewFile <CR>", opt) | ||||
|    map("n", m.open, ":Dashboard <CR>", opt) | ||||
|    map("n", m.session_load, ":SessionLoad <CR>", opt) | ||||
|    map("n", m.session_save, ":SessionSave <CR>", opt) | ||||
| end | ||||
| 
 | ||||
| M.nvimtree = function() | ||||
|    map("n", plugin_maps.nvimtree.toggle, ":NvimTreeToggle <CR>", opt) | ||||
| end | ||||
| 
 | ||||
| M.neoformat = function() | ||||
|    map("n", plugin_maps.neoformat.format, ":Neoformat <CR>", opt) | ||||
| end | ||||
| 
 | ||||
| M.telescope = function() | ||||
|    local m = plugin_maps.telescope | ||||
| 
 | ||||
|    map("n", m.buffers, ":Telescope buffers <CR>", opt) | ||||
|    map("n", m.find_files, ":Telescope find_files <CR>", opt) | ||||
|    map("n", m.git_commits, ":Telescope git_commits <CR>", opt) | ||||
|    map("n", m.git_status, ":Telescope git_status <CR>", opt) | ||||
|    map("n", m.help_tags, ":Telescope help_tags <CR>", opt) | ||||
|    map("n", m.live_grep, ":Telescope live_grep <CR>", opt) | ||||
|    map("n", m.oldfiles, ":Telescope oldfiles <CR>", opt) | ||||
|    map("n", m.themes, ":Telescope themes <CR>", opt) | ||||
| end | ||||
| 
 | ||||
| M.telescope_media = function() | ||||
|    local m = plugin_maps.telescope_media | ||||
| 
 | ||||
|    map("n", m.media_files, ":Telescope media_files <CR>", opt) | ||||
| end | ||||
| 
 | ||||
| M.truezen = function() | ||||
|    local m = plugin_maps.truezen | ||||
| 
 | ||||
|    map("n", m.ataraxis_mode, ":TZAtaraxis <CR>", opt) | ||||
|    map("n", m.focus_mode, ":TZFocus <CR>", opt) | ||||
|    map("n", m.minimalistic_mode, ":TZMinimalist <CR>", opt) | ||||
| end | ||||
| 
 | ||||
| M.vim_fugitive = function() | ||||
|    local m = plugin_maps.vim_fugitive | ||||
| 
 | ||||
|    map("n", m.git, ":Git <CR>", opt) | ||||
|    map("n", m.git_blame, ":Git blame <CR>", opt) | ||||
|    map("n", m.diff_get_2, ":diffget //2 <CR>", opt) | ||||
|    map("n", m.diff_get_3, ":diffget //3 <CR>", opt) | ||||
| end | ||||
| 
 | ||||
| return M | ||||
| @ -4,87 +4,71 @@ local g = vim.g | ||||
| -- export user config as a global varibale | ||||
| g.nvchad_user_config = "chadrc" | ||||
| 
 | ||||
| local options = require("utils").load_config().options | ||||
| local options = require("core.utils").load_config().options | ||||
| 
 | ||||
| opt.completeopt = { "menuone", "noselect" } | ||||
| opt.undofile = options.permanent_undo | ||||
| opt.ruler = options.ruler | ||||
| opt.hidden = options.hidden | ||||
| opt.ignorecase = options.ignorecase | ||||
| opt.splitbelow = true | ||||
| opt.splitright = true | ||||
| opt.termguicolors = true | ||||
| opt.cul = true | ||||
| opt.mouse = options.mouse | ||||
| opt.signcolumn = "yes" | ||||
| opt.cmdheight = options.cmdheight | ||||
| opt.updatetime = options.updatetime -- update interval for gitsigns | ||||
| opt.timeoutlen = options.timeoutlen | ||||
| opt.clipboard = options.clipboard | ||||
| opt.cmdheight = options.cmdheight | ||||
| opt.completeopt = { "menuone", "noselect" } | ||||
| opt.cul = true -- cursor line | ||||
| 
 | ||||
| -- disable nvim intro | ||||
| opt.shortmess:append "sI" | ||||
| -- Indentline | ||||
| 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 | ||||
| opt.fillchars = { eob = " " } | ||||
| 
 | ||||
| opt.hidden = options.hidden | ||||
| opt.ignorecase = options.ignorecase | ||||
| opt.mouse = options.mouse | ||||
| 
 | ||||
| -- Numbers | ||||
| opt.number = options.number | ||||
| opt.numberwidth = options.numberwidth | ||||
| opt.relativenumber = options.relativenumber | ||||
| opt.ruler = options.ruler | ||||
| 
 | ||||
| -- Indenline | ||||
| opt.expandtab = options.expandtab | ||||
| opt.shiftwidth = options.shiftwidth | ||||
| opt.smartindent = options.smartindent | ||||
| -- disable nvim intro | ||||
| opt.shortmess:append "sI" | ||||
| opt.signcolumn = "yes" | ||||
| opt.splitbelow = true | ||||
| opt.splitright = true | ||||
| opt.termguicolors = true | ||||
| opt.timeoutlen = options.timeoutlen | ||||
| opt.undofile = options.permanent_undo | ||||
| 
 | ||||
| -- interval for writing swap file to disk, also used by gitsigns | ||||
| opt.updatetime = options.updatetime | ||||
| 
 | ||||
| -- 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 = options.mapleader | ||||
| g.auto_save = options.autosave | ||||
| 
 | ||||
| -- disable builtin vim plugins | ||||
| -- disable some builtin vim plugins | ||||
| local disabled_built_ins = { | ||||
|    "2html_plugin", | ||||
|    "getscript", | ||||
|    "getscriptPlugin", | ||||
|    "gzip", | ||||
|    "logipat", | ||||
|    "netrw", | ||||
|    "netrwPlugin", | ||||
|    "netrwSettings", | ||||
|    "netrwFileHandlers", | ||||
|    "gzip", | ||||
|    "zip", | ||||
|    "zipPlugin", | ||||
|    "matchit", | ||||
|    "tar", | ||||
|    "tarPlugin", | ||||
|    "getscript", | ||||
|    "getscriptPlugin", | ||||
|    "vimball", | ||||
|    "vimballPlugin", | ||||
|    "2html_plugin", | ||||
|    "logipat", | ||||
|    "rrhelper", | ||||
|    "spellfile_plugin", | ||||
|    "matchit", | ||||
|    "vimball", | ||||
|    "vimballPlugin", | ||||
|    "zip", | ||||
|    "zipPlugin", | ||||
| } | ||||
| 
 | ||||
| for _, plugin in pairs(disabled_built_ins) do | ||||
|    g["loaded_" .. plugin] = 1 | ||||
| end | ||||
| 
 | ||||
| -- uncomment this if you want to open nvim with a dir | ||||
| -- vim.cmd [[ autocmd BufEnter * if &buftype != "terminal" | lcd %:p:h | endif ]] | ||||
| 
 | ||||
| -- Use relative & absolute line numbers in 'n' & 'i' modes respectively | ||||
| -- vim.cmd[[ au InsertEnter * set norelativenumber ]] | ||||
| -- vim.cmd[[ au InsertLeave * set relativenumber ]] | ||||
| 
 | ||||
| -- Don't show any numbers inside terminals | ||||
| vim.cmd [[ au TermOpen term://* setlocal nonumber norelativenumber | setfiletype terminal ]] | ||||
| 
 | ||||
| -- Don't show status line on certain windows | ||||
| vim.cmd [[ autocmd BufEnter,BufWinEnter,WinEnter,CmdwinEnter,TermEnter * lua require("utils").hide_statusline() ]] | ||||
| 
 | ||||
| -- Open a file from its last left off position | ||||
| -- vim.cmd [[ au BufReadPost * if expand('%:p') !~# '\m/\.git/' && line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif ]] | ||||
| -- File extension specific tabbing | ||||
| -- vim.cmd [[ autocmd Filetype python setlocal expandtab tabstop=4 shiftwidth=4 softtabstop=4 ]] | ||||
							
								
								
									
										265
									
								
								lua/core/utils.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										265
									
								
								lua/core/utils.lua
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,265 @@ | ||||
| local M = {} | ||||
| 
 | ||||
| M.close_buffer = function(bufexpr, force) | ||||
|    -- This is a modification of a NeoVim plugin from | ||||
|    -- Author: ojroques - Olivier Roques | ||||
|    -- Src: https://github.com/ojroques/nvim-bufdel | ||||
|    -- (Author has okayed copy-paste) | ||||
| 
 | ||||
|    -- Options | ||||
|    local opts = { | ||||
|       next = "cycle", -- how to retrieve the next buffer | ||||
|       quit = false, -- exit when last buffer is deleted | ||||
|       --TODO make this a chadrc flag/option | ||||
|    } | ||||
| 
 | ||||
|    -- ---------------- | ||||
|    -- Helper functions | ||||
|    -- ---------------- | ||||
| 
 | ||||
|    -- Switch to buffer 'buf' on each window from list 'windows' | ||||
|    local function switch_buffer(windows, buf) | ||||
|       local cur_win = vim.fn.winnr() | ||||
|       for _, winid in ipairs(windows) do | ||||
|          vim.cmd(string.format("%d wincmd w", vim.fn.win_id2win(winid))) | ||||
|          vim.cmd(string.format("buffer %d", buf)) | ||||
|       end | ||||
|       vim.cmd(string.format("%d wincmd w", cur_win)) -- return to original window | ||||
|    end | ||||
| 
 | ||||
|    -- Select the first buffer with a number greater than given buffer | ||||
|    local function get_next_buf(buf) | ||||
|       local next = vim.fn.bufnr "#" | ||||
|       if opts.next == "alternate" and vim.fn.buflisted(next) == 1 then | ||||
|          return next | ||||
|       end | ||||
|       for i = 0, vim.fn.bufnr "$" - 1 do | ||||
|          next = (buf + i) % vim.fn.bufnr "$" + 1 -- will loop back to 1 | ||||
|          if vim.fn.buflisted(next) == 1 then | ||||
|             return next | ||||
|          end | ||||
|       end | ||||
|    end | ||||
| 
 | ||||
|    -- ---------------- | ||||
|    -- End helper functions | ||||
|    -- ---------------- | ||||
| 
 | ||||
|    local buf = vim.fn.bufnr() | ||||
|    if vim.fn.buflisted(buf) == 0 then -- exit if buffer number is invalid | ||||
|       vim.cmd "close" | ||||
|       return | ||||
|    end | ||||
| 
 | ||||
|    if #vim.fn.getbufinfo { buflisted = 1 } < 2 then | ||||
|       if opts.quit then | ||||
|          -- exit when there is only one buffer left | ||||
|          if force then | ||||
|             vim.cmd "qall!" | ||||
|          else | ||||
|             vim.cmd "confirm qall" | ||||
|          end | ||||
|          return | ||||
|       end | ||||
| 
 | ||||
|       local chad_term, type = pcall(function() | ||||
|          return vim.api.nvim_buf_get_var(buf, "term_type") | ||||
|       end) | ||||
| 
 | ||||
|       if chad_term then | ||||
|          -- Must be a window type | ||||
|          vim.cmd(string.format("setlocal nobl", buf)) | ||||
|          vim.cmd "enew" | ||||
|          return | ||||
|       end | ||||
|       -- don't exit and create a new empty buffer | ||||
|       vim.cmd "enew" | ||||
|       vim.cmd "bp" | ||||
|    end | ||||
| 
 | ||||
|    local next_buf = get_next_buf(buf) | ||||
|    local windows = vim.fn.getbufinfo(buf)[1].windows | ||||
| 
 | ||||
|    -- force deletion of terminal buffers to avoid the prompt | ||||
|    if force or vim.fn.getbufvar(buf, "&buftype") == "terminal" then | ||||
|       local chad_term, type = pcall(function() | ||||
|          return vim.api.nvim_buf_get_var(buf, "term_type") | ||||
|       end) | ||||
| 
 | ||||
|       -- TODO this scope is error prone, make resilient | ||||
|       if chad_term then | ||||
|          if type == "wind" then | ||||
|             -- hide from bufferline | ||||
|             vim.cmd(string.format("%d bufdo setlocal nobl", buf)) | ||||
|             -- swtich to another buff | ||||
|             -- TODO switch to next bufffer, this works too | ||||
|             vim.cmd "BufferLineCycleNext" | ||||
|          else | ||||
|             local cur_win = vim.fn.winnr() | ||||
|             -- we can close this window | ||||
|             vim.cmd(string.format("%d wincmd c", cur_win)) | ||||
|             return | ||||
|          end | ||||
|       else | ||||
|          switch_buffer(windows, next_buf) | ||||
|          vim.cmd(string.format("bd! %d", buf)) | ||||
|       end | ||||
|    else | ||||
|       switch_buffer(windows, next_buf) | ||||
|       vim.cmd(string.format("silent! confirm bd %d", buf)) | ||||
|    end | ||||
|    -- revert buffer switches if user has canceled deletion | ||||
|    if vim.fn.buflisted(buf) == 1 then | ||||
|       switch_buffer(windows, buf) | ||||
|    end | ||||
| 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 api = vim.api | ||||
|    local buftype = api.nvim_buf_get_option("%", "ft") | ||||
| 
 | ||||
|    -- shown table from config has the highest priority | ||||
|    if vim.tbl_contains(shown, buftype) then | ||||
|       api.nvim_set_option("laststatus", 2) | ||||
|       return | ||||
|    end | ||||
| 
 | ||||
|    if vim.tbl_contains(hidden, buftype) then | ||||
|       api.nvim_set_option("laststatus", 0) | ||||
|       return | ||||
|    else | ||||
|       api.nvim_set_option("laststatus", 2) | ||||
|    end | ||||
| end | ||||
| 
 | ||||
| -- Base code: https://gist.github.com/revolucas/184aec7998a6be5d2f61b984fac1d7f7 | ||||
| -- Changes over it: preserving table 1 contents and also update with table b, without duplicating | ||||
| -- 1st arg - base table | ||||
| -- 2nd arg - table to merge | ||||
| -- 3rg arg - list of nodes as a table, if the node is found replace the from table2 to result, rather than adding the value | ||||
| -- e.g: merge_table(t1, t2, { ['plugin']['truezen']['mappings'] }) | ||||
| M.merge_table = function(into, from, nodes_to_replace) | ||||
|    -- make sure both are table | ||||
|    if type(into) ~= "table" or type(from) ~= "table" then | ||||
|       return into | ||||
|    end | ||||
| 
 | ||||
|    local stack, seen = {}, {} | ||||
|    local table1, table2 = into, from | ||||
| 
 | ||||
|    if type(nodes_to_replace) == "table" then | ||||
|       -- function that will be executed with loadstring | ||||
|       local base_fn = [[ | ||||
| return function(table1, table2) | ||||
|    local t1, t2 = table1_node or false , table2_node or false | ||||
|    if t1 and t2 then | ||||
|       table1_node = table2_node | ||||
|    end | ||||
|    return table1 | ||||
| end]] | ||||
|       for _, node in ipairs(nodes_to_replace) do | ||||
|          -- replace the _node in base_fn to actual given node value | ||||
|          local fn = base_fn:gsub("_node", node) | ||||
|          -- if the node if found, it is replaced, otherwise table 1 is returned | ||||
|          table1 = loadstring(fn)()(table1, table2) | ||||
|       end | ||||
|    end | ||||
| 
 | ||||
|    while true do | ||||
|       for k, v in pairs(table2) do | ||||
|          if type(v) == "table" and type(table1[k]) == "table" then | ||||
|             table.insert(stack, { table1[k], table2[k] }) | ||||
|          else | ||||
|             local present = seen[v] or false | ||||
|             if not present then | ||||
|                if type(k) == "number" then | ||||
|                   -- add the value to seen table until value is found | ||||
|                   -- only do when key is number we just want to append to subtables | ||||
|                   -- todo: maybe improve this | ||||
| 
 | ||||
|                   for _, value in pairs(table1) do | ||||
|                      if value == v then | ||||
|                         present = true | ||||
|                         break | ||||
|                      end | ||||
|                   end | ||||
|                   seen[v] = true | ||||
|                   if not present then | ||||
|                      table1[#table1 + 1] = v | ||||
|                   end | ||||
|                else | ||||
|                   table1[k] = v | ||||
|                end | ||||
|             end | ||||
|          end | ||||
|       end | ||||
|       if #stack > 0 then | ||||
|          local t = stack[#stack] | ||||
|          table1, table2 = t[1], t[2] | ||||
|          stack[#stack] = nil | ||||
|       else | ||||
|          break | ||||
|       end | ||||
|    end | ||||
|    return into | ||||
| end | ||||
| 
 | ||||
| -- load config | ||||
| -- 1st arg = boolean - whether to force reload | ||||
| -- Modifies _G._NVCHAD_CONFIG global variable | ||||
| M.load_config = function(reload) | ||||
|    -- only do the stuff below one time, otherwise just return the set config | ||||
|    if _G._NVCHAD_CONFIG_CONTENTS ~= nil and not (reload or false) then | ||||
|       return _G._NVCHAD_CONFIG_CONTENTS | ||||
|    end | ||||
| 
 | ||||
|    -- these are the table value which will be always prioritiezed to take user config value | ||||
|    local to_replace = { | ||||
|       "['mappings']['plugin']['esc_insertmode']", | ||||
|       "['mappings']['terminal']['esc_termmode']", | ||||
|       "['mappings']['terminal']['esc_hide_termmode']", | ||||
|    } | ||||
| 
 | ||||
|    local default_config = "default_config" | ||||
|    local config_name = vim.g.nvchad_user_config or "chadrc" | ||||
|    local config_file = vim.fn.stdpath "config" .. "/lua/" .. config_name .. ".lua" | ||||
| 
 | ||||
|    -- unload the modules if force reload | ||||
|    if reload then | ||||
|       package.loaded[default_config or false] = nil | ||||
|       package.loaded[config_name or false] = nil | ||||
|    end | ||||
| 
 | ||||
|    -- don't enclose in pcall, it better break when default config is faulty | ||||
|    _G._NVCHAD_CONFIG_CONTENTS = require(default_config) | ||||
| 
 | ||||
|    -- user config is not required to run nvchad but a optional | ||||
|    -- Make sure the config doesn't break the whole system if user config is not present or in bad state or not a table | ||||
|    -- print warning texts if user config file is  present | ||||
|    -- check if the user config is present | ||||
|    if vim.fn.empty(vim.fn.glob(config_file)) < 1 then | ||||
|       local present, config = pcall(require, config_name) | ||||
|       if present then | ||||
|          -- make sure the returned value is table | ||||
|          if type(config) == "table" then | ||||
|             -- data = require(config_name) | ||||
|             _G._NVCHAD_CONFIG_CONTENTS = require("core.utils").merge_table( | ||||
|                _G._NVCHAD_CONFIG_CONTENTS, | ||||
|                config, | ||||
|                to_replace | ||||
|             ) | ||||
|          else | ||||
|             print("Warning: " .. config_name .. " sourced successfully but did not return a lua table.") | ||||
|          end | ||||
|       else | ||||
|          print("Warning: " .. config_file .. " is present but sourcing failed.") | ||||
|       end | ||||
|    end | ||||
|    return _G._NVCHAD_CONFIG_CONTENTS | ||||
| end | ||||
| 
 | ||||
| return M | ||||
| @ -3,162 +3,190 @@ | ||||
| local M = {} | ||||
| 
 | ||||
| M.ui = { | ||||
|    italic_comments = false, | ||||
| 
 | ||||
|    -- theme to be used, to see all available themes, open the theme switcher by <leader> + th | ||||
|    theme = "onedark", | ||||
| 
 | ||||
|    -- theme toggle | ||||
|    theme_toggler = false, | ||||
|    fav_themes = { | ||||
|       "onedark", | ||||
|       "gruvchad", | ||||
|    -- theme toggler, toggle between two themes, see theme_toggleer mappings | ||||
|    theme_toggler = { | ||||
|       enabled = false, | ||||
|       fav_themes = { | ||||
|          "onedark", | ||||
|          "gruvchad", | ||||
|       }, | ||||
|    }, | ||||
|    italic_comments = false, | ||||
| 
 | ||||
|    -- 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, | ||||
| 
 | ||||
|    -- 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 = { | ||||
|          "NvimTree", | ||||
|          "terminal", | ||||
|    -- plugin related ui options | ||||
|    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 = { | ||||
|             "NvimTree", | ||||
|             "terminal", | ||||
|          }, | ||||
|          shown = {}, | ||||
|          -- default, round , slant , block , arrow | ||||
|          style = "default", | ||||
|       }, | ||||
|       shown = {}, | ||||
|       style = "default", -- default, round , slant , block , arrow | ||||
|    }, | ||||
| } | ||||
| 
 | ||||
| M.options = { | ||||
|    permanent_undo = true, | ||||
|    ruler = false, | ||||
|    clipboard = "unnamedplus", | ||||
|    cmdheight = 1, | ||||
|    expandtab = true, | ||||
|    hidden = true, | ||||
|    ignorecase = true, | ||||
|    insert_nav = true, -- navigation in insertmode | ||||
|    mapleader = " ", | ||||
|    mouse = "a", | ||||
|    cmdheight = 1, | ||||
|    updatetime = 250, | ||||
|    timeoutlen = 400, | ||||
|    clipboard = "unnamedplus", | ||||
|    number = true, | ||||
|    -- relative numbers in normal mode tool at the bottom of options.lua | ||||
|    relativenumber = false, | ||||
|    numberwidth = 2, | ||||
|    expandtab = true, | ||||
|    permanent_undo = true, | ||||
|    shiftwidth = 2, | ||||
|    smartindent = true, | ||||
|    mapleader = " ", | ||||
|    autosave = false, | ||||
|    enable_insertNav = true, -- navigation in insertmode | ||||
|    timeoutlen = 400, | ||||
|    relativenumber = false, | ||||
|    ruler = false, | ||||
|    updatetime = 250, | ||||
|    -- used for updater | ||||
|    update_url = "https://github.com/NvChad/NvChad", | ||||
|    update_branch = "main", | ||||
| 
 | ||||
|    -- these are plugin related 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 = { | ||||
|    -- UI | ||||
|    nvim_bufferline = true, | ||||
|    galaxyline = true, | ||||
|    nvim_colorizer = true, | ||||
|    dashboard_nvim = true, | ||||
|    blankline = true, | ||||
|    truezen_nvim = true, | ||||
|    better_esc = true, | ||||
|    -- lsp stuff | ||||
|    lspkind = true, | ||||
|    lspsignature = true, | ||||
|    -- git stuff | ||||
|    gitsigns = true, | ||||
|    vim_fugitive = true, | ||||
|    -- misc | ||||
|    neoformat = true, | ||||
|    vim_matchup = true, | ||||
|    autosave_nvim = true, | ||||
|    nvim_comment = true, | ||||
|    neoscroll_nvim = true, | ||||
|    telescope_media = true, | ||||
|    cheatsheet = true, | ||||
|    autosave = true, -- 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 = true, -- a nice looking dashboard | ||||
|    esc_insertmode = true, -- escape from insert mode using custom keys | ||||
|    galaxyline = true, -- statusline | ||||
|    gitsigns = true, -- gitsigns in statusline | ||||
|    lspkind = true, -- lsp enhancements | ||||
|    lspsignature = true, -- lsp enhancements | ||||
|    neoformat = true, -- universal formatter | ||||
|    neoscroll = true, -- smooth scroll | ||||
|    telescope_media = true, -- see media files in telescope picker | ||||
|    truezen = true, -- no distraction mode for nvim | ||||
|    vim_fugitive = true, -- git in nvim | ||||
|    vim_matchup = true, -- % magic, match it but improved | ||||
| } | ||||
| 
 | ||||
| -- make sure you dont use same keys twice | ||||
| M.mappings = { | ||||
|    -- plugin specific | ||||
|    truezen = { | ||||
|       ataraxisMode = "<leader>zz", | ||||
|       minimalisticmode = "<leader>zm", | ||||
|       focusmode = "<leader>zf", | ||||
|    }, | ||||
|    comment_nvim = { | ||||
|       comment_toggle = "<leader>/", | ||||
|    }, | ||||
|    nvimtree = { | ||||
|       treetoggle = "<C-n>", -- file manager | ||||
|    }, | ||||
|    neoformat = { | ||||
|       format = "<leader>fm", | ||||
|    }, | ||||
|    dashboard = { | ||||
|       open = "<leader>db", | ||||
|       newfile = "<leader>fn", | ||||
|       bookmarks = "<leader>bm", | ||||
|       sessionload = "<leader>l", | ||||
|       sessionsave = "<leader>s", | ||||
|    }, | ||||
|    telescope = { | ||||
|       live_grep = "<leader>fw", | ||||
|       git_status = "<leader>gt", | ||||
|       git_commits = "<leader>cm", | ||||
|       find_files = "<leader>ff", | ||||
|       buffers = "<leader>fb", | ||||
|       help_tags = "<leader>fh", | ||||
|       oldfiles = "<leader>fo", | ||||
|       themes = "<leader>th", | ||||
|    }, | ||||
|    telescope_media = { | ||||
|       media_files = "<leader>fp", | ||||
|    }, | ||||
|    chadsheet = { | ||||
|       default_keys = "<leader>dk", | ||||
|       user_keys = "<leader>uk", | ||||
|    }, | ||||
|    bufferline = { | ||||
|       new_buffer = "<S-t>", | ||||
|       newtab = "<C-t>b", | ||||
|       close = "<S-x>", -- close a buffer with custom func in utils.lua | ||||
|       cycleNext = "<TAB>", -- next buffer | ||||
|       cyclePrev = "<S-Tab>", -- previous buffer | ||||
|    }, | ||||
|    fugitive = { | ||||
|       Git = "<leader>gs", | ||||
|       diffget_2 = "<leader>gh", | ||||
|       diffget_3 = "<leader>gl", | ||||
|       git_blame = "<leader>gb", | ||||
|    }, | ||||
|    terms = { -- below are NvChad mappings, not plugin mappings | ||||
|       esc_termmode = "jk", | ||||
|       esc_hide_termmode = "JK", | ||||
|       pick_term = "<leader>W", -- note: this is a telescope extension | ||||
|       new_wind = "<leader>w", | ||||
|       new_vert = "<leader>v", | ||||
|       new_hori = "<leader>h", | ||||
|    }, -- navigation in insert mode | ||||
|    -- close current focused buffer | ||||
|    close_buffer = "<leader>x", | ||||
|    copy_whole_file = "<C-a>", -- copy all contents of the current buffer | ||||
| 
 | ||||
|    -- navigation in insert mode, only if enabled in options | ||||
|    insert_nav = { | ||||
|       forward = "<C-l>", | ||||
|       backward = "<C-h>", | ||||
|       top_of_line = "<C-a>", | ||||
|       end_of_line = "<C-e>", | ||||
|       prev_line = "<C-j>", | ||||
|       forward = "<C-l>", | ||||
|       next_line = "<C-k>", | ||||
|       prev_line = "<C-j>", | ||||
|       top_of_line = "<C-a>", | ||||
|    }, | ||||
|    -- non plugin | ||||
|    misc = { | ||||
|       esc_Termmode = "jk", -- get out of terminal mode | ||||
|       close_buffer = "<leader>x", -- close current focused buffer | ||||
|       copywhole_file = "<C-a>", | ||||
|       toggle_linenr = "<leader>n", -- show or hide line number | ||||
|       theme_toggle = "<leader>tt", | ||||
|       update_nvchad = "<leader>uu", | ||||
| 
 | ||||
|    line_number_toggle = "<leader>n", -- show or hide line number | ||||
|    new_buffer = "<S-t>", -- open a new buffer | ||||
|    new_tab = "<C-t>b", -- open a new vim tab | ||||
|    save_file = "<C-s>", -- save file using :w | ||||
|    theme_toggler = "<leader>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 | ||||
|       pick_term = "<leader>W", | ||||
|       -- below three are for spawning terminals | ||||
|       new_horizontal = "<leader>h", | ||||
|       new_vertical = "<leader>v", | ||||
|       new_window = "<leader>w", | ||||
|    }, | ||||
| 
 | ||||
|    -- update nvchad from nvchad, chadness 101 | ||||
|    update_nvchad = "<leader>uu", | ||||
| 
 | ||||
|    -- all plugins related mappings | ||||
|    -- to get short info about a plugin, see the respective string in plugin_status, if not present, then info here | ||||
|    plugin = { | ||||
|       bufferline = { | ||||
|          next_buffer = "<TAB>", -- next buffer | ||||
|          prev_buffer = "<S-Tab>", -- previous buffer | ||||
|       }, | ||||
|       chadsheet = { | ||||
|          default_keys = "<leader>dk", | ||||
|          user_keys = "<leader>uk", | ||||
|       }, | ||||
|       comment = { | ||||
|          toggle = "<leader>/", -- trigger comment on a single/selected lines/number prefix | ||||
|       }, | ||||
|       dashboard = { | ||||
|          bookmarks = "<leader>bm", | ||||
|          new_file = "<leader>fn", -- basically create a new buffer | ||||
|          open = "<leader>db", -- open dashboard | ||||
|          session_load = "<leader>l", -- load a saved session | ||||
|          session_save = "<leader>s", -- save a session | ||||
|       }, | ||||
|       -- note: this is an edditional mapping to escape, escape key will still work | ||||
|       better_escape = { | ||||
|          esc_insertmode = { "jk" }, -- multiple mappings allowed | ||||
|       }, | ||||
|       nvimtree = { | ||||
|          toggle = "<C-n>", -- file manager | ||||
|       }, | ||||
|       neoformat = { | ||||
|          format = "<leader>fm", | ||||
|       }, | ||||
|       telescope = { | ||||
|          buffers = "<leader>fb", | ||||
|          find_files = "<leader>ff", | ||||
|          git_commits = "<leader>cm", | ||||
|          git_status = "<leader>gt", | ||||
|          help_tags = "<leader>fh", | ||||
|          live_grep = "<leader>fw", | ||||
|          oldfiles = "<leader>fo", | ||||
|          themes = "<leader>th", | ||||
|       }, | ||||
|       telescope_media = { | ||||
|          media_files = "<leader>fp", | ||||
|       }, | ||||
|       truezen = { -- distraction free modes mapping, hide statusline, tabline, line numbers | ||||
|          ataraxis_mode = "<leader>zz", -- center | ||||
|          focus_mode = "<leader>zf", | ||||
|          minimalistic_mode = "<leader>zm", -- as it is | ||||
|       }, | ||||
|       vim_fugitive = { | ||||
|          diff_get_2 = "<leader>gh", | ||||
|          diff_get_3 = "<leader>gl", | ||||
|          git = "<leader>gs", | ||||
|          git_blame = "<leader>gb", | ||||
|       }, | ||||
|    }, | ||||
| } | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										188
									
								
								lua/mappings.lua
									
									
									
									
									
								
							
							
						
						
									
										188
									
								
								lua/mappings.lua
									
									
									
									
									
								
							| @ -1,188 +0,0 @@ | ||||
| local user_map = require("utils").load_config().mappings | ||||
| local miscMap = user_map.misc | ||||
| 
 | ||||
| local cmd = vim.cmd | ||||
| 
 | ||||
| local function map(mode, lhs, rhs, opts) | ||||
|    local options = { noremap = true, silent = true } | ||||
|    if opts then | ||||
|       options = vim.tbl_extend("force", options, opts) | ||||
|    end | ||||
|    vim.api.nvim_set_keymap(mode, lhs, rhs, options) | ||||
| end | ||||
| 
 | ||||
| local M = {} | ||||
| local opt = {} | ||||
| 
 | ||||
| -- these mappings will only be called during initialization | ||||
| M.misc = function() | ||||
|    -- dont copy any deleted text , this is disabled by default so uncomment the below mappings if you want them | ||||
|    -- map("n", "dd", [=[ "_dd ]=], opt) | ||||
|    -- map("v", "dd", [=[ "_dd ]=], opt) | ||||
|    -- map("v", "x", [=[ "_x ]=], opt) | ||||
|    -- todo: this should be configurable via chadrc | ||||
| 
 | ||||
|    -- Don't copy the replaced text after pasting in visual mode | ||||
|    map("v", "p", '"_dP', opt) | ||||
| 
 | ||||
|    -- Allow moving the cursor through wrapped lines with j, k, <Up> and <Down> | ||||
|    -- http://www.reddit.com/r/vim/comments/2k4cbr/problem_with_gj_and_gk/ | ||||
|    -- empty mode is same as using :map | ||||
|    map("", "j", 'v:count ? "j" : "gj"', { expr = true }) | ||||
|    map("", "k", 'v:count ? "k" : "gk"', { expr = true }) | ||||
|    map("", "<Down>", 'v:count ? "j" : "gj"', { expr = true }) | ||||
|    map("", "<Up>", 'v:count ? "k" : "gk"', { expr = true }) | ||||
| 
 | ||||
|    -- copy whole file content | ||||
|    map("n", miscMap.copywhole_file, ":%y+<CR>", opt) | ||||
| 
 | ||||
|    -- toggle numbers | ||||
|    map("n", miscMap.toggle_linenr, ":set nu!<CR>", opt) | ||||
| 
 | ||||
|    -- terminals | ||||
|    local function terms() | ||||
|       local m = user_map.terms | ||||
| 
 | ||||
|       -- get out of terminal mode | ||||
|       map("t", m.esc_termmode, "<C-\\><C-n>", opt) | ||||
|       -- hide a term from within terminal mode | ||||
|       map("t", m.esc_hide_termmode, "<C-\\><C-n> :lua require('utils').close_buffer() <CR>", opt) | ||||
|       -- pick a hidden term | ||||
|       map("n", m.pick_term, ":Telescope terms <CR>", opt) | ||||
| 
 | ||||
|       -- Open terminals | ||||
|       -- TODO this opens on top of an existing vert/hori term, fixme | ||||
|       map("n", m.new_wind, ":execute 'terminal' | let b:term_type = 'wind' | startinsert <CR>", opt) | ||||
|       map("n", m.new_vert, ":execute 'vnew +terminal' | let b:term_type = 'vert' | startinsert <CR>", opt) | ||||
|       map("n", m.new_hori, ":execute 15 .. 'new +terminal' | let b:term_type = 'hori' | startinsert <CR>", opt) | ||||
|    end | ||||
|    terms() | ||||
| 
 | ||||
|    -- ctrl + s to save file | ||||
|    map("n", "<C-s>", ":w <CR>", opt) | ||||
| 
 | ||||
|    -- use ESC to turn off search highlighting | ||||
|    map("n", "<Esc>", ":noh<CR>", opt) | ||||
| 
 | ||||
|    -- navigation within insert mode | ||||
|    local check_insertNav = require("utils").load_config().options.enable_insertNav | ||||
| 
 | ||||
|    if check_insertNav == true then | ||||
|       local m = user_map.insert_nav | ||||
| 
 | ||||
|       map("i", m.forward, "<Right>", opt) | ||||
|       map("i", m.backward, "<Left>", opt) | ||||
|       map("i", m.top_of_line, "<ESC>^i", opt) | ||||
|       map("i", m.end_of_line, "<End>", opt) | ||||
|       map("i", m.next_line, "<Up>", opt) | ||||
|       map("i", m.prev_line, "<Down>", opt) | ||||
|    end | ||||
| 
 | ||||
|    -- check the theme toggler | ||||
|    local theme_toggler = require("utils").load_config().ui.theme_toggler | ||||
|    if theme_toggler == true then | ||||
|       local m = user_map.misc.theme_toggle | ||||
| 
 | ||||
|       map("n", m, ":lua require('utils').toggle_theme(require('utils').load_config().ui.fav_themes)<CR>", opt) | ||||
|    end | ||||
| 
 | ||||
|    -- Packer commands till because we are not loading it at startup | ||||
|    cmd "silent! command PackerCompile lua require 'pluginList' require('packer').compile()" | ||||
|    cmd "silent! command PackerInstall lua require 'pluginList' require('packer').install()" | ||||
|    cmd "silent! command PackerStatus lua require 'pluginList' require('packer').status()" | ||||
|    cmd "silent! command PackerSync lua require 'pluginList' require('packer').sync()" | ||||
|    cmd "silent! command PackerUpdate lua require 'pluginList' require('packer').update()" | ||||
| 
 | ||||
|    -- add NvChadUpdate command and mapping | ||||
|    cmd "silent! command! NvChadUpdate lua require('utils').update_nvchad()" | ||||
|    map("n", user_map.misc.update_nvchad, ":NvChadUpdate<CR>", opt) | ||||
| end | ||||
| 
 | ||||
| M.bufferline = function() | ||||
|    local m = user_map.bufferline | ||||
| 
 | ||||
|    map("n", m.new_buffer, ":enew<CR>", opt) -- new buffer | ||||
|    map("n", m.newtab, ":tabnew<CR>", opt) -- new tab | ||||
|    map("n", m.close, ":lua require('utils').close_buffer() <CR>", opt) -- close  buffer | ||||
| 
 | ||||
|    -- move between tabs | ||||
| 
 | ||||
|    map("n", m.cycleNext, ":BufferLineCycleNext<CR>", opt) | ||||
|    map("n", m.cyclePrev, ":BufferLineCyclePrev<CR>", opt) | ||||
| end | ||||
| 
 | ||||
| M.chadsheet = function() | ||||
|    local m = user_map.chadsheet | ||||
| 
 | ||||
|    map("n", m.default_keys, ":lua require('cheatsheet').show_cheatsheet_telescope()<CR>", opt) | ||||
|    map( | ||||
|       "n", | ||||
|       m.user_keys, | ||||
|       ":lua require('cheatsheet').show_cheatsheet_telescope{bundled_cheatsheets = false, bundled_plugin_cheatsheets = false }<CR>", | ||||
|       opt | ||||
|    ) | ||||
| end | ||||
| 
 | ||||
| M.comment_nvim = function() | ||||
|    local m = user_map.comment_nvim.comment_toggle | ||||
|    map("n", m, ":CommentToggle<CR>", opt) | ||||
|    map("v", m, ":CommentToggle<CR>", opt) | ||||
| end | ||||
| 
 | ||||
| M.dashboard = function() | ||||
|    local m = user_map.dashboard | ||||
| 
 | ||||
|    map("n", m.open, ":Dashboard<CR>", opt) | ||||
|    map("n", m.newfile, ":DashboardNewFile<CR>", opt) | ||||
|    map("n", m.bookmarks, ":DashboardJumpMarks<CR>", opt) | ||||
|    map("n", m.sessionload, ":SessionLoad<CR>", opt) | ||||
|    map("n", m.sessionsave, ":SessionSave<CR>", opt) | ||||
| end | ||||
| 
 | ||||
| M.fugitive = function() | ||||
|    local m = user_map.fugitive | ||||
| 
 | ||||
|    map("n", m.Git, ":Git<CR>", opt) | ||||
|    map("n", m.diffget_2, ":diffget //2<CR>", opt) | ||||
|    map("n", m.diffget_3, ":diffget //3<CR>", opt) | ||||
|    map("n", m.git_blame, ":Git blame<CR>", opt) | ||||
| end | ||||
| 
 | ||||
| M.nvimtree = function() | ||||
|    local m = user_map.nvimtree.treetoggle | ||||
| 
 | ||||
|    map("n", m, ":NvimTreeToggle<CR>", opt) | ||||
| end | ||||
| 
 | ||||
| M.neoformat = function() | ||||
|    local m = user_map.neoformat.format | ||||
|    map("n", m, ":Neoformat<CR>", opt) | ||||
| end | ||||
| 
 | ||||
| M.truezen = function() | ||||
|    local m = user_map.truezen | ||||
| 
 | ||||
|    map("n", m.ataraxisMode, ":TZAtaraxis<CR>", opt) | ||||
|    map("n", m.minimalisticmode, ":TZMinimalist<CR>", opt) | ||||
|    map("n", m.focusmode, ":TZFocus<CR>", opt) | ||||
| end | ||||
| 
 | ||||
| M.telescope = function() | ||||
|    local m = user_map.telescope | ||||
| 
 | ||||
|    map("n", m.live_grep, ":Telescope live_grep<CR>", opt) | ||||
|    map("n", m.git_status, ":Telescope git_status <CR>", opt) | ||||
|    map("n", m.git_commits, ":Telescope git_commits <CR>", opt) | ||||
|    map("n", m.find_files, ":Telescope find_files <CR>", opt) | ||||
|    map("n", m.buffers, ":Telescope buffers<CR>", opt) | ||||
|    map("n", m.help_tags, ":Telescope help_tags<CR>", opt) | ||||
|    map("n", m.oldfiles, ":Telescope oldfiles<CR>", opt) | ||||
|    map("n", m.themes, ":Telescope themes<CR>", opt) | ||||
| end | ||||
| 
 | ||||
| M.telescope_media = function() | ||||
|    local m = user_map.telescope_media | ||||
|    map("n", m.media_files, ":Telescope media_files <CR>", opt) | ||||
| end | ||||
| 
 | ||||
| return M | ||||
| @ -1,25 +0,0 @@ | ||||
| local present, chadsheet = pcall(require, "cheatsheet") | ||||
| 
 | ||||
| if not present then | ||||
|    return | ||||
| end | ||||
| 
 | ||||
| local mappings = require("utils").load_config().mappings | ||||
| 
 | ||||
| -- add user mappings to the cheetsheet | ||||
| for section, data in pairs(mappings) do | ||||
|    for description, keymap in pairs(data) do | ||||
|       chadsheet.add_cheat(description, keymap, section) | ||||
|    end | ||||
| end | ||||
| 
 | ||||
| require("cheatsheet").setup { | ||||
| 
 | ||||
|    bundled_cheatsheets = { | ||||
|       enabled = { "default" }, | ||||
|       disabled = { "unicode", "nerd-fonts" }, | ||||
|    }, | ||||
| 
 | ||||
|    bundled_plugin_cheatsheets = false, | ||||
|    include_only_installed_plugins = true, | ||||
| } | ||||
| @ -7,6 +7,6 @@ end | ||||
| 
 | ||||
| autopairs.setup() | ||||
| autopairs_completion.setup { | ||||
|    map_cr = true, | ||||
|    map_complete = true, -- insert () func completion | ||||
|    map_cr = true, | ||||
| } | ||||
| @ -5,7 +5,7 @@ if not present then | ||||
| end | ||||
| 
 | ||||
| autosave.setup { | ||||
|    enabled = vim.g.auto_save, -- takes boolean value from init.lua | ||||
|    enabled = vim.g.auto_save or false, -- takes boolean value from init.lua | ||||
|    execution_message = "autosaved at : " .. vim.fn.strftime "%H:%M:%S", | ||||
|    events = { "InsertLeave", "TextChanged" }, | ||||
|    conditions = { | ||||
| @ -13,7 +13,7 @@ autosave.setup { | ||||
|       filetype_is_not = {}, | ||||
|       modifiable = true, | ||||
|    }, | ||||
|    write_all_buffers = false, | ||||
|    on_off_commands = true, | ||||
|    clean_command_line_interval = 2500, | ||||
|    on_off_commands = true, | ||||
|    write_all_buffers = false, | ||||
| } | ||||
| @ -1,5 +1,4 @@ | ||||
| local global_theme = "themes/" .. vim.g.nvchad_theme | ||||
| local colors = require(global_theme) | ||||
| local colors = require("colors").get() | ||||
| 
 | ||||
| local present, bufferline = pcall(require, "bufferline") | ||||
| if not present then | ||||
| @ -43,24 +42,71 @@ bufferline.setup { | ||||
|       end, | ||||
|    }, | ||||
|    highlights = { | ||||
|       fill = { | ||||
|          guifg = colors.grey_fg, | ||||
|          guibg = colors.black2, | ||||
|       }, | ||||
|       background = { | ||||
|          guifg = colors.grey_fg, | ||||
|          guibg = colors.black2, | ||||
|       }, | ||||
| 
 | ||||
|       -- buffers | ||||
|       buffer_visible = { | ||||
|          guifg = colors.light_grey, | ||||
|          guibg = colors.black2, | ||||
|       }, | ||||
|       buffer_selected = { | ||||
|          guifg = colors.white, | ||||
|          guibg = colors.black, | ||||
|          gui = "bold", | ||||
|       }, | ||||
|       buffer_visible = { | ||||
|          guifg = colors.light_grey, | ||||
|          guibg = colors.black2, | ||||
|       }, | ||||
| 
 | ||||
|       -- close buttons | ||||
|       close_button = { | ||||
|          guifg = colors.light_grey, | ||||
|          guibg = colors.black2, | ||||
|       }, | ||||
|       close_button_visible = { | ||||
|          guifg = colors.light_grey, | ||||
|          guibg = colors.black2, | ||||
|       }, | ||||
|       close_button_selected = { | ||||
|          guifg = colors.red, | ||||
|          guibg = colors.black, | ||||
|       }, | ||||
|       fill = { | ||||
|          guifg = colors.grey_fg, | ||||
|          guibg = colors.black2, | ||||
|       }, | ||||
|       indicator_selected = { | ||||
|          guifg = colors.black, | ||||
|          guibg = colors.black, | ||||
|       }, | ||||
| 
 | ||||
|       -- modified | ||||
|       modified = { | ||||
|          guifg = colors.red, | ||||
|          guibg = colors.black2, | ||||
|       }, | ||||
|       modified_visible = { | ||||
|          guifg = colors.red, | ||||
|          guibg = colors.black2, | ||||
|       }, | ||||
|       modified_selected = { | ||||
|          guifg = colors.green, | ||||
|          guibg = colors.black, | ||||
|       }, | ||||
| 
 | ||||
|       -- separators | ||||
|       separator = { | ||||
|          guifg = colors.black2, | ||||
|          guibg = colors.black2, | ||||
|       }, | ||||
|       separator_visible = { | ||||
|          guifg = colors.black2, | ||||
|          guibg = colors.black2, | ||||
|       }, | ||||
|       separator_selected = { | ||||
|          guifg = colors.black2, | ||||
|          guibg = colors.black2, | ||||
|       }, | ||||
|       -- tabs | ||||
|       tab = { | ||||
|          guifg = colors.light_grey, | ||||
| @ -74,49 +120,5 @@ bufferline.setup { | ||||
|          guifg = colors.red, | ||||
|          guibg = colors.black, | ||||
|       }, | ||||
|       indicator_selected = { | ||||
|          guifg = colors.black, | ||||
|          guibg = colors.black, | ||||
|       }, | ||||
|       -- separators | ||||
|       separator = { | ||||
|          guifg = colors.black2, | ||||
|          guibg = colors.black2, | ||||
|       }, | ||||
|       separator_visible = { | ||||
|          guifg = colors.black2, | ||||
|          guibg = colors.black2, | ||||
|       }, | ||||
|       separator_selected = { | ||||
|          guifg = colors.black2, | ||||
|          guibg = colors.black2, | ||||
|       }, | ||||
|       -- modified | ||||
|       modified = { | ||||
|          guifg = colors.red, | ||||
|          guibg = colors.black2, | ||||
|       }, | ||||
|       modified_visible = { | ||||
|          guifg = colors.red, | ||||
|          guibg = colors.black2, | ||||
|       }, | ||||
|       modified_selected = { | ||||
|          guifg = colors.green, | ||||
|          guibg = colors.black, | ||||
|       }, | ||||
|       -- close buttons | ||||
| 
 | ||||
|       close_button = { | ||||
|          guifg = colors.light_grey, | ||||
|          guibg = colors.black2, | ||||
|       }, | ||||
|       close_button_visible = { | ||||
|          guifg = colors.light_grey, | ||||
|          guibg = colors.black2, | ||||
|       }, | ||||
|       close_button_selected = { | ||||
|          guifg = colors.red, | ||||
|          guibg = colors.black, | ||||
|       }, | ||||
|    }, | ||||
| } | ||||
							
								
								
									
										44
									
								
								lua/plugins/configs/chadsheet.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								lua/plugins/configs/chadsheet.lua
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,44 @@ | ||||
| local present, chadsheet = pcall(require, "cheatsheet") | ||||
| 
 | ||||
| if not present then | ||||
|    return | ||||
| end | ||||
| 
 | ||||
| local mappings = require("core.utils").load_config().mappings | ||||
| 
 | ||||
| -- add user mappings to the cheetsheet | ||||
| -- improve this function to not hardcode plugin | ||||
| local function add_to_chadsheet(section, keymap, desc) | ||||
|    if section == "plugin" then | ||||
|       for sec, key in pairs(mappings.plugin) do | ||||
|          add_to_chadsheet(sec, key, sec) | ||||
|       end | ||||
|    else | ||||
|       if type(keymap) == "table" then | ||||
|          for sec, key in pairs(keymap) do | ||||
|             if type(sec) == "number" then | ||||
|                add_to_chadsheet(section, key, desc or section) | ||||
|             else | ||||
|                add_to_chadsheet(sec, key, desc or section) | ||||
|             end | ||||
|          end | ||||
|       else | ||||
|          chadsheet.add_cheat(section, keymap, desc or "Misc") | ||||
|       end | ||||
|    end | ||||
| end | ||||
| 
 | ||||
| for section, keymap in pairs(mappings) do | ||||
|    add_to_chadsheet(section, keymap) | ||||
| end | ||||
| 
 | ||||
| require("cheatsheet").setup { | ||||
| 
 | ||||
|    bundled_cheatsheets = { | ||||
|       enabled = { "default" }, | ||||
|       disabled = { "unicode", "nerd-fonts" }, | ||||
|    }, | ||||
| 
 | ||||
|    bundled_plugin_cheatsheets = false, | ||||
|    include_only_installed_plugins = true, | ||||
| } | ||||
| @ -5,21 +5,22 @@ end | ||||
| 
 | ||||
| compe.setup { | ||||
|    enabled = true, | ||||
| 
 | ||||
|    autocomplete = true, | ||||
|    debug = false, | ||||
|    min_length = 1, | ||||
|    preselect = "enable", | ||||
|    throttle_time = 80, | ||||
|    source_timeout = 200, | ||||
|    documentation = true, | ||||
|    incomplete_delay = 400, | ||||
|    max_abbr_width = 100, | ||||
|    max_kind_width = 100, | ||||
|    max_menu_width = 100, | ||||
|    documentation = true, | ||||
|    min_length = 1, | ||||
|    preselect = "enable", | ||||
|    source_timeout = 200, | ||||
|    source = { | ||||
|       buffer = { kind = "", true }, | ||||
|       luasnip = { kind = "", true }, | ||||
|       nvim_lsp = true, | ||||
|       nvim_lua = true, | ||||
|    }, | ||||
|    throttle_time = 80, | ||||
| } | ||||
| @ -1,7 +1,7 @@ | ||||
| local g = vim.g | ||||
| local fn = vim.fn | ||||
| 
 | ||||
| local plugins_count = fn.len(fn.globpath("~/.local/share/nvim/site/pack/packer/start", "*", 0, 1)) | ||||
| -- local plugins_count = fn.len(fn.globpath("~/.local/share/nvim/site/pack/packer/start", "*", 0, 1)) | ||||
| 
 | ||||
| g.dashboard_disable_at_vimenter = 1 -- dashboard is disabled by default | ||||
| g.dashboard_disable_statusline = 1 | ||||
| @ -4,18 +4,10 @@ if not present then | ||||
| end | ||||
| 
 | ||||
| gitsigns.setup { | ||||
|    signs = { | ||||
|       add = { hl = "DiffAdd", text = "│", numhl = "GitSignsAddNr" }, | ||||
|       change = { hl = "DiffChange", text = "│", numhl = "GitSignsChangeNr" }, | ||||
|       delete = { hl = "DiffDelete", text = "_", numhl = "GitSignsDeleteNr" }, | ||||
|       topdelete = { hl = "DiffDelete", text = "‾", numhl = "GitSignsDeleteNr" }, | ||||
|       changedelete = { hl = "DiffChange", text = "~", numhl = "GitSignsChangeNr" }, | ||||
|    }, | ||||
|    numhl = false, | ||||
|    keymaps = { | ||||
|       -- Default keymap options | ||||
|       noremap = true, | ||||
|       buffer = true, | ||||
|       noremap = true, | ||||
|       ["n ]c"] = { expr = true, "&diff ? ']c' : '<cmd>lua require\"gitsigns\".next_hunk()<CR>'" }, | ||||
|       ["n [c"] = { expr = true, "&diff ? '[c' : '<cmd>lua require\"gitsigns\".prev_hunk()<CR>'" }, | ||||
|       ["n <leader>hs"] = '<cmd>lua require"gitsigns".stage_hunk()<CR>', | ||||
| @ -24,9 +16,19 @@ gitsigns.setup { | ||||
|       ["n <leader>hp"] = '<cmd>lua require"gitsigns".preview_hunk()<CR>', | ||||
|       ["n <leader>hb"] = '<cmd>lua require"gitsigns".blame_line()<CR>', | ||||
|    }, | ||||
|    numhl = false, | ||||
| 
 | ||||
|    sign_priority = 5, | ||||
|    signs = { | ||||
|       add = { hl = "DiffAdd", text = "│", numhl = "GitSignsAddNr" }, | ||||
|       change = { hl = "DiffChange", text = "│", numhl = "GitSignsChangeNr" }, | ||||
|       changedelete = { hl = "DiffChange", text = "~", numhl = "GitSignsChangeNr" }, | ||||
|       delete = { hl = "DiffDelete", text = "_", numhl = "GitSignsDeleteNr" }, | ||||
|       topdelete = { hl = "DiffDelete", text = "‾", numhl = "GitSignsDeleteNr" }, | ||||
|    }, | ||||
| 
 | ||||
|    status_formatter = nil, -- Use default | ||||
|    watch_index = { | ||||
|       interval = 100, | ||||
|    }, | ||||
|    sign_priority = 5, | ||||
|    status_formatter = nil, -- Use default | ||||
| } | ||||
| @ -3,16 +3,10 @@ if not present then | ||||
|    return | ||||
| end | ||||
| 
 | ||||
| local global_theme = "themes/" .. vim.g.nvchad_theme | ||||
| local colors = require(global_theme) | ||||
| local colors = require("colors").get() | ||||
| 
 | ||||
| icons.setup { | ||||
|    override = { | ||||
|       html = { | ||||
|          icon = "", | ||||
|          color = colors.baby_pink, | ||||
|          name = "html", | ||||
|       }, | ||||
|       c = { | ||||
|          icon = "", | ||||
|          color = colors.blue, | ||||
| @ -23,35 +17,50 @@ icons.setup { | ||||
|          color = colors.blue, | ||||
|          name = "css", | ||||
|       }, | ||||
|       js = { | ||||
|          icon = "", | ||||
|          color = colors.sun, | ||||
|          name = "js", | ||||
|       deb = { | ||||
|          icon = "", | ||||
|          color = colors.cyan, | ||||
|          name = "deb", | ||||
|       }, | ||||
|       ts = { | ||||
|          icon = "ﯤ", | ||||
|          color = colors.teal, | ||||
|          name = "ts", | ||||
|       Dockerfile = { | ||||
|          icon = "", | ||||
|          color = colors.cyan, | ||||
|          name = "Dockerfile", | ||||
|       }, | ||||
|       kt = { | ||||
|          icon = "", | ||||
|          color = colors.orange, | ||||
|          name = "kt", | ||||
|       html = { | ||||
|          icon = "", | ||||
|          color = colors.baby_pink, | ||||
|          name = "html", | ||||
|       }, | ||||
|       png = { | ||||
|       jpeg = { | ||||
|          icon = "", | ||||
|          color = colors.dark_purple, | ||||
|          name = "png", | ||||
|          name = "jpeg", | ||||
|       }, | ||||
|       jpg = { | ||||
|          icon = "", | ||||
|          color = colors.dark_purple, | ||||
|          name = "jpg", | ||||
|       }, | ||||
|       jpeg = { | ||||
|          icon = "", | ||||
|          color = colors.dark_purple, | ||||
|          name = "jpeg", | ||||
|       js = { | ||||
|          icon = "", | ||||
|          color = colors.sun, | ||||
|          name = "js", | ||||
|       }, | ||||
|       kt = { | ||||
|          icon = "", | ||||
|          color = colors.orange, | ||||
|          name = "kt", | ||||
|       }, | ||||
|       lock = { | ||||
|          icon = "", | ||||
|          color = colors.red, | ||||
|          name = "lock", | ||||
|       }, | ||||
|       lua = { | ||||
|          icon = "", | ||||
|          color = colors.blue, | ||||
|          name = "lua", | ||||
|       }, | ||||
|       mp3 = { | ||||
|          icon = "", | ||||
| @ -68,20 +77,10 @@ icons.setup { | ||||
|          color = colors.white, | ||||
|          name = "out", | ||||
|       }, | ||||
|       Dockerfile = { | ||||
|          icon = "", | ||||
|          color = colors.cyan, | ||||
|          name = "Dockerfile", | ||||
|       }, | ||||
|       rb = { | ||||
|          icon = "", | ||||
|          color = colors.pink, | ||||
|          name = "rb", | ||||
|       }, | ||||
|       vue = { | ||||
|          icon = "﵂", | ||||
|          color = colors.vibrant_green, | ||||
|          name = "vue", | ||||
|       png = { | ||||
|          icon = "", | ||||
|          color = colors.dark_purple, | ||||
|          name = "png", | ||||
|       }, | ||||
|       py = { | ||||
|          icon = "", | ||||
| @ -93,35 +92,35 @@ icons.setup { | ||||
|          color = colors.blue, | ||||
|          name = "toml", | ||||
|       }, | ||||
|       lock = { | ||||
|          icon = "", | ||||
|          color = colors.red, | ||||
|          name = "lock", | ||||
|       ts = { | ||||
|          icon = "ﯤ", | ||||
|          color = colors.teal, | ||||
|          name = "ts", | ||||
|       }, | ||||
|       zip = { | ||||
|          icon = "", | ||||
|          color = colors.sun, | ||||
|          name = "zip", | ||||
|       }, | ||||
|       xz = { | ||||
|          icon = "", | ||||
|          color = colors.sun, | ||||
|          name = "xz", | ||||
|       }, | ||||
|       deb = { | ||||
|          icon = "", | ||||
|          color = colors.cyan, | ||||
|          name = "deb", | ||||
|       rb = { | ||||
|          icon = "", | ||||
|          color = colors.pink, | ||||
|          name = "rb", | ||||
|       }, | ||||
|       rpm = { | ||||
|          icon = "", | ||||
|          color = colors.orange, | ||||
|          name = "rpm", | ||||
|       }, | ||||
|       lua = { | ||||
|          icon = "", | ||||
|          color = colors.blue, | ||||
|          name = "lua", | ||||
|       vue = { | ||||
|          icon = "﵂", | ||||
|          color = colors.vibrant_green, | ||||
|          name = "vue", | ||||
|       }, | ||||
|       xz = { | ||||
|          icon = "", | ||||
|          color = colors.sun, | ||||
|          name = "xz", | ||||
|       }, | ||||
|       zip = { | ||||
|          icon = "", | ||||
|          color = colors.sun, | ||||
|          name = "zip", | ||||
|       }, | ||||
|    }, | ||||
| } | ||||
| @ -10,13 +10,13 @@ local function on_attach(client, bufnr) | ||||
|    local opts = { noremap = true, silent = true } | ||||
| 
 | ||||
|    -- lsp Mappings. | ||||
|    vim.api.nvim_buf_set_keymap(bufnr, "n", "<space>wa", "<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>", opts) | ||||
|    vim.api.nvim_buf_set_keymap(bufnr, "n", "gD", "<Cmd>lua vim.lsp.buf.declaration()<CR>", opts) | ||||
|    vim.api.nvim_buf_set_keymap(bufnr, "n", "gd", "<Cmd>lua vim.lsp.buf.definition()<CR>", opts) | ||||
|    vim.api.nvim_buf_set_keymap(bufnr, "n", "K", "<Cmd>lua vim.lsp.buf.hover()<CR>", opts) | ||||
|    vim.api.nvim_buf_set_keymap(bufnr, "n", "gi", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts) | ||||
|    vim.api.nvim_buf_set_keymap(bufnr, "n", "<C-k>", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts) | ||||
|    vim.api.nvim_buf_set_keymap(bufnr, "n", "<space>wa", "<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>", opts) | ||||
|    vim.api.nvim_buf_set_keymap(bufnr, "n", "<space>wr", "<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>", opts) | ||||
|    vim.api.nvim_buf_set_keymap(bufnr, "n", "<C-k>", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts) | ||||
|    vim.api.nvim_buf_set_keymap( | ||||
|       bufnr, | ||||
|       "n", | ||||
| @ -24,13 +24,13 @@ local function on_attach(client, bufnr) | ||||
|       "<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>", | ||||
|       opts | ||||
|    ) | ||||
|    vim.api.nvim_buf_set_keymap(bufnr, "n", "<space>D", "<cmd>lua vim.lsp.buf.type_definition()<CR>", opts) | ||||
|    vim.api.nvim_buf_set_keymap(bufnr, "n", "<space>rn", "<cmd>lua vim.lsp.buf.rename()<CR>", opts) | ||||
|    vim.api.nvim_buf_set_keymap(bufnr, "n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts) | ||||
|    vim.api.nvim_buf_set_keymap(bufnr, "n", "<space>e", "<cmd>lua vim.lsp.diagnostic.show_line_diagnostics()<CR>", opts) | ||||
|    vim.api.nvim_buf_set_keymap(bufnr, "n", "<space>rn", "<cmd>lua vim.lsp.buf.rename()<CR>", opts) | ||||
|    vim.api.nvim_buf_set_keymap(bufnr, "n", "<space>D", "<cmd>lua vim.lsp.buf.type_definition()<CR>", opts) | ||||
|    vim.api.nvim_buf_set_keymap(bufnr, "n", "[d", "<cmd>lua vim.lsp.diagnostic.goto_prev()<CR>", opts) | ||||
|    vim.api.nvim_buf_set_keymap(bufnr, "n", "]d", "<cmd>lua vim.lsp.diagnostic.goto_next()<CR>", opts) | ||||
|    vim.api.nvim_buf_set_keymap(bufnr, "n", "<space>q", "<cmd>lua vim.lsp.diagnostic.set_loclist()<CR>", opts) | ||||
|    vim.api.nvim_buf_set_keymap(bufnr, "n", "<space>e", "<cmd>lua vim.lsp.diagnostic.show_line_diagnostics()<CR>", opts) | ||||
| 
 | ||||
|    -- Set some keybinds conditional on server capabilities | ||||
|    if client.resolved_capabilities.document_formatting then | ||||
| @ -95,9 +95,9 @@ function lspSymbol(name, icon) | ||||
| end | ||||
| 
 | ||||
| lspSymbol("Error", "") | ||||
| lspSymbol("Warning", "") | ||||
| lspSymbol("Information", "") | ||||
| lspSymbol("Hint", "") | ||||
| lspSymbol("Warning", "") | ||||
| 
 | ||||
| vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, { | ||||
|    virtual_text = { | ||||
| @ -53,11 +53,11 @@ _G.completions = function() | ||||
|    return npairs.check_break_line_char() | ||||
| end | ||||
| 
 | ||||
| vim.api.nvim_set_keymap("i", "<Tab>", "v:lua.tab_complete()", { expr = true }) | ||||
| vim.api.nvim_set_keymap("s", "<Tab>", "v:lua.tab_complete()", { expr = true }) | ||||
| vim.api.nvim_set_keymap("i", "<CR>", "v:lua.completions()", { expr = true }) | ||||
| vim.api.nvim_set_keymap("i", "<S-Tab>", "v:lua.s_tab_complete()", { expr = true }) | ||||
| vim.api.nvim_set_keymap("s", "<S-Tab>", "v:lua.s_tab_complete()", { expr = true }) | ||||
| vim.api.nvim_set_keymap("i", "<CR>", "v:lua.completions()", { expr = true }) | ||||
| vim.api.nvim_set_keymap("i", "<Tab>", "v:lua.tab_complete()", { expr = true }) | ||||
| vim.api.nvim_set_keymap("s", "<Tab>", "v:lua.tab_complete()", { expr = true }) | ||||
| 
 | ||||
| luasnip.config.set_config { | ||||
|    history = true, | ||||
| @ -8,53 +8,54 @@ local g = vim.g | ||||
| 
 | ||||
| vim.o.termguicolors = true | ||||
| 
 | ||||
| g.nvim_tree_side = "left" | ||||
| g.nvim_tree_width = 25 | ||||
| g.nvim_tree_ignore = { ".git", "node_modules", ".cache" } | ||||
| g.nvim_tree_gitignore = 1 | ||||
| g.nvim_tree_add_trailing = 0 -- append a trailing slash to folder names | ||||
| g.nvim_tree_allow_resize = 1 | ||||
| g.nvim_tree_auto_close = 0 -- closes tree when it's the last window | ||||
| g.nvim_tree_auto_ignore_ft = { "dashboard" } -- don't open tree on specific fiypes. | ||||
| g.nvim_tree_auto_open = 0 | ||||
| g.nvim_tree_auto_close = 0 -- closes tree when it's the last window | ||||
| g.nvim_tree_quit_on_open = 0 -- closes tree when file's opened | ||||
| g.nvim_tree_follow = 1 | ||||
| g.nvim_tree_indent_markers = 1 | ||||
| g.nvim_tree_hide_dotfiles = 1 | ||||
| g.nvim_tree_git_hl = 1 | ||||
| g.nvim_tree_highlight_opened_files = 0 | ||||
| g.nvim_tree_root_folder_modifier = table.concat { ":t:gs?$?/..", string.rep(" ", 1000), "?:gs?^??" } | ||||
| g.nvim_tree_tab_open = 0 | ||||
| g.nvim_tree_allow_resize = 1 | ||||
| g.nvim_tree_add_trailing = 0 -- append a trailing slash to folder names | ||||
| g.nvim_tree_disable_netrw = 1 | ||||
| g.nvim_tree_follow = 1 | ||||
| g.nvim_tree_git_hl = 1 | ||||
| g.nvim_tree_gitignore = 1 | ||||
| g.nvim_tree_hide_dotfiles = 1 | ||||
| g.nvim_tree_highlight_opened_files = 0 | ||||
| g.nvim_tree_hijack_netrw = 0 | ||||
| g.nvim_tree_indent_markers = 1 | ||||
| g.nvim_tree_ignore = { ".git", "node_modules", ".cache" } | ||||
| g.nvim_tree_quit_on_open = 0 -- closes tree when file's opened | ||||
| g.nvim_tree_root_folder_modifier = table.concat { ":t:gs?$?/..", string.rep(" ", 1000), "?:gs?^??" } | ||||
| g.nvim_tree_side = "left" | ||||
| g.nvim_tree_tab_open = 0 | ||||
| g.nvim_tree_update_cwd = 1 | ||||
| g.nvim_tree_width = 25 | ||||
| 
 | ||||
| g.nvim_tree_show_icons = { | ||||
|    git = 1, | ||||
|    folders = 1, | ||||
|    files = 1, | ||||
|    -- folder_arrows= 1 | ||||
|    files = 1, | ||||
|    git = 1, | ||||
| } | ||||
| 
 | ||||
| g.nvim_tree_icons = { | ||||
|    default = "", | ||||
|    symlink = "", | ||||
|    git = { | ||||
|       unstaged = "✗", | ||||
|       staged = "✓", | ||||
|       unmerged = "", | ||||
|       renamed = "➜", | ||||
|       untracked = "★", | ||||
|       deleted = "", | ||||
|       ignored = "◌", | ||||
|       renamed = "➜", | ||||
|       staged = "✓", | ||||
|       unmerged = "", | ||||
|       unstaged = "✗", | ||||
|       untracked = "★", | ||||
|    }, | ||||
|    folder = { | ||||
|       -- disable indent_markers option to get arrows working or if you want both arrows and indent then just add the arrow icons in front            ofthe default and opened folders below! | ||||
|       -- arrow_open = "", | ||||
|       -- arrow_closed = "", | ||||
|       default = "", | ||||
|       open = "", | ||||
|       empty = "", --  | ||||
|       empty_open = "", | ||||
|       open = "", | ||||
|       symlink = "", | ||||
|       symlink_open = "", | ||||
|    }, | ||||
| @ -1,5 +1,21 @@ | ||||
| local M = {} | ||||
| 
 | ||||
| M.better_escape = function() | ||||
|    local config = require("core.utils").load_config() | ||||
|    vim.g.better_escape_interval = config.options.plugin.esc_insertmode_timeout or 300 | ||||
| end | ||||
| 
 | ||||
| M.blankline = function() | ||||
|    vim.g.indentLine_enabled = 1 | ||||
|    vim.g.indent_blankline_char = "▏" | ||||
| 
 | ||||
|    vim.g.indent_blankline_filetype_exclude = { "help", "terminal", "dashboard", "packer" } | ||||
|    vim.g.indent_blankline_buftype_exclude = { "terminal" } | ||||
| 
 | ||||
|    vim.g.indent_blankline_show_trailing_blankline_indent = false | ||||
|    vim.g.indent_blankline_show_first_indent_level = false | ||||
| end | ||||
| 
 | ||||
| M.colorizer = function() | ||||
|    local present, colorizer = pcall(require, "colorizer") | ||||
|    if present then | ||||
| @ -15,11 +31,6 @@ M.comment = function() | ||||
|    end | ||||
| end | ||||
| 
 | ||||
| M.escape = function() | ||||
|    vim.g.better_escape_interval = 300 | ||||
|    vim.g.better_escape_shortcut = { "jk" } | ||||
| end | ||||
| 
 | ||||
| M.lspkind = function() | ||||
|    local present, lspkind = pcall(require, "lspkind") | ||||
|    if present then | ||||
| @ -33,17 +44,6 @@ M.neoscroll = function() | ||||
|    end) | ||||
| end | ||||
| 
 | ||||
| M.blankline = function() | ||||
|    vim.g.indentLine_enabled = 1 | ||||
|    vim.g.indent_blankline_char = "▏" | ||||
| 
 | ||||
|    vim.g.indent_blankline_filetype_exclude = { "help", "terminal", "dashboard", "packer" } | ||||
|    vim.g.indent_blankline_buftype_exclude = { "terminal" } | ||||
| 
 | ||||
|    vim.g.indent_blankline_show_trailing_blankline_indent = false | ||||
|    vim.g.indent_blankline_show_first_indent_level = false | ||||
| end | ||||
| 
 | ||||
| M.signature = function() | ||||
|    local present, lspsignature = pcall(require, "lsp_signature") | ||||
|    if present then | ||||
| @ -1,5 +1,4 @@ | ||||
| local global_theme = "themes/" .. vim.g.nvchad_theme | ||||
| local colors = require(global_theme) | ||||
| local colors = require("colors").get() | ||||
| 
 | ||||
| local present1, gl = pcall(require, "galaxyline") | ||||
| local present2, condition = pcall(require, "galaxyline.condition") | ||||
| @ -20,6 +19,22 @@ local icon_styles = { | ||||
|       position_icon = " ", | ||||
|    }, | ||||
| 
 | ||||
|    arrow = { | ||||
|       left = "", | ||||
|       right = "", | ||||
|       main_icon = "  ", | ||||
|       vi_mode_icon = " ", | ||||
|       position_icon = " ", | ||||
|    }, | ||||
| 
 | ||||
|    block = { | ||||
|       left = " ", | ||||
|       right = " ", | ||||
|       main_icon = "   ", | ||||
|       vi_mode_icon = "   ", | ||||
|       position_icon = "  ", | ||||
|    }, | ||||
| 
 | ||||
|    round = { | ||||
|       left = "", | ||||
|       right = "", | ||||
| @ -35,25 +50,9 @@ local icon_styles = { | ||||
|       vi_mode_icon = " ", | ||||
|       position_icon = " ", | ||||
|    }, | ||||
| 
 | ||||
|    block = { | ||||
|       left = " ", | ||||
|       right = " ", | ||||
|       main_icon = "   ", | ||||
|       vi_mode_icon = "   ", | ||||
|       position_icon = "  ", | ||||
|    }, | ||||
| 
 | ||||
|    arrow = { | ||||
|       left = "", | ||||
|       right = "", | ||||
|       main_icon = "  ", | ||||
|       vi_mode_icon = " ", | ||||
|       position_icon = " ", | ||||
|    }, | ||||
| } | ||||
| 
 | ||||
| local user_statusline_style = require("utils").load_config().ui.statusline.style | ||||
| local user_statusline_style = require("core.utils").load_config().ui.plugin.statusline.style | ||||
| local statusline_style = icon_styles[user_statusline_style] | ||||
| 
 | ||||
| local left_separator = statusline_style.left | ||||
| @ -65,21 +65,23 @@ telescope.setup { | ||||
|    }, | ||||
| } | ||||
| 
 | ||||
| -- NvChad pickers | ||||
| -- load the theme_switcher extension | ||||
| require("telescope").load_extension "themes" | ||||
| -- load the term_picker extension | ||||
| require("telescope").load_extension "terms" | ||||
| if | ||||
|    not pcall(function() | ||||
|       -- NvChad pickers | ||||
|       -- load the theme_switcher extension | ||||
|       telescope.load_extension "themes" | ||||
|       -- load the term_picker extension | ||||
|       telescope.load_extension "terms" | ||||
| 
 | ||||
| if not pcall(function() | ||||
|    telescope.load_extension "fzf" | ||||
|    telescope.load_extension "media_files" | ||||
| end) then | ||||
|       telescope.load_extension "fzf" | ||||
|       telescope.load_extension "media_files" | ||||
|    end) | ||||
| then | ||||
|    -- This should only trigger when in need of PackerSync, so better do it | ||||
|    print "After completion of PackerCompile, restart neovim." | ||||
|    -- Trigger packer compile on PackerComplete, so it properly waits for PackerSync | ||||
|    vim.cmd 'autocmd User PackerComplete ++once lua print "Waiting for PackerCompile.." require("packer").compile()' | ||||
|    vim.cmd 'autocmd User PackerCompileDone ++once echo "Packer Compile done, restart neovim."' | ||||
|    require "pluginList" | ||||
|    require("packer").update("telescope-fzf-native.nvim", "telescope-media-files.nvim") | ||||
|    require "plugins" | ||||
|    require("packer").update("core", "telescope-fzf-native.nvim", "telescope-media-files.nvim") | ||||
| end | ||||
| @ -6,11 +6,11 @@ end | ||||
| true_zen.setup { | ||||
|    ui = { | ||||
|       bottom = { | ||||
|          cmdheight = 1, | ||||
|          laststatus = 0, | ||||
|          ruler = false, | ||||
|          showmode = false, | ||||
|          showcmd = false, | ||||
|          cmdheight = 1, | ||||
|       }, | ||||
|       top = { | ||||
|          showtabline = 0, | ||||
| @ -1,28 +1,39 @@ | ||||
| local plugin_status = require("utils").load_config().plugin_status | ||||
| local present, packer = pcall(require, "plugins.packerInit") | ||||
| 
 | ||||
| local present, _ = pcall(require, "packerInit") | ||||
| local packer | ||||
| 
 | ||||
| if present then | ||||
|    packer = require "packer" | ||||
| else | ||||
| if not present then | ||||
|    return false | ||||
| end | ||||
| 
 | ||||
| local use = packer.use | ||||
| 
 | ||||
| return packer.startup(function() | ||||
|    local plugin_status = require("core.utils").load_config().plugin_status | ||||
| 
 | ||||
|    -- this is arranged on the basis of when a plugin starts | ||||
| 
 | ||||
|    -- this is the nvchad core repo containing utilities for some features like theme swticher, no need to lazy load | ||||
|    use { | ||||
|       "Nvchad/core", | ||||
|    } | ||||
| 
 | ||||
|    use { | ||||
|       "wbthomason/packer.nvim", | ||||
|       event = "VimEnter", | ||||
|    } | ||||
| 
 | ||||
|    use { | ||||
|       "jdhao/better-escape.vim", | ||||
|       disable = not plugin_status.better_esc, | ||||
|       event = "InsertEnter", | ||||
|       "NvChad/nvim-base16.lua", | ||||
|       after = "packer.nvim", | ||||
|       config = function() | ||||
|          require("plugins.others").escape() | ||||
|          require("colors").init() | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
|    use { | ||||
|       "kyazdani42/nvim-web-devicons", | ||||
|       after = "nvim-base16.lua", | ||||
|       config = function() | ||||
|          require "plugins.configs.icons" | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
| @ -31,36 +42,99 @@ return packer.startup(function() | ||||
|       disable = not plugin_status.galaxyline, | ||||
|       after = "nvim-web-devicons", | ||||
|       config = function() | ||||
|          require "plugins.statusline" | ||||
|       end, | ||||
|    } | ||||
|    use { | ||||
|       "akinsho/bufferline.nvim", | ||||
|       disable = not plugin_status.nvim_bufferline, | ||||
|       after = "galaxyline.nvim", | ||||
|       config = function() | ||||
|          require "plugins.bufferline" | ||||
|       end, | ||||
|       setup = function() | ||||
|          require("mappings").bufferline() | ||||
|          require "plugins.configs.statusline" | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
|    -- color related stuff | ||||
|    use { | ||||
|       "NvChad/nvim-base16.lua", | ||||
|       after = "packer.nvim", | ||||
|       "akinsho/bufferline.nvim", | ||||
|       disable = not plugin_status.bufferline, | ||||
|       after = "galaxyline.nvim", | ||||
|       config = function() | ||||
|          require "theme" | ||||
|          require "plugins.configs.bufferline" | ||||
|       end, | ||||
|       setup = function() | ||||
|          require("core.mappings").bufferline() | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
|    use { | ||||
|       "nvim-lua/plenary.nvim", | ||||
|       after = "bufferline.nvim", | ||||
|    } | ||||
| 
 | ||||
|    -- git stuff | ||||
|    use { | ||||
|       "lewis6991/gitsigns.nvim", | ||||
|       disable = not plugin_status.gitsigns, | ||||
|       after = "plenary.nvim", | ||||
|       config = function() | ||||
|          require "plugins.configs.gitsigns" | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
|    use { | ||||
|       "nvim-telescope/telescope.nvim", | ||||
|       after = "plenary.nvim", | ||||
|       requires = { | ||||
|          { | ||||
|             "sudormrfbin/cheatsheet.nvim", | ||||
|             disable = not plugin_status.cheatsheet, | ||||
|             after = "telescope.nvim", | ||||
|             config = function() | ||||
|                require "plugins.configs.chadsheet" | ||||
|             end, | ||||
|             setup = function() | ||||
|                require("core.mappings").chadsheet() | ||||
|             end, | ||||
|          }, | ||||
|          { | ||||
|             "nvim-telescope/telescope-fzf-native.nvim", | ||||
|             run = "make", | ||||
|          }, | ||||
|          { | ||||
|             "nvim-telescope/telescope-media-files.nvim", | ||||
|             disable = not plugin_status.telescope_media, | ||||
|             setup = function() | ||||
|                require("core.mappings").telescope_media() | ||||
|             end, | ||||
|          }, | ||||
|       }, | ||||
|       config = function() | ||||
|          require "plugins.configs.telescope" | ||||
|       end, | ||||
|       setup = function() | ||||
|          require("core.mappings").telescope() | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
|    -- load autosave only if its globally enabled | ||||
|    use { | ||||
|       disable = not plugin_status.autosave, | ||||
|       "Pocco81/AutoSave.nvim", | ||||
|       config = function() | ||||
|          require "plugins.configs.autosave" | ||||
|       end, | ||||
|       cond = function() | ||||
|          return require("core.utils").load_config().options.plugin.autosave == true | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
|    use { | ||||
|       "lukas-reineke/indent-blankline.nvim", | ||||
|       disable = not plugin_status.blankline, | ||||
|       event = "BufRead", | ||||
|       config = function() | ||||
|          require("plugins.configs.others").blankline() | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
|    use { | ||||
|       "norcalli/nvim-colorizer.lua", | ||||
|       disable = not plugin_status.nvim_colorizer, | ||||
|       disable = not plugin_status.colorizer, | ||||
|       event = "BufRead", | ||||
|       config = function() | ||||
|          require("plugins.others").colorizer() | ||||
|          require("plugins.configs.others").colorizer() | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
| @ -69,7 +143,7 @@ return packer.startup(function() | ||||
|       "nvim-treesitter/nvim-treesitter", | ||||
|       event = "BufRead", | ||||
|       config = function() | ||||
|          require "plugins.treesitter" | ||||
|          require "plugins.configs.treesitter" | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
| @ -82,16 +156,7 @@ return packer.startup(function() | ||||
|       "neovim/nvim-lspconfig", | ||||
|       after = "nvim-lspinstall", | ||||
|       config = function() | ||||
|          require "plugins.lspconfig" | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
|    use { | ||||
|       "onsails/lspkind-nvim", | ||||
|       disable = not plugin_status.lspkind, | ||||
|       event = "BufEnter", | ||||
|       config = function() | ||||
|          require("plugins.others").lspkind() | ||||
|          require "plugins.configs.lspconfig" | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
| @ -100,7 +165,28 @@ return packer.startup(function() | ||||
|       disable = not plugin_status.lspsignature, | ||||
|       after = "nvim-lspconfig", | ||||
|       config = function() | ||||
|          require("plugins.others").signature() | ||||
|          require("plugins.configs.others").signature() | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
|    use { | ||||
|       "onsails/lspkind-nvim", | ||||
|       disable = not plugin_status.lspkind, | ||||
|       event = "BufEnter", | ||||
|       config = function() | ||||
|          require("plugins.configs.others").lspkind() | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
|    use { | ||||
|       "jdhao/better-escape.vim", | ||||
|       disable = not plugin_status.esc_insertmode, | ||||
|       event = "InsertEnter", | ||||
|       config = function() | ||||
|          require("plugins.configs.others").better_escape() | ||||
|       end, | ||||
|       setup = function() | ||||
|          require("core.mappings").better_escape() | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
| @ -109,7 +195,7 @@ return packer.startup(function() | ||||
|       "hrsh7th/nvim-compe", | ||||
|       event = "InsertEnter", | ||||
|       config = function() | ||||
|          require "plugins.compe" | ||||
|          require "plugins.configs.compe" | ||||
|       end, | ||||
|       wants = "LuaSnip", | ||||
|       requires = { | ||||
| @ -118,7 +204,7 @@ return packer.startup(function() | ||||
|             wants = "friendly-snippets", | ||||
|             event = "InsertCharPre", | ||||
|             config = function() | ||||
|                require "plugins.luasnip" | ||||
|                require "plugins.configs.luasnip" | ||||
|             end, | ||||
|          }, | ||||
|          { | ||||
| @ -128,91 +214,12 @@ return packer.startup(function() | ||||
|       }, | ||||
|    } | ||||
| 
 | ||||
|    use { | ||||
|       "sbdchd/neoformat", | ||||
|       disable = not plugin_status.neoformat, | ||||
|       cmd = "Neoformat", | ||||
|       setup = function() | ||||
|          require("mappings").neoformat() | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
|    -- file managing , picker etc | ||||
|    use { | ||||
|       "kyazdani42/nvim-tree.lua", | ||||
|       cmd = "NvimTreeToggle", | ||||
|       config = function() | ||||
|          require "plugins.nvimtree" | ||||
|       end, | ||||
|       setup = function() | ||||
|          require("mappings").nvimtree() | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
|    use { | ||||
|       "kyazdani42/nvim-web-devicons", | ||||
|       after = "nvim-base16.lua", | ||||
|       config = function() | ||||
|          require "plugins.icons" | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
|    use { | ||||
|       "nvim-lua/plenary.nvim", | ||||
|       after = "bufferline.nvim", | ||||
|    } | ||||
| 
 | ||||
|    use { | ||||
|       "nvim-telescope/telescope.nvim", | ||||
|       after = "plenary.nvim", | ||||
|       requires = { | ||||
|          { | ||||
|             "nvim-telescope/telescope-fzf-native.nvim", | ||||
|             run = "make", | ||||
|          }, | ||||
|          { | ||||
|             "nvim-telescope/telescope-media-files.nvim", | ||||
|             disable = not plugin_status.telescope_media, | ||||
|             setup = function() | ||||
|                require("mappings").telescope_media() | ||||
|             end, | ||||
|          }, | ||||
|          { | ||||
|             "sudormrfbin/cheatsheet.nvim", | ||||
|             disable = not plugin_status.cheatsheet, | ||||
|             after = "telescope.nvim", | ||||
|             config = function() | ||||
|                require "plugins.chadsheet" | ||||
|             end, | ||||
|             setup = function() | ||||
|                require("mappings").chadsheet() | ||||
|             end, | ||||
|          }, | ||||
|       }, | ||||
|       config = function() | ||||
|          require "plugins.telescope" | ||||
|       end, | ||||
|       setup = function() | ||||
|          require("mappings").telescope() | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
|    -- git stuff | ||||
|    use { | ||||
|       "lewis6991/gitsigns.nvim", | ||||
|       disable = not plugin_status.gitsigns, | ||||
|       after = "plenary.nvim", | ||||
|       config = function() | ||||
|          require "plugins.gitsigns" | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
|    -- misc plugins | ||||
|    use { | ||||
|       "windwp/nvim-autopairs", | ||||
|       after = "nvim-compe", | ||||
|       config = function() | ||||
|          require "plugins.autopairs" | ||||
|          require "plugins.configs.autopairs" | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
| @ -222,21 +229,19 @@ return packer.startup(function() | ||||
|       event = "CursorMoved", | ||||
|    } | ||||
| 
 | ||||
|    -- smooth scroll | ||||
|    use { | ||||
|       "terrortylor/nvim-comment", | ||||
|       disable = not plugin_status.nvim_comment, | ||||
|       cmd = "CommentToggle", | ||||
|       "karb94/neoscroll.nvim", | ||||
|       disable = not plugin_status.neoscroll, | ||||
|       event = "WinScrolled", | ||||
|       config = function() | ||||
|          require("plugins.others").comment() | ||||
|       end, | ||||
|       setup = function() | ||||
|          require("mappings").comment_nvim() | ||||
|          require("plugins.configs.others").neoscroll() | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
|    use { | ||||
|       "glepnir/dashboard-nvim", | ||||
|       disable = not plugin_status.dashboard_nvim, | ||||
|       disable = not plugin_status.dashboard, | ||||
|       cmd = { | ||||
|          "Dashboard", | ||||
|          "DashboardNewFile", | ||||
| @ -244,58 +249,61 @@ return packer.startup(function() | ||||
|          "SessionLoad", | ||||
|          "SessionSave", | ||||
|       }, | ||||
|       config = function() | ||||
|          require "plugins.configs.dashboard" | ||||
|       end, | ||||
|       setup = function() | ||||
|          require "plugins.dashboard" | ||||
|          require("mappings").dashboard() | ||||
|          require("core.mappings").dashboard() | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
|    -- load autosave only if its globally enabled | ||||
|    use { | ||||
|       disable = not plugin_status.autosave_nvim, | ||||
|       "Pocco81/AutoSave.nvim", | ||||
|       config = function() | ||||
|          require "plugins.autosave" | ||||
|       end, | ||||
|       cond = function() | ||||
|          return vim.g.auto_save == true | ||||
|       "sbdchd/neoformat", | ||||
|       disable = not plugin_status.neoformat, | ||||
|       cmd = "Neoformat", | ||||
|       setup = function() | ||||
|          require("core.mappings").neoformat() | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
|    -- smooth scroll | ||||
|    --   use "alvan/vim-closetag" -- for html autoclosing tag | ||||
|    use { | ||||
|       "karb94/neoscroll.nvim", | ||||
|       disable = not plugin_status.neoscroll_nvim, | ||||
|       event = "WinScrolled", | ||||
|       "terrortylor/nvim-comment", | ||||
|       disable = not plugin_status.comment, | ||||
|       cmd = "CommentToggle", | ||||
|       config = function() | ||||
|          require("plugins.others").neoscroll() | ||||
|          require("plugins.configs.others").comment() | ||||
|       end, | ||||
|       setup = function() | ||||
|          require("core.mappings").comment() | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
|    -- file managing , picker etc | ||||
|    use { | ||||
|       "kyazdani42/nvim-tree.lua", | ||||
|       cmd = "NvimTreeToggle", | ||||
|       config = function() | ||||
|          require "plugins.configs.nvimtree" | ||||
|       end, | ||||
|       setup = function() | ||||
|          require("core.mappings").nvimtree() | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
|    use { | ||||
|       "Pocco81/TrueZen.nvim", | ||||
|       disable = not plugin_status.truezen_nvim, | ||||
|       disable = not plugin_status.truezen, | ||||
|       cmd = { | ||||
|          "TZAtaraxis", | ||||
|          "TZMinimalist", | ||||
|          "TZFocus", | ||||
|       }, | ||||
|       config = function() | ||||
|          require "plugins.zenmode" | ||||
|          require "plugins.configs.zenmode" | ||||
|       end, | ||||
|       setup = function() | ||||
|          require("mappings").truezen() | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
|    --   use "alvan/vim-closetag" -- for html autoclosing tag | ||||
| 
 | ||||
|    use { | ||||
|       "lukas-reineke/indent-blankline.nvim", | ||||
|       disable = not plugin_status.blankline, | ||||
|       event = "BufRead", | ||||
|       setup = function() | ||||
|          require("plugins.others").blankline() | ||||
|          require("core.mappings").truezen() | ||||
|       end, | ||||
|    } | ||||
| 
 | ||||
| @ -306,7 +314,7 @@ return packer.startup(function() | ||||
|          "Git", | ||||
|       }, | ||||
|       setup = function() | ||||
|          require("mappings").fugitive() | ||||
|          require("core.mappings").vim_fugitive() | ||||
|       end, | ||||
|    } | ||||
| end) | ||||
| @ -29,7 +29,7 @@ if not present then | ||||
|    end | ||||
| end | ||||
| 
 | ||||
| return packer.init { | ||||
| packer.init { | ||||
|    display = { | ||||
|       open_fn = function() | ||||
|          return require("packer.util").float { border = "single" } | ||||
| @ -43,3 +43,5 @@ return packer.init { | ||||
|    compile_on_sync = true, | ||||
|    --    auto_reload_compiled = true | ||||
| } | ||||
| 
 | ||||
| return packer | ||||
| @ -1,143 +0,0 @@ | ||||
| -- This file can be loaded as a telescope extension | ||||
| local M = {} | ||||
| 
 | ||||
| -- Custom theme picker | ||||
| -- Most of the code is copied from telescope buffer builtin | ||||
| -- Src: https://github.com/nvim-telescope/telescope.nvim/blob/master/lua/telescope/builtin/internal.lua | ||||
| M.term_picker = function(opts) | ||||
|    local pickers, finders, previewers, make_entry, actions, action_state, utils, conf | ||||
|    if pcall(require, "telescope") then | ||||
|       pickers = require "telescope.pickers" | ||||
|       finders = require "telescope.finders" | ||||
|       previewers = require "telescope.previewers" | ||||
| 
 | ||||
|       make_entry = require "telescope.make_entry" | ||||
|       actions = require "telescope.actions" | ||||
|       action_state = require "telescope.actions.state" | ||||
|       utils = require "telescope.utils" | ||||
|       conf = require("telescope.config").values | ||||
|    else | ||||
|       error "Cannot find telescope!" | ||||
|    end | ||||
| 
 | ||||
|    local filter = vim.tbl_filter | ||||
| 
 | ||||
|    local local_utils = require "utils" | ||||
| 
 | ||||
|    -- buffer number and name | ||||
|    local bufnr = vim.api.nvim_get_current_buf() | ||||
|    local bufname = vim.api.nvim_buf_get_name(bufnr) | ||||
| 
 | ||||
|    local bufnrs = filter(function(b) | ||||
|       local present_type, type = pcall(function() | ||||
|          return vim.api.nvim_buf_get_var(b, "term_type") | ||||
|       end) | ||||
| 
 | ||||
|       if not present_type then | ||||
|          -- let's only terms that we created | ||||
|          return false | ||||
|       end | ||||
| 
 | ||||
|       -- if 1 ~= vim.fn.buflisted(b) then | ||||
|       --    return false | ||||
|       -- end | ||||
|       -- only hide unloaded buffers if opts.show_all_buffers is false, keep them listed if true or nil | ||||
|       if opts.show_all_buffers == false and not vim.api.nvim_buf_is_loaded(b) then | ||||
|          return false | ||||
|       end | ||||
|       if opts.ignore_current_buffer and b == vim.api.nvim_get_current_buf() then | ||||
|          return false | ||||
|       end | ||||
|       return true | ||||
|    end, vim.api.nvim_list_bufs()) | ||||
|    if not next(bufnrs) then | ||||
|       return | ||||
|    end | ||||
|    if opts.sort_mru then | ||||
|       table.sort(bufnrs, function(a, b) | ||||
|          return vim.fn.getbufinfo(a)[1].lastused > vim.fn.getbufinfo(b)[1].lastused | ||||
|       end) | ||||
|    end | ||||
| 
 | ||||
|    local buffers = {} | ||||
|    local default_selection_idx = 1 | ||||
|    for _, bufnr in ipairs(bufnrs) do | ||||
|       local flag = bufnr == vim.fn.bufnr "" and "%" or (bufnr == vim.fn.bufnr "#" and "#" or " ") | ||||
| 
 | ||||
|       if opts.sort_lastused and not opts.ignore_current_buffer and flag == "#" then | ||||
|          default_selection_idx = 2 | ||||
|       end | ||||
| 
 | ||||
|       local element = { | ||||
|          bufnr = bufnr, | ||||
|          flag = flag, | ||||
|          info = vim.fn.getbufinfo(bufnr)[1], | ||||
|       } | ||||
| 
 | ||||
|       if opts.sort_lastused and (flag == "#" or flag == "%") then | ||||
|          local idx = ((buffers[1] ~= nil and buffers[1].flag == "%") and 2 or 1) | ||||
|          table.insert(buffers, idx, element) | ||||
|       else | ||||
|          table.insert(buffers, element) | ||||
|       end | ||||
|    end | ||||
| 
 | ||||
|    if not opts.bufnr_width then | ||||
|       local max_bufnr = math.max(unpack(bufnrs)) | ||||
|       opts.bufnr_width = #tostring(max_bufnr) | ||||
|    end | ||||
| 
 | ||||
|    pickers.new(opts, { | ||||
|       prompt_title = "Terminal buffers", | ||||
|       finder = finders.new_table { | ||||
|          results = buffers, | ||||
|          entry_maker = opts.entry_maker or make_entry.gen_from_buffer(opts), | ||||
|       }, | ||||
|       previewer = conf.grep_previewer(opts), | ||||
|       sorter = conf.generic_sorter(opts), | ||||
|       default_selection_index = default_selection_idx, | ||||
|       attach_mappings = function(prompt_bufnr) | ||||
|          actions.select_default:replace(function() | ||||
|             local entry = action_state.get_selected_entry() | ||||
|             actions.close(prompt_bufnr) | ||||
| 
 | ||||
|             local buf = entry.bufnr | ||||
| 
 | ||||
|             local chad_term, type = pcall(function() | ||||
|                return vim.api.nvim_buf_get_var(buf, "term_type") | ||||
|             end) | ||||
| 
 | ||||
|             -- TODO buffer checks/error detection (make sure we do get a buf) | ||||
| 
 | ||||
|             if chad_term then | ||||
|                if type == "wind" then | ||||
|                   -- swtich to term buff & show in bufferline | ||||
|                   vim.cmd(string.format("b %d | setlocal bl", buf)) | ||||
|                   -- vim.cmd('startinsert') TODO fix this | ||||
|                elseif type == "vert" then | ||||
|                   vim.cmd(string.format("vsp #%d", buf)) | ||||
|                   -- vim.cmd('startinsert') TODO fix this | ||||
|                elseif type == "hori" then | ||||
|                   -- TODO change 15 to a chad config var number | ||||
|                   vim.cmd(string.format("15 sp #%d ", buf)) | ||||
|                   -- vim.cmd('startinsert') TODO fix this | ||||
|                end | ||||
|             end | ||||
|          end) | ||||
| 
 | ||||
|          return true | ||||
|       end, | ||||
|    }):find() | ||||
| end | ||||
| 
 | ||||
| -- register term picker as terms to telescope | ||||
| local present, telescope = pcall(require, "telescope") | ||||
| if present then | ||||
|    return telescope.register_extension { | ||||
|       exports = { | ||||
|          terms = M.term_picker, | ||||
|       }, | ||||
|    } | ||||
| else | ||||
|    error "Cannot find telescope!" | ||||
| end | ||||
| @ -1,142 +0,0 @@ | ||||
| -- This file can be loaded as a telescope extension | ||||
| local M = {} | ||||
| 
 | ||||
| -- Custom theme picker | ||||
| -- Most of the code is copied from telescope colorscheme plugin, mostly for preview creation | ||||
| M.theme_switcher = function(opts) | ||||
|    local pickers, finders, previewers, actions, action_state, utils, conf | ||||
|    if pcall(require, "telescope") then | ||||
|       pickers = require "telescope.pickers" | ||||
|       finders = require "telescope.finders" | ||||
|       previewers = require "telescope.previewers" | ||||
| 
 | ||||
|       actions = require "telescope.actions" | ||||
|       action_state = require "telescope.actions.state" | ||||
|       utils = require "telescope.utils" | ||||
|       conf = require("telescope.config").values | ||||
|    else | ||||
|       error "Cannot find telescope!" | ||||
|    end | ||||
| 
 | ||||
|    local local_utils = require "utils" | ||||
|    local reload_theme = local_utils.reload_theme | ||||
| 
 | ||||
|    -- get a table of available themes | ||||
|    local themes = local_utils.list_themes() | ||||
|    if next(themes) ~= nil then | ||||
|       -- save this to use it for later to restore if theme not changed | ||||
|       local current_theme = vim.g.nvchad_theme | ||||
|       local new_theme = "" | ||||
|       local change = false | ||||
| 
 | ||||
|       -- buffer number and name | ||||
|       local bufnr = vim.api.nvim_get_current_buf() | ||||
|       local bufname = vim.api.nvim_buf_get_name(bufnr) | ||||
| 
 | ||||
|       local previewer | ||||
| 
 | ||||
|       -- in case its not a normal buffer | ||||
|       if vim.fn.buflisted(bufnr) ~= 1 then | ||||
|          local deleted = false | ||||
|          local function del_win(win_id) | ||||
|             if win_id and vim.api.nvim_win_is_valid(win_id) then | ||||
|                utils.buf_delete(vim.api.nvim_win_get_buf(win_id)) | ||||
|                pcall(vim.api.nvim_win_close, win_id, true) | ||||
|             end | ||||
|          end | ||||
| 
 | ||||
|          previewer = previewers.new { | ||||
|             preview_fn = function(_, entry, status) | ||||
|                if not deleted then | ||||
|                   deleted = true | ||||
|                   del_win(status.preview_win) | ||||
|                   del_win(status.preview_border_win) | ||||
|                end | ||||
|                reload_theme(entry.value) | ||||
|             end, | ||||
|          } | ||||
|       else | ||||
|          -- show current buffer content in previewer | ||||
|          previewer = previewers.new_buffer_previewer { | ||||
|             get_buffer_by_name = function() | ||||
|                return bufname | ||||
|             end, | ||||
|             define_preview = function(self, entry) | ||||
|                if vim.loop.fs_stat(bufname) then | ||||
|                   conf.buffer_previewer_maker(bufname, self.state.bufnr, { bufname = self.state.bufname }) | ||||
|                else | ||||
|                   local lines = vim.api.nvim_buf_get_lines(bufnr, 0, -1, false) | ||||
|                   vim.api.nvim_buf_set_lines(self.state.bufnr, 0, -1, false, lines) | ||||
|                end | ||||
|                reload_theme(entry.value) | ||||
|             end, | ||||
|          } | ||||
|       end | ||||
| 
 | ||||
|       local picker = pickers.new { | ||||
|          prompt_title = "Set NvChad color", | ||||
|          finder = finders.new_table(themes), | ||||
|          previewer = previewer, | ||||
|          sorter = conf.generic_sorter(opts), | ||||
|          attach_mappings = function() | ||||
|             actions.select_default:replace( | ||||
|                -- if a entry is selected, change current_theme to that | ||||
|                function(prompt_bufnr) | ||||
|                   local selection = action_state.get_selected_entry() | ||||
|                   new_theme = selection.value | ||||
|                   change = true | ||||
|                   actions.close(prompt_bufnr) | ||||
|                end | ||||
|             ) | ||||
|             return true | ||||
|          end, | ||||
|       } | ||||
| 
 | ||||
|       -- rewrite picker.close_windows | ||||
|       local close_windows = picker.close_windows | ||||
|       picker.close_windows = function(status) | ||||
|          close_windows(status) | ||||
|          -- now apply the theme, if success, then ask for default theme change | ||||
|          local final_theme | ||||
|          if change then | ||||
|             final_theme = new_theme | ||||
|          else | ||||
|             final_theme = current_theme | ||||
|          end | ||||
| 
 | ||||
|          if reload_theme(final_theme) then | ||||
|             if change then | ||||
|                -- ask for confirmation to set as default theme | ||||
|                local ans = string.lower(vim.fn.input("Set " .. new_theme .. " as default theme ? [y/N] ")) == "y" | ||||
|                local_utils.clear_cmdline() | ||||
|                if ans then | ||||
|                   local_utils.change_theme(current_theme, final_theme) | ||||
|                else | ||||
|                   -- will be used in restoring nvchad theme var | ||||
|                   final_theme = current_theme | ||||
|                end | ||||
|             end | ||||
|          else | ||||
|             final_theme = current_theme | ||||
|          end | ||||
|          -- set nvchad_theme global var | ||||
|          vim.g.nvchad_theme = final_theme | ||||
|       end | ||||
|       -- launch the telescope picker | ||||
|       picker:find() | ||||
|    else | ||||
|       print("No themes found in " .. vim.fn.stdpath "config" .. "/lua/themes") | ||||
|    end | ||||
| end | ||||
| 
 | ||||
| -- register theme swticher as themes to telescope | ||||
| local present, telescope = pcall(require, "telescope") | ||||
| if present then | ||||
|    return telescope.register_extension { | ||||
|       exports = { | ||||
|          themes = M.theme_switcher, | ||||
|       }, | ||||
|    } | ||||
| else | ||||
|    error "Cannot find telescope!" | ||||
| end | ||||
| @ -1,12 +0,0 @@ | ||||
| local chad_theme = require("utils").load_config().ui.theme | ||||
| vim.g.nvchad_theme = chad_theme | ||||
| 
 | ||||
| local present, base16 = pcall(require, "base16") | ||||
| 
 | ||||
| if present then | ||||
|    base16(base16.themes(chad_theme), true) | ||||
|    require "highlights" | ||||
|    return true | ||||
| else | ||||
|    return false | ||||
| end | ||||
							
								
								
									
										531
									
								
								lua/utils.lua
									
									
									
									
									
								
							
							
						
						
									
										531
									
								
								lua/utils.lua
									
									
									
									
									
								
							| @ -1,531 +0,0 @@ | ||||
| local M = {} | ||||
| 
 | ||||
| -- 1st arg as current theme, 2nd as new theme | ||||
| M.change_theme = function(current_theme, new_theme) | ||||
|    if current_theme == nil or new_theme == nil then | ||||
|       print "Error: Provide current and new theme name" | ||||
|       return false | ||||
|    end | ||||
|    if current_theme == new_theme then | ||||
|       return | ||||
|    end | ||||
| 
 | ||||
|    local user_config = vim.g.nvchad_user_config | ||||
|    local file = vim.fn.stdpath "config" .. "/lua/" .. user_config .. ".lua" | ||||
|    -- store in data variable | ||||
|    local data = assert(M.file("r", file)) | ||||
|    -- escape characters which can be parsed as magic chars | ||||
|    current_theme = current_theme:gsub("%p", "%%%0") | ||||
|    new_theme = new_theme:gsub("%p", "%%%0") | ||||
|    local find = "theme = .?" .. current_theme .. ".?" | ||||
|    local replace = 'theme = "' .. new_theme .. '"' | ||||
|    local content = string.gsub(data, find, replace) | ||||
|    -- see if the find string exists in file | ||||
|    if content == data then | ||||
|       print("Error: Cannot change default theme with " .. new_theme .. ", edit " .. file .. " manually") | ||||
|       return false | ||||
|    else | ||||
|       assert(M.file("w", file, content)) | ||||
|    end | ||||
| end | ||||
| 
 | ||||
| M.clear_cmdline = function() | ||||
|    vim.defer_fn(function() | ||||
|       vim.cmd "echo" | ||||
|    end, 0) | ||||
| end | ||||
| 
 | ||||
| M.close_buffer = function(bufexpr, force) | ||||
|    -- This is a modification of a NeoVim plugin from | ||||
|    -- Author: ojroques - Olivier Roques | ||||
|    -- Src: https://github.com/ojroques/nvim-bufdel | ||||
|    -- (Author has okayed copy-paste) | ||||
| 
 | ||||
|    -- Options | ||||
|    local opts = { | ||||
|       next = "cycle", -- how to retrieve the next buffer | ||||
|       quit = false, -- exit when last buffer is deleted | ||||
|       --TODO make this a chadrc flag/option | ||||
|    } | ||||
| 
 | ||||
|    -- ---------------- | ||||
|    -- Helper functions | ||||
|    -- ---------------- | ||||
| 
 | ||||
|    -- Switch to buffer 'buf' on each window from list 'windows' | ||||
|    local function switch_buffer(windows, buf) | ||||
|       local cur_win = vim.fn.winnr() | ||||
|       for _, winid in ipairs(windows) do | ||||
|          vim.cmd(string.format("%d wincmd w", vim.fn.win_id2win(winid))) | ||||
|          vim.cmd(string.format("buffer %d", buf)) | ||||
|       end | ||||
|       vim.cmd(string.format("%d wincmd w", cur_win)) -- return to original window | ||||
|    end | ||||
| 
 | ||||
|    -- Select the first buffer with a number greater than given buffer | ||||
|    local function get_next_buf(buf) | ||||
|       local next = vim.fn.bufnr "#" | ||||
|       if opts.next == "alternate" and vim.fn.buflisted(next) == 1 then | ||||
|          return next | ||||
|       end | ||||
|       for i = 0, vim.fn.bufnr "$" - 1 do | ||||
|          next = (buf + i) % vim.fn.bufnr "$" + 1 -- will loop back to 1 | ||||
|          if vim.fn.buflisted(next) == 1 then | ||||
|             return next | ||||
|          end | ||||
|       end | ||||
|    end | ||||
| 
 | ||||
|    -- ---------------- | ||||
|    -- End helper functions | ||||
|    -- ---------------- | ||||
| 
 | ||||
|    local buf = vim.fn.bufnr() | ||||
|    if vim.fn.buflisted(buf) == 0 then -- exit if buffer number is invalid | ||||
|       vim.cmd "close" | ||||
|       return | ||||
|    end | ||||
| 
 | ||||
|    if #vim.fn.getbufinfo { buflisted = 1 } < 2 then | ||||
|       if opts.quit then | ||||
|          -- exit when there is only one buffer left | ||||
|          if force then | ||||
|             vim.cmd "qall!" | ||||
|          else | ||||
|             vim.cmd "confirm qall" | ||||
|          end | ||||
|          return | ||||
|       end | ||||
| 
 | ||||
|       local chad_term, type = pcall(function() | ||||
|          return vim.api.nvim_buf_get_var(buf, "term_type") | ||||
|       end) | ||||
| 
 | ||||
|       if chad_term then | ||||
|          -- Must be a window type | ||||
|          vim.cmd(string.format("setlocal nobl", buf)) | ||||
|          vim.cmd "enew" | ||||
|          return | ||||
|       end | ||||
|       -- don't exit and create a new empty buffer | ||||
|       vim.cmd "enew" | ||||
|       vim.cmd "bp" | ||||
|    end | ||||
| 
 | ||||
|    local next_buf = get_next_buf(buf) | ||||
|    local windows = vim.fn.getbufinfo(buf)[1].windows | ||||
| 
 | ||||
|    -- force deletion of terminal buffers to avoid the prompt | ||||
|    if force or vim.fn.getbufvar(buf, "&buftype") == "terminal" then | ||||
|       local chad_term, type = pcall(function() | ||||
|          return vim.api.nvim_buf_get_var(buf, "term_type") | ||||
|       end) | ||||
| 
 | ||||
|       -- TODO this scope is error prone, make resilient | ||||
|       if chad_term then | ||||
|          if type == "wind" then | ||||
|             -- hide from bufferline | ||||
|             vim.cmd(string.format("%d bufdo setlocal nobl", buf)) | ||||
|             -- swtich to another buff | ||||
|             -- TODO switch to next bufffer, this works too | ||||
|             vim.cmd "BufferLineCycleNext" | ||||
|          else | ||||
|             local cur_win = vim.fn.winnr() | ||||
|             -- we can close this window | ||||
|             vim.cmd(string.format("%d wincmd c", cur_win)) | ||||
|             return | ||||
|          end | ||||
|       else | ||||
|          switch_buffer(windows, next_buf) | ||||
|          vim.cmd(string.format("bd! %d", buf)) | ||||
|       end | ||||
|    else | ||||
|       switch_buffer(windows, next_buf) | ||||
|       vim.cmd(string.format("silent! confirm bd %d", buf)) | ||||
|    end | ||||
|    -- revert buffer switches if user has canceled deletion | ||||
|    if vim.fn.buflisted(buf) == 1 then | ||||
|       switch_buffer(windows, buf) | ||||
|    end | ||||
| end | ||||
| 
 | ||||
| -- wrapper to use vim.api.nvim_echo | ||||
| -- table of {string, highlight} | ||||
| -- e.g echo({{"Hello", "Title"}, {"World"}}) | ||||
| M.echo = function(opts) | ||||
|    if opts == nil or type(opts) ~= "table" then | ||||
|       return | ||||
|    end | ||||
|    vim.api.nvim_echo(opts, false, {}) | ||||
| end | ||||
| 
 | ||||
| -- 1st arg - r or w | ||||
| -- 2nd arg - file path | ||||
| -- 3rd arg - content if 1st arg is w | ||||
| -- return file data on read, nothing on write | ||||
| M.file = function(mode, filepath, content) | ||||
|    local data | ||||
|    local fd = assert(vim.loop.fs_open(filepath, mode, 438)) | ||||
|    local stat = assert(vim.loop.fs_fstat(fd)) | ||||
|    if stat.type ~= "file" then | ||||
|       data = false | ||||
|    else | ||||
|       if mode == "r" then | ||||
|          data = assert(vim.loop.fs_read(fd, stat.size, 0)) | ||||
|       else | ||||
|          assert(vim.loop.fs_write(fd, content, 0)) | ||||
|          data = true | ||||
|       end | ||||
|    end | ||||
|    assert(vim.loop.fs_close(fd)) | ||||
|    return data | ||||
| end | ||||
| 
 | ||||
| -- hide statusline | ||||
| -- tables fetched from load_config function | ||||
| M.hide_statusline = function(values) | ||||
|    local hidden = require("utils").load_config().ui.statusline.hidden | ||||
|    local shown = require("utils").load_config().ui.statusline.shown | ||||
|    local api = vim.api | ||||
|    local buftype = api.nvim_buf_get_option("%", "ft") | ||||
| 
 | ||||
|    -- shown table from config has the highest priority | ||||
|    if vim.tbl_contains(shown, buftype) then | ||||
|       api.nvim_set_option("laststatus", 2) | ||||
|       return | ||||
|    end | ||||
| 
 | ||||
|    if vim.tbl_contains(hidden, buftype) then | ||||
|       api.nvim_set_option("laststatus", 0) | ||||
|       return | ||||
|    else | ||||
|       api.nvim_set_option("laststatus", 2) | ||||
|    end | ||||
| end | ||||
| 
 | ||||
| -- return a table of available themes | ||||
| M.list_themes = function(return_type) | ||||
|    local themes = {} | ||||
|    -- folder where theme files are stored | ||||
|    local themes_folder = vim.fn.stdpath "config" .. "/lua/themes" | ||||
|    -- list all the contents of the folder and filter out files with .lua extension, then append to themes table | ||||
|    local fd = vim.loop.fs_scandir(themes_folder) | ||||
|    if fd then | ||||
|       while true do | ||||
|          local name, typ = vim.loop.fs_scandir_next(fd) | ||||
|          if name == nil then | ||||
|             break | ||||
|          end | ||||
|          if typ ~= "directory" and string.find(name, ".lua") then | ||||
|             -- return the table values as keys if specified | ||||
|             if return_type == "keys_as_value" then | ||||
|                themes[vim.fn.fnamemodify(name, ":r")] = true | ||||
|             else | ||||
|                table.insert(themes, vim.fn.fnamemodify(name, ":r")) | ||||
|             end | ||||
|          end | ||||
|       end | ||||
|    end | ||||
|    return themes | ||||
| end | ||||
| 
 | ||||
| -- Base code: https://gist.github.com/revolucas/184aec7998a6be5d2f61b984fac1d7f7 | ||||
| -- Changes over it: preserving table 1 contents and also update with table b, without duplicating | ||||
| -- 1st arg - base table, 2nd arg - table to merge | ||||
| M.merge_table = function(into, from) | ||||
|    -- make sure both are table | ||||
|    if type(into) ~= "table" or type(from) ~= "table" then | ||||
|       return into | ||||
|    end | ||||
|    local stack, seen = {}, {} | ||||
|    local table1, table2 = into, from | ||||
|    while true do | ||||
|       for k, v in pairs(table2) do | ||||
|          if type(v) == "table" and type(table1[k]) == "table" then | ||||
|             table.insert(stack, { table1[k], table2[k] }) | ||||
|          else | ||||
|             local present = seen[v] or false | ||||
|             if not present then | ||||
|                if type(k) == "number" then | ||||
|                   -- add the value to seen table until value is found | ||||
|                   -- only do when key is number we just want to append to subtables | ||||
|                   -- todo: maybe improve this | ||||
| 
 | ||||
|                   for _, value in pairs(table1) do | ||||
|                      if value == v then | ||||
|                         present = true | ||||
|                         break | ||||
|                      end | ||||
|                   end | ||||
|                   seen[v] = true | ||||
|                   if not present then | ||||
|                      table1[#table1 + 1] = v | ||||
|                   end | ||||
|                else | ||||
|                   table1[k] = v | ||||
|                end | ||||
|             end | ||||
|          end | ||||
|       end | ||||
|       if #stack > 0 then | ||||
|          local t = stack[#stack] | ||||
|          table1, table2 = t[1], t[2] | ||||
|          stack[#stack] = nil | ||||
|       else | ||||
|          break | ||||
|       end | ||||
|    end | ||||
|    return into | ||||
| end | ||||
| 
 | ||||
| -- load config | ||||
| -- 1st arg = boolean - whether to force reload | ||||
| -- Modifies _G._NVCHAD_CONFIG global variable | ||||
| M.load_config = function(reload) | ||||
|    -- only do the stuff below one time, otherwise just return the set config | ||||
|    if _G._NVCHAD_CONFIG_CONTENTS ~= nil and not (reload or false) then | ||||
|       return _G._NVCHAD_CONFIG_CONTENTS | ||||
|    end | ||||
| 
 | ||||
|    local default_config = "default_config" | ||||
|    local config_name = vim.g.nvchad_user_config or "chadrc" | ||||
|    local config_file = vim.fn.stdpath "config" .. "/lua/" .. config_name .. ".lua" | ||||
| 
 | ||||
|    -- unload the modules if force reload | ||||
|    if reload then | ||||
|       package.loaded[default_config or false] = nil | ||||
|       package.loaded[config_name or false] = nil | ||||
|    end | ||||
| 
 | ||||
|    -- don't enclose in pcall, it better break when default config is faulty | ||||
|    _G._NVCHAD_CONFIG_CONTENTS = require(default_config) | ||||
| 
 | ||||
|    -- user config is not required to run nvchad but a optional | ||||
|    -- Make sure the config doesn't break the whole system if user config is not present or in bad state or not a table | ||||
|    -- print warning texts if user config file is  present | ||||
|    -- check if the user config is present | ||||
|    if vim.fn.empty(vim.fn.glob(config_file)) < 1 then | ||||
|       local present, config = pcall(require, config_name) | ||||
|       if present then | ||||
|          -- make sure the returned value is table | ||||
|          if type(config) == "table" then | ||||
|             -- data = require(config_name) | ||||
|             _G._NVCHAD_CONFIG_CONTENTS = require("utils").merge_table(_G._NVCHAD_CONFIG_CONTENTS, config) | ||||
|          else | ||||
|             print("Warning: " .. config_name .. " sourced successfully but did not return a lua table.") | ||||
|          end | ||||
|       else | ||||
|          print("Warning: " .. config_file .. " is present but sourcing failed.") | ||||
|       end | ||||
|    end | ||||
|    return _G._NVCHAD_CONFIG_CONTENTS | ||||
| end | ||||
| 
 | ||||
| -- reload a plugin ( will try to load even if not loaded) | ||||
| -- can take a string or list ( table ) | ||||
| -- return true or false | ||||
| M.reload_plugin = function(plugins) | ||||
|    local status = true | ||||
|    local function _reload_plugin(plugin) | ||||
|       local loaded = package.loaded[plugin] | ||||
|       if loaded then | ||||
|          package.loaded[plugin] = nil | ||||
|       end | ||||
|       if not pcall(require, plugin) then | ||||
|          print("Error: Cannot load " .. plugin .. " plugin!") | ||||
|          status = false | ||||
|       end | ||||
|    end | ||||
| 
 | ||||
|    if type(plugins) == "string" then | ||||
|       _reload_plugin(plugins) | ||||
|    elseif type(plugins) == "table" then | ||||
|       for _, plugin in ipairs(plugins) do | ||||
|          _reload_plugin(plugin) | ||||
|       end | ||||
|    end | ||||
|    return status | ||||
| end | ||||
| 
 | ||||
| -- reload themes without restarting vim | ||||
| -- if no theme name given then reload the current theme | ||||
| M.reload_theme = function(theme_name) | ||||
|    local reload_plugin = require("utils").reload_plugin | ||||
| 
 | ||||
|    -- if theme name is empty or nil, then reload the current theme | ||||
|    if theme_name == nil or theme_name == "" then | ||||
|       theme_name = vim.g.nvchad_theme | ||||
|    end | ||||
| 
 | ||||
|    if not pcall(require, "themes/" .. theme_name) then | ||||
|       print("No such theme ( " .. theme_name .. " )") | ||||
|       return false | ||||
|    end | ||||
| 
 | ||||
|    vim.g.nvchad_theme = theme_name | ||||
| 
 | ||||
|    -- reload the base16 theme | ||||
|    local ok, base16 = pcall(require, "base16") | ||||
|    if not ok then | ||||
|       print "Error: Cannot load base16 plugin!" | ||||
|       return false | ||||
|    end | ||||
|    base16(base16.themes(theme_name), true) | ||||
| 
 | ||||
|    if | ||||
|       not reload_plugin { | ||||
|          "highlights", | ||||
|          "plugins.bufferline", | ||||
|          "galaxyline", | ||||
|          "plugins.statusline", | ||||
|       } | ||||
|    then | ||||
|       print "Error: Not able to reload all plugins." | ||||
|       return false | ||||
|    end | ||||
| 
 | ||||
|    -- yes, this is very hacky, but due to new_async in | ||||
|    -- https://github.com/glepnir/galaxyline.nvim/blob/main/lua/galaxyline/provider.lua#L5-L36 | ||||
|    -- it doesn't work properly and some statusline stuff dissapears | ||||
|    local vcs = require "galaxyline.provider_vcs" | ||||
|    local fileinfo = require "galaxyline.provider_fileinfo" | ||||
|    local buffer = require "galaxyline.provider_buffer" | ||||
|    local extension = require "galaxyline.provider_extensions" | ||||
|    local whitespace = require "galaxyline.provider_whitespace" | ||||
|    local lspclient = require "galaxyline.provider_lsp" | ||||
|    _G.galaxyline_providers = { | ||||
|       BufferIcon = buffer.get_buffer_type_icon, | ||||
|       BufferNumber = buffer.get_buffer_number, | ||||
|       FileTypeName = buffer.get_buffer_filetype, | ||||
|       GitBranch = vcs.get_git_branch, | ||||
|       DiffAdd = vcs.diff_add, | ||||
|       DiffModified = vcs.diff_modified, | ||||
|       DiffRemove = vcs.diff_remove, | ||||
|       LineColumn = fileinfo.line_column, | ||||
|       FileFormat = fileinfo.get_file_format, | ||||
|       FileEncode = fileinfo.get_file_encode, | ||||
|       FileSize = fileinfo.get_file_size, | ||||
|       FileIcon = fileinfo.get_file_icon, | ||||
|       FileName = fileinfo.get_current_file_name, | ||||
|       SFileName = fileinfo.filename_in_special_buffer, | ||||
|       LinePercent = fileinfo.current_line_percent, | ||||
|       ScrollBar = extension.scrollbar_instance, | ||||
|       VistaPlugin = extension.vista_nearest, | ||||
|       WhiteSpace = whitespace.get_item, | ||||
|       GetLspClient = lspclient.get_lsp_client, | ||||
|    } | ||||
|    local diagnostic = require "galaxyline.provider_diagnostic" | ||||
|    _G.galaxyline_providers.DiagnosticError = diagnostic.get_diagnostic_error | ||||
|    _G.galaxyline_providers.DiagnosticWarn = diagnostic.get_diagnostic_warn | ||||
|    _G.galaxyline_providers.DiagnosticHint = diagnostic.get_diagnostic_hint | ||||
|    _G.galaxyline_providers.DiagnosticInfo = diagnostic.get_diagnostic_info | ||||
| 
 | ||||
|    return true | ||||
| end | ||||
| 
 | ||||
| -- toggle between 2 themes | ||||
| -- argument should be a table with 2 theme names | ||||
| M.toggle_theme = function(themes) | ||||
|    local current_theme = vim.g.current_nvchad_theme or vim.g.nvchad_theme | ||||
|    for _, name in ipairs(themes) do | ||||
|       if name ~= current_theme then | ||||
|          if require("utils").reload_theme(name) then | ||||
|             -- open a buffer and close it to reload the statusline | ||||
|             vim.cmd "new|bwipeout" | ||||
|             vim.g.current_nvchad_theme = name | ||||
|             if M.change_theme(vim.g.nvchad_theme, name) then | ||||
|                vim.g.nvchad_theme = name | ||||
|             end | ||||
|          end | ||||
|       end | ||||
|    end | ||||
| end | ||||
| 
 | ||||
| -- update nvchad | ||||
| M.update_nvchad = function() | ||||
|    -- in all the comments below, config means user config | ||||
|    local config_path = vim.fn.stdpath "config" | ||||
|    local config_name = vim.g.nvchad_user_config or "chadrc" | ||||
|    local config_file = config_path .. "/lua/" .. config_name .. ".lua" | ||||
|    -- generate a random file name | ||||
|    local config_file_backup = config_path .. "/" .. config_name .. ".lua.bak." .. math.random() | ||||
|    local utils = require "utils" | ||||
|    local echo = utils.echo | ||||
|    local current_config = utils.load_config() | ||||
|    local update_url = current_config.options.update_url or "https://github.com/NvChad/NvChad" | ||||
|    local update_branch = current_config.options.update_branch or "main" | ||||
| 
 | ||||
|    -- ask the user for confirmation to update because we are going to run git reset --hard | ||||
|    echo { { "Url: ", "Title" }, { update_url } } | ||||
|    echo { { "Branch: ", "Title" }, { update_branch } } | ||||
|    echo { | ||||
|       { "\nUpdater will run", "WarningMsg" }, | ||||
|       { " git reset --hard " }, | ||||
|       { | ||||
|          "in config folder, so changes to existing repo files except ", | ||||
|          "WarningMsg", | ||||
|       }, | ||||
| 
 | ||||
|       { config_name }, | ||||
|       { " will be lost!\n\nUpdate NvChad ? [y/N]", "WarningMsg" }, | ||||
|    } | ||||
| 
 | ||||
|    local ans = string.lower(vim.fn.input "-> ") == "y" | ||||
|    utils.clear_cmdline() | ||||
|    if not ans then | ||||
|       echo { { "Update cancelled!", "Title" } } | ||||
|       return | ||||
|    end | ||||
| 
 | ||||
|    -- first try to fetch contents of config, this will make sure it is readable and taking backup of its contents | ||||
|    local config_contents = utils.file("r", config_file) | ||||
|    -- also make a local backup in ~/.config/nvim, will be removed when config is succesfully restored | ||||
|    utils.file("w", config_file_backup, config_contents) | ||||
|    -- write original config file with its contents, will make sure charc is writable, this maybe overkill but a little precaution always helps | ||||
|    utils.file("w", config_file, config_contents) | ||||
| 
 | ||||
|    -- function that will executed when git commands are done | ||||
|    local function update_exit(_, code) | ||||
|       -- restore config file irrespective of whether git commands were succesfull or not | ||||
|       if pcall(function() | ||||
|          utils.file("w", config_file, config_contents) | ||||
|       end) then | ||||
|          -- config restored succesfully, remove backup file that was created | ||||
|          if not pcall(os.remove, config_file_backup) then | ||||
|             echo { { "Warning: Failed to remove backup chadrc, remove manually.", "WarningMsg" } } | ||||
|             echo { { "Path: ", "WarningMsg" }, { config_file_backup } } | ||||
|          end | ||||
|       else | ||||
|          echo { { "Error: Restoring " .. config_name .. " failed.\n", "ErrorMsg" } } | ||||
|          echo { { "Backed up " .. config_name .. " path: " .. config_file_backup .. "\n\n", "None" } } | ||||
|       end | ||||
| 
 | ||||
|       -- close the terminal buffer only if update was success, as in case of error, we need the error message | ||||
|       if code == 0 then | ||||
|          vim.cmd "bd!" | ||||
|          echo { { "NvChad succesfully updated.\n", "String" } } | ||||
|       else | ||||
|          echo { { "Error: NvChad Update failed.\n", "ErrorMsg" } } | ||||
|       end | ||||
|    end | ||||
| 
 | ||||
|    -- git commands that will executed, reset in case config was modfied | ||||
|    -- use --rebase, to not mess up if the local repo is outdated | ||||
|    local update_script = table.concat({ | ||||
|       "git reset --hard && git pull --set-upstream", | ||||
|       update_url, | ||||
|       update_branch, | ||||
|       "--rebase", | ||||
|    }, " ") | ||||
| 
 | ||||
|    -- open a new buffer | ||||
|    vim.cmd "new" | ||||
|    -- finally open the pseudo terminal buffer | ||||
|    vim.fn.termopen(update_script, { | ||||
|       -- change dir to config path so we don't need to move in script | ||||
|       cwd = config_path, | ||||
|       on_exit = update_exit, | ||||
|    }) | ||||
| end | ||||
| 
 | ||||
| return M | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user