local M = { 'nvim-tree/nvim-tree.lua', event = 'VeryLazy', } local function my_on_attach(bufnr) local api = require('nvim-tree.api') local function opts(desc) return { desc = 'nvim-tree: ' .. desc, buffer = bufnr, noremap = true, silent = true, nowait = true } end -- default mappings api.config.mappings.default_on_attach(bufnr) -- custom mappings vim.keymap.set('n', 'l', api.node.open.edit, opts('Open')) vim.keymap.set('n', 'o', api.node.open.edit, opts('Open')) vim.keymap.set('n', '', api.node.open.edit, opts('Open')) vim.keymap.set('n', 'v', api.node.open.vertical, opts('Open: Vertical Split')) vim.keymap.set('n', 'h', api.node.open.horizontal, opts('Open: Horizontal Split')) vim.keymap.set('n', 'h', api.node.navigate.parent_close, opts('Close Directory')) end function M.config() local wk = require('which-key') wk.register({ ['e'] = { 'NvimTreeToggle', 'Explorer' }, }) local icons = require('utils.icons') require('nvim-tree').setup({ hijack_netrw = false, sync_root_with_cwd = true, on_attach = my_on_attach, renderer = { add_trailing = false, group_empty = false, highlight_git = false, full_name = false, highlight_opened_files = 'none', root_folder_label = ':t', indent_width = 2, indent_markers = { enable = false, inline_arrows = true, icons = { corner = '└', edge = '│', item = '│', none = ' ', }, }, icons = { git_placement = 'before', padding = ' ', symlink_arrow = ' ➛ ', glyphs = { default = icons.ui.Text, symlink = icons.ui.FileSymlink, bookmark = icons.ui.BookMark, folder = { arrow_closed = icons.ui.ChevronRight, arrow_open = icons.ui.ChevronShortDown, default = icons.ui.Folder, open = icons.ui.FolderOpen, empty = icons.ui.EmptyFolder, empty_open = icons.ui.EmptyFolderOpen, symlink = icons.ui.FolderSymlink, symlink_open = icons.ui.FolderOpen, }, git = { unstaged = icons.git.FileUnstaged, staged = icons.git.FileStaged, unmerged = icons.git.FileUnmerged, renamed = icons.git.FileRenamed, untracked = icons.git.FileUntracked, deleted = icons.git.FileDeleted, ignored = icons.git.FileIgnored, }, }, }, special_files = { 'Cargo.toml', 'Makefile', 'README.md', 'readme.md' }, symlink_destination = true, }, update_focused_file = { enable = true, debounce_delay = 15, update_root = true, ignore_list = {}, }, diagnostics = { enable = true, 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 = icons.diagnostics.BoldHint, info = icons.diagnostics.BoldInformation, warning = icons.diagnostics.BoldWarning, error = icons.diagnostics.BoldError, }, }, }) end return M