From ccb827f72dcaafe514a8951d76a294bcad48ddc7 Mon Sep 17 00:00:00 2001 From: austindaily Date: Mon, 25 Mar 2024 21:48:00 -0400 Subject: [PATCH] updates config including adding nvim-tree --- init.lua | 43 +- lua/custom/plugins/configs/nvim-tree.lua | 829 +++++++++++++++++++ lua/custom/plugins/keymaps.lua | 14 + lua/custom/plugins/{init.lua => plugins.lua} | 4 +- lua/kickstart/{ => plugins}/health.lua | 0 lua/kickstart/remap.lua | 2 + 6 files changed, 883 insertions(+), 9 deletions(-) create mode 100644 lua/custom/plugins/configs/nvim-tree.lua create mode 100644 lua/custom/plugins/keymaps.lua rename lua/custom/plugins/{init.lua => plugins.lua} (84%) rename lua/kickstart/{ => plugins}/health.lua (100%) create mode 100644 lua/kickstart/remap.lua diff --git a/init.lua b/init.lua index 1e5691a7..58227697 100644 --- a/init.lua +++ b/init.lua @@ -90,6 +90,10 @@ P.S. You can delete this when you're done too. It's your config now! :) vim.g.mapleader = ' ' vim.g.maplocalleader = ' ' +-- Disable Netrw for NvimTree +vim.g.loaded_netrw = 1 +vim.g.loaded_netrwPlugin = 1 + -- [[ Setting options ]] -- See `:help vim.opt` -- NOTE: You can change these options as you wish! @@ -97,6 +101,7 @@ vim.g.maplocalleader = ' ' -- Make line numbers default vim.opt.number = true +vim.opt.relativenumber = true -- You can also add relative line numbers, for help with jumping. -- Experiment for yourself to see if you like it! -- vim.opt.relativenumber = true @@ -253,6 +258,19 @@ require('lazy').setup({ }, }, + -- NvimTree added March 25 2024 + { + 'nvim-tree/nvim-tree.lua', + version = '*', + lazy = false, + dependencies = { + 'nvim-tree/nvim-web-devicons', + }, + config = function() + require('nvim-tree').setup {} + end, + }, + -- NOTE: Plugins can also be configured to run lua code when they are loaded. -- -- This is often very useful to both group configuration, as well as handle @@ -316,7 +334,7 @@ require('lazy').setup({ -- Useful for getting pretty icons, but requires special font. -- If you already have a Nerd Font, or terminal set up with fallback fonts -- you can enable this - -- { 'nvim-tree/nvim-web-devicons' } + { 'nvim-tree/nvim-web-devicons' }, }, config = function() -- Telescope is a fuzzy finder that comes with a lot of different things that @@ -365,7 +383,7 @@ require('lazy').setup({ local builtin = require 'telescope.builtin' vim.keymap.set('n', 'sh', builtin.help_tags, { desc = '[S]earch [H]elp' }) vim.keymap.set('n', 'sk', builtin.keymaps, { desc = '[S]earch [K]eymaps' }) - vim.keymap.set('n', 'sf', builtin.find_files, { desc = '[S]earch [F]iles' }) + vim.keymap.set('n', 'ff', builtin.find_files, { desc = '[S]earch [F]iles' }) vim.keymap.set('n', 'ss', builtin.builtin, { desc = '[S]earch [S]elect Telescope' }) vim.keymap.set('n', 'sw', builtin.grep_string, { desc = '[S]earch current [W]ord' }) vim.keymap.set('n', 'sg', builtin.live_grep, { desc = '[S]earch by [G]rep' }) @@ -533,8 +551,10 @@ require('lazy').setup({ -- For example, to see the options for `lua_ls`, you could go to: https://luals.github.io/wiki/settings/ local servers = { -- clangd = {}, - -- gopls = {}, + gopls = {}, -- pyright = {}, + -- intelephense = {}, + phpactor = {}, -- rust_analyzer = {}, -- ... etc. See `:help lspconfig-all` for a list of all the pre-configured LSPs -- @@ -723,12 +743,12 @@ require('lazy').setup({ -- change the command in the config to whatever the name of that colorscheme is -- -- If you want to see what colorschemes are already installed, you can use `:Telescope colorscheme` - 'folke/tokyonight.nvim', + 'catppuccin/nvim', lazy = false, -- make sure we load this during startup if it is your main colorscheme priority = 1000, -- make sure to load this before all the other start plugins config = function() -- Load the colorscheme here - vim.cmd.colorscheme 'tokyonight-night' + vim.cmd.colorscheme 'catppuccin' -- You can configure highlights by doing something like vim.cmd.hi 'Comment gui=none' @@ -799,16 +819,23 @@ require('lazy').setup({ -- Here are some example plugins that I've included in the kickstart repository. -- Uncomment any of the lines below to enable them (you will need to restart nvim). -- - -- require 'kickstart.plugins.debug', - -- require 'kickstart.plugins.indent_line', + require 'kickstart.plugins.debug', + require 'kickstart.plugins.indent_line', -- NOTE: The import below can automatically add your own plugins, configuration, etc from `lua/custom/plugins/*.lua` -- This is the easiest way to modularize your config. -- -- Uncomment the following line and add your plugins to `lua/custom/plugins/*.lua` to get going. -- For additional information see: :help lazy.nvim-lazy.nvim-structuring-your-plugins - -- { import = 'custom.plugins' }, + { import = 'custom.plugins' }, }, {}) -- The line beneath this is called `modeline`. See `:help modeline` -- vim: ts=2 sts=2 sw=2 et +-- +-- +-- Override default Grey Color Line Number with White +vim.cmd 'highlight LineNr guifg=#ffffff' + +-- Hopefully adds Clipboard Support +vim.o.clipboard = 'unnamedplus' diff --git a/lua/custom/plugins/configs/nvim-tree.lua b/lua/custom/plugins/configs/nvim-tree.lua new file mode 100644 index 00000000..77d12daa --- /dev/null +++ b/lua/custom/plugins/configs/nvim-tree.lua @@ -0,0 +1,829 @@ +local lib = require 'nvim-tree.lib' +local log = require 'nvim-tree.log' +local appearance = require 'nvim-tree.appearance' +local renderer = require 'nvim-tree.renderer' +local view = require 'nvim-tree.view' +local commands = require 'nvim-tree.commands' +local utils = require 'nvim-tree.utils' +local actions = require 'nvim-tree.actions' +local legacy = require 'nvim-tree.legacy' +local core = require 'nvim-tree.core' +local git = require 'nvim-tree.git' +local filters = require 'nvim-tree.explorer.filters' +local buffers = require 'nvim-tree.buffers' +local events = require 'nvim-tree.events' +local notify = require 'nvim-tree.notify' + +local _config = {} + +local M = { + init_root = '', +} + +--- Update the tree root to a directory or the directory containing +---@param path string relative or absolute +---@param bufnr number|nil +function M.change_root(path, bufnr) + -- skip if current file is in ignore_list + if type(bufnr) == 'number' then + local ft = vim.api.nvim_buf_get_option(bufnr, 'filetype') or '' + for _, value in pairs(_config.update_focused_file.ignore_list) do + if utils.str_find(path, value) or utils.str_find(ft, value) then + return + end + end + end + + -- don't find inexistent + if vim.fn.filereadable(path) == 0 then + return + end + + local cwd = core.get_cwd() + if cwd == nil then + return + end + + local vim_cwd = vim.fn.getcwd() + + -- test if in vim_cwd + if utils.path_relative(path, vim_cwd) ~= path then + if vim_cwd ~= cwd then + actions.root.change_dir.fn(vim_cwd) + end + return + end + -- test if in cwd + if utils.path_relative(path, cwd) ~= path then + return + end + + -- otherwise test M.init_root + if _config.prefer_startup_root and utils.path_relative(path, M.init_root) ~= path then + actions.root.change_dir.fn(M.init_root) + return + end + -- otherwise root_dirs + for _, dir in pairs(_config.root_dirs) do + dir = vim.fn.fnamemodify(dir, ':p') + if utils.path_relative(path, dir) ~= path then + actions.root.change_dir.fn(dir) + return + end + end + -- finally fall back to the folder containing the file + actions.root.change_dir.fn(vim.fn.fnamemodify(path, ':p:h')) +end + +function M.tab_enter() + if view.is_visible { any_tabpage = true } then + local bufname = vim.api.nvim_buf_get_name(0) + local ft = vim.api.nvim_buf_get_option(0, 'ft') + for _, filter in ipairs(M.config.tab.sync.ignore) do + if bufname:match(filter) ~= nil or ft:match(filter) ~= nil then + return + end + end + view.open { focus_tree = false } + renderer.draw() + end +end + +function M.open_on_directory() + local should_proceed = _config.hijack_directories.auto_open or view.is_visible() + if not should_proceed then + return + end + + local buf = vim.api.nvim_get_current_buf() + local bufname = vim.api.nvim_buf_get_name(buf) + if vim.fn.isdirectory(bufname) ~= 1 then + return + end + + actions.root.change_dir.force_dirchange(bufname, true) +end + +function M.place_cursor_on_node() + local ok, search = pcall(vim.fn.searchcount) + if ok and search and search.exact_match == 1 then + return + end + + local node = lib.get_node_at_cursor() + if not node or node.name == '..' then + return + end + node = utils.get_parent_of_group(node) + + local line = vim.api.nvim_get_current_line() + local cursor = vim.api.nvim_win_get_cursor(0) + local idx = vim.fn.stridx(line, node.name) + + if idx >= 0 then + vim.api.nvim_win_set_cursor(0, { cursor[1], idx }) + end +end + +---@return table +function M.get_config() + return M.config +end + +---@param disable_netrw boolean +---@param hijack_netrw boolean +local function manage_netrw(disable_netrw, hijack_netrw) + if hijack_netrw then + vim.cmd 'silent! autocmd! FileExplorer *' + vim.cmd 'autocmd VimEnter * ++once silent! autocmd! FileExplorer *' + end + if disable_netrw then + vim.g.loaded_netrw = 1 + vim.g.loaded_netrwPlugin = 1 + end +end + +---@param name string|nil +function M.change_dir(name) + if name then + actions.root.change_dir.fn(name) + end + + if _config.update_focused_file.enable then + actions.tree.find_file.fn() + end +end + +---@param opts table +local function setup_autocommands(opts) + local augroup_id = vim.api.nvim_create_augroup('NvimTree', { clear = true }) + local function create_nvim_tree_autocmd(name, custom_opts) + local default_opts = { group = augroup_id } + vim.api.nvim_create_autocmd(name, vim.tbl_extend('force', default_opts, custom_opts)) + end + + -- reset and draw (highlights) when colorscheme is changed + create_nvim_tree_autocmd('ColorScheme', { + callback = function() + appearance.setup() + view.reset_winhl() + renderer.draw() + end, + }) + + -- prevent new opened file from opening in the same window as nvim-tree + create_nvim_tree_autocmd('BufWipeout', { + pattern = 'NvimTree_*', + callback = function() + if not utils.is_nvim_tree_buf(0) then + return + end + if opts.actions.open_file.eject then + view._prevent_buffer_override() + else + view.abandon_current_window() + end + end, + }) + + create_nvim_tree_autocmd('BufWritePost', { + callback = function() + if opts.auto_reload_on_write and not opts.filesystem_watchers.enable then + actions.reloaders.reload_explorer() + end + end, + }) + + create_nvim_tree_autocmd('BufReadPost', { + callback = function(data) + -- update opened file buffers + if (filters.config.filter_no_buffer or renderer.config.highlight_opened_files ~= 'none') and vim.bo[data.buf].buftype == '' then + utils.debounce('Buf:filter_buffer', opts.view.debounce_delay, function() + actions.reloaders.reload_explorer() + end) + end + end, + }) + + create_nvim_tree_autocmd('BufUnload', { + callback = function(data) + -- update opened file buffers + if (filters.config.filter_no_buffer or renderer.config.highlight_opened_files ~= 'none') and vim.bo[data.buf].buftype == '' then + utils.debounce('Buf:filter_buffer', opts.view.debounce_delay, function() + actions.reloaders.reload_explorer() + end) + end + end, + }) + + create_nvim_tree_autocmd('User', { + pattern = { 'FugitiveChanged', 'NeogitStatusRefreshed' }, + callback = function() + if not opts.filesystem_watchers.enable and opts.git.enable then + actions.reloaders.reload_git() + end + end, + }) + + if opts.tab.sync.open then + create_nvim_tree_autocmd('TabEnter', { callback = vim.schedule_wrap(M.tab_enter) }) + end + if opts.hijack_cursor then + create_nvim_tree_autocmd('CursorMoved', { + pattern = 'NvimTree_*', + callback = function() + if utils.is_nvim_tree_buf(0) then + M.place_cursor_on_node() + end + end, + }) + end + if opts.sync_root_with_cwd then + create_nvim_tree_autocmd('DirChanged', { + callback = function() + M.change_dir(vim.loop.cwd()) + end, + }) + end + if opts.update_focused_file.enable then + create_nvim_tree_autocmd('BufEnter', { + callback = function() + utils.debounce('BufEnter:find_file', opts.view.debounce_delay, function() + actions.tree.find_file.fn() + end) + end, + }) + end + + if opts.hijack_directories.enable then + create_nvim_tree_autocmd({ 'BufEnter', 'BufNewFile' }, { callback = M.open_on_directory }) + end + + create_nvim_tree_autocmd('BufEnter', { + pattern = 'NvimTree_*', + callback = function() + if utils.is_nvim_tree_buf(0) then + if vim.fn.getcwd() ~= core.get_cwd() or (opts.reload_on_bufenter and not opts.filesystem_watchers.enable) then + actions.reloaders.reload_explorer() + end + end + end, + }) + + if opts.view.centralize_selection then + create_nvim_tree_autocmd('BufEnter', { + pattern = 'NvimTree_*', + callback = function() + vim.schedule(function() + vim.api.nvim_buf_call(0, function() + vim.cmd [[norm! zz]] + end) + end) + end, + }) + end + + if opts.diagnostics.enable then + create_nvim_tree_autocmd('DiagnosticChanged', { + callback = function() + log.line('diagnostics', 'DiagnosticChanged') + require('nvim-tree.diagnostics').update() + end, + }) + create_nvim_tree_autocmd('User', { + pattern = 'CocDiagnosticChange', + callback = function() + log.line('diagnostics', 'CocDiagnosticChange') + require('nvim-tree.diagnostics').update() + end, + }) + end + + if opts.view.float.enable and opts.view.float.quit_on_focus_loss then + create_nvim_tree_autocmd('WinLeave', { + pattern = 'NvimTree_*', + callback = function() + if utils.is_nvim_tree_buf(0) then + view.close() + end + end, + }) + end + + if opts.modified.enable then + create_nvim_tree_autocmd({ 'BufModifiedSet', 'BufWritePost' }, { + callback = function() + utils.debounce('Buf:modified', opts.view.debounce_delay, function() + buffers.reload_modified() + actions.reloaders.reload_explorer() + end) + end, + }) + end + + -- TODO #1545 remove similar check from view.resize + if vim.fn.has 'nvim-0.9' == 1 then + create_nvim_tree_autocmd('WinResized', { + callback = function() + if vim.v.event and vim.v.event.windows then + for _, winid in ipairs(vim.v.event.windows) do + if vim.api.nvim_win_is_valid(winid) and utils.is_nvim_tree_buf(vim.api.nvim_win_get_buf(winid)) then + events._dispatch_on_tree_resize(vim.api.nvim_win_get_width(winid)) + end + end + end + end, + }) + end +end + +local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS + on_attach = 'default', + hijack_cursor = false, + auto_reload_on_write = true, + disable_netrw = false, + hijack_netrw = true, + hijack_unnamed_buffer_when_opening = false, + root_dirs = {}, + prefer_startup_root = false, + sync_root_with_cwd = false, + reload_on_bufenter = false, + respect_buf_cwd = false, + select_prompts = false, + sort = { + sorter = 'name', + folders_first = true, + files_first = false, + }, + view = { + centralize_selection = false, + cursorline = true, + debounce_delay = 15, + side = 'left', + preserve_window_proportions = false, + number = false, + relativenumber = false, + signcolumn = 'yes', + width = 30, + float = { + enable = false, + quit_on_focus_loss = true, + open_win_config = { + relative = 'editor', + border = 'rounded', + width = 30, + height = 30, + row = 1, + col = 1, + }, + }, + }, + renderer = { + add_trailing = false, + group_empty = false, + full_name = false, + root_folder_label = ':~:s?$?/..?', + indent_width = 2, + special_files = { 'Cargo.toml', 'Makefile', 'README.md', 'readme.md' }, + symlink_destination = true, + highlight_git = 'none', + highlight_diagnostics = 'none', + highlight_opened_files = 'none', + highlight_modified = 'none', + highlight_bookmarks = 'none', + highlight_clipboard = 'name', + indent_markers = { + enable = false, + inline_arrows = true, + icons = { + corner = '└', + edge = '│', + item = '│', + bottom = '─', + none = ' ', + }, + }, + icons = { + web_devicons = { + file = { + enable = true, + color = true, + }, + folder = { + enable = false, + color = true, + }, + }, + git_placement = 'before', + modified_placement = 'after', + diagnostics_placement = 'signcolumn', + bookmarks_placement = 'signcolumn', + padding = ' ', + symlink_arrow = ' ➛ ', + show = { + file = true, + folder = true, + folder_arrow = true, + git = true, + modified = true, + diagnostics = true, + bookmarks = true, + }, + glyphs = { + default = '', + symlink = '', + bookmark = '󰆤', + modified = '●', + folder = { + arrow_closed = '', + arrow_open = '', + default = '', + open = '', + empty = '', + empty_open = '', + symlink = '', + symlink_open = '', + }, + git = { + unstaged = '✗', + staged = '✓', + unmerged = '', + renamed = '➜', + untracked = '★', + deleted = '', + ignored = '◌', + }, + }, + }, + }, + hijack_directories = { + enable = true, + auto_open = true, + }, + update_focused_file = { + enable = false, + update_root = false, + ignore_list = {}, + }, + system_open = { + cmd = '', + args = {}, + }, + git = { + enable = true, + show_on_dirs = true, + show_on_open_dirs = true, + disable_for_dirs = {}, + timeout = 400, + cygwin_support = false, + }, + diagnostics = { + enable = false, + show_on_dirs = false, + show_on_open_dirs = true, + debounce_delay = 50, + severity = { + min = vim.diagnostic.severity.HINT, + max = vim.diagnostic.severity.ERROR, + }, + icons = { + hint = '', + info = '', + warning = '', + error = '', + }, + }, + modified = { + enable = false, + show_on_dirs = true, + show_on_open_dirs = true, + }, + filters = { + enable = true, + git_ignored = true, + dotfiles = false, + git_clean = false, + no_buffer = false, + no_bookmark = false, + custom = {}, + exclude = {}, + }, + live_filter = { + prefix = '[FILTER]: ', + always_show_folders = true, + }, + filesystem_watchers = { + enable = true, + debounce_delay = 50, + ignore_dirs = {}, + }, + actions = { + use_system_clipboard = true, + change_dir = { + enable = true, + global = false, + restrict_above_cwd = false, + }, + expand_all = { + max_folder_discovery = 300, + exclude = {}, + }, + file_popup = { + open_win_config = { + col = 1, + row = 1, + relative = 'cursor', + border = 'shadow', + style = 'minimal', + }, + }, + open_file = { + quit_on_open = false, + eject = true, + resize_window = true, + window_picker = { + enable = true, + picker = 'default', + chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890', + exclude = { + filetype = { 'notify', 'packer', 'qf', 'diff', 'fugitive', 'fugitiveblame' }, + buftype = { 'nofile', 'terminal', 'help' }, + }, + }, + }, + remove_file = { + close_window = true, + }, + }, + trash = { + cmd = 'gio trash', + }, + tab = { + sync = { + open = false, + close = false, + ignore = {}, + }, + }, + notify = { + threshold = vim.log.levels.INFO, + absolute_path = true, + }, + help = { + sort_by = 'key', + }, + ui = { + confirm = { + remove = true, + trash = true, + default_yes = false, + }, + }, + experimental = {}, + log = { + enable = false, + truncate = false, + types = { + all = false, + config = false, + copy_paste = false, + dev = false, + diagnostics = false, + git = false, + profile = false, + watcher = false, + }, + }, +} -- END_DEFAULT_OPTS + +local function merge_options(conf) + return vim.tbl_deep_extend('force', DEFAULT_OPTS, conf or {}) +end + +local FIELD_SKIP_VALIDATE = { + open_win_config = true, +} + +local ACCEPTED_TYPES = { + on_attach = { 'function', 'string' }, + sort = { + sorter = { 'function', 'string' }, + }, + view = { + width = { + 'string', + 'function', + 'number', + 'table', + min = { 'string', 'function', 'number' }, + max = { 'string', 'function', 'number' }, + padding = { 'function', 'number' }, + }, + }, + renderer = { + group_empty = { 'boolean', 'function' }, + root_folder_label = { 'function', 'string', 'boolean' }, + }, + filters = { + custom = { 'function' }, + }, + actions = { + open_file = { + window_picker = { + picker = { 'function', 'string' }, + }, + }, + }, +} + +local ACCEPTED_STRINGS = { + sort = { + sorter = { 'name', 'case_sensitive', 'modification_time', 'extension', 'suffix', 'filetype' }, + }, + view = { + side = { 'left', 'right' }, + signcolumn = { 'yes', 'no', 'auto' }, + }, + renderer = { + highlight_git = { 'none', 'icon', 'name', 'all' }, + highlight_opened_files = { 'none', 'icon', 'name', 'all' }, + highlight_modified = { 'none', 'icon', 'name', 'all' }, + highlight_bookmarks = { 'none', 'icon', 'name', 'all' }, + highlight_diagnostics = { 'none', 'icon', 'name', 'all' }, + highlight_clipboard = { 'none', 'icon', 'name', 'all' }, + icons = { + git_placement = { 'before', 'after', 'signcolumn' }, + modified_placement = { 'before', 'after', 'signcolumn' }, + diagnostics_placement = { 'before', 'after', 'signcolumn' }, + bookmarks_placement = { 'before', 'after', 'signcolumn' }, + }, + }, + help = { + sort_by = { 'key', 'desc' }, + }, +} + +---@param conf table|nil +local function validate_options(conf) + local msg + + ---@param user any + ---@param def any + ---@param strs table + ---@param types table + ---@param prefix string + local function validate(user, def, strs, types, prefix) + -- if user's option is not a table there is nothing to do + if type(user) ~= 'table' then + return + end + + -- only compare tables with contents that are not integer indexed + if type(def) ~= 'table' or not next(def) or type(next(def)) == 'number' then + -- unless the field can be a table (and is not a table in default config) + if vim.tbl_contains(types, 'table') then + -- use a dummy default to allow all checks + def = {} + else + return + end + end + + for k, v in pairs(user) do + if not FIELD_SKIP_VALIDATE[k] then + local invalid + + if def[k] == nil and types[k] == nil then + -- option does not exist + invalid = string.format('Unknown option: %s%s', prefix, k) + elseif type(v) ~= type(def[k]) then + local expected + + if types[k] and #types[k] > 0 then + if not vim.tbl_contains(types[k], type(v)) then + expected = table.concat(types[k], '|') + end + else + expected = type(def[k]) + end + + if expected then + -- option is of the wrong type + invalid = string.format('Invalid option: %s%s. Expected %s, got %s', prefix, k, expected, type(v)) + end + elseif type(v) == 'string' and strs[k] and not vim.tbl_contains(strs[k], v) then + -- option has type `string` but value is not accepted + invalid = string.format("Invalid value for field %s%s: '%s'", prefix, k, v) + end + + if invalid then + if msg then + msg = string.format('%s\n%s', msg, invalid) + else + msg = invalid + end + user[k] = nil + else + validate(v, def[k], strs[k] or {}, types[k] or {}, prefix .. k .. '.') + end + end + end + end + + validate(conf, DEFAULT_OPTS, ACCEPTED_STRINGS, ACCEPTED_TYPES, '') + + if msg then + notify.warn(msg .. '\n\nsee :help nvim-tree-opts for available configuration options') + end +end + +--- Apply OS specific localisations to DEFAULT_OPTS +local function localise_default_opts() + if utils.is_macos or utils.is_windows then + DEFAULT_OPTS.trash.cmd = 'trash' + end +end + +function M.purge_all_state() + require('nvim-tree.watcher').purge_watchers() + view.close_all_tabs() + view.abandon_all_windows() + if core.get_explorer() ~= nil then + git.purge_state() + core.reset_explorer() + end +end + +---@param conf table|nil +function M.setup(conf) + if vim.fn.has 'nvim-0.8' == 0 then + notify.warn 'nvim-tree.lua requires Neovim 0.8 or higher' + return + end + + M.init_root = vim.fn.getcwd() + + localise_default_opts() + + legacy.migrate_legacy_options(conf or {}) + + validate_options(conf) + + local opts = merge_options(conf) + + local netrw_disabled = opts.disable_netrw or opts.hijack_netrw + + _config.root_dirs = opts.root_dirs + _config.prefer_startup_root = opts.prefer_startup_root + _config.update_focused_file = opts.update_focused_file + _config.hijack_directories = opts.hijack_directories + _config.hijack_directories.enable = _config.hijack_directories.enable and netrw_disabled + + manage_netrw(opts.disable_netrw, opts.hijack_netrw) + + M.config = opts + require('nvim-tree.notify').setup(opts) + require('nvim-tree.log').setup(opts) + + if log.enabled 'config' then + log.line('config', 'default config + user') + log.raw('config', '%s\n', vim.inspect(opts)) + end + + require('nvim-tree.actions').setup(opts) + require('nvim-tree.keymap').setup(opts) + require('nvim-tree.appearance').setup() + require('nvim-tree.diagnostics').setup(opts) + require('nvim-tree.explorer').setup(opts) + require('nvim-tree.git').setup(opts) + require('nvim-tree.git.utils').setup(opts) + require('nvim-tree.view').setup(opts) + require('nvim-tree.lib').setup(opts) + require('nvim-tree.renderer').setup(opts) + require('nvim-tree.live-filter').setup(opts) + require('nvim-tree.marks').setup(opts) + require('nvim-tree.buffers').setup(opts) + require('nvim-tree.help').setup(opts) + require('nvim-tree.watcher').setup(opts) + if M.config.renderer.icons.show.file and pcall(require, 'nvim-web-devicons') then + require('nvim-web-devicons').setup() + end + + setup_autocommands(opts) + + if vim.g.NvimTreeSetup ~= 1 then + -- first call to setup + commands.setup() + else + -- subsequent calls to setup + M.purge_all_state() + end + + vim.g.NvimTreeSetup = 1 + vim.api.nvim_exec_autocmds('User', { pattern = 'NvimTreeSetup' }) +end + +vim.g.NvimTreeRequired = 1 +vim.api.nvim_exec_autocmds('User', { pattern = 'NvimTreeRequired' }) + +return M diff --git a/lua/custom/plugins/keymaps.lua b/lua/custom/plugins/keymaps.lua new file mode 100644 index 00000000..22bcddc6 --- /dev/null +++ b/lua/custom/plugins/keymaps.lua @@ -0,0 +1,14 @@ +-- Map nt to toggle nvim-tree +vim.api.nvim_set_keymap('n', 't', ':NvimTreeToggle', { noremap = true, silent = true }) + +-- Map to switch focus between nvim-tree and code +vim.api.nvim_set_keymap('n', '', ':NvimTreeFocus', { noremap = true, silent = true }) + +-- Map 'a' to create a new file +vim.api.nvim_set_keymap('n', 'a', ':NvimTreeNewFile', { noremap = true, silent = true }) + +-- Map nd to delete selected file/directory +vim.api.nvim_set_keymap('n', 'C-S-D', ':NvimTreeDelete', { noremap = true, silent = true }) + +-- Map nr to rename selected file/directory +vim.api.nvim_set_keymap('n', 'r', ':NvimTreeRename', { noremap = true, silent = true }) diff --git a/lua/custom/plugins/init.lua b/lua/custom/plugins/plugins.lua similarity index 84% rename from lua/custom/plugins/init.lua rename to lua/custom/plugins/plugins.lua index be0eb9d8..28a524cd 100644 --- a/lua/custom/plugins/init.lua +++ b/lua/custom/plugins/plugins.lua @@ -2,4 +2,6 @@ -- I promise not to create any merge conflicts in this directory :) -- -- See the kickstart.nvim README for more information -return {} +return { + 'nvim-neotest/nvim-nio', +} diff --git a/lua/kickstart/health.lua b/lua/kickstart/plugins/health.lua similarity index 100% rename from lua/kickstart/health.lua rename to lua/kickstart/plugins/health.lua diff --git a/lua/kickstart/remap.lua b/lua/kickstart/remap.lua new file mode 100644 index 00000000..93d28fde --- /dev/null +++ b/lua/kickstart/remap.lua @@ -0,0 +1,2 @@ +-- Remap to avoid :Ex +vim.keymap.set('n', 'jf', vim.cmd.Ex)