return { 'nvim-neo-tree/neo-tree.nvim', dependencies = { 'nvim-lua/plenary.nvim', 'nvim-tree/nvim-web-devicons', -- not strictly required, but recommended 'MunifTanjim/nui.nvim', 's1n7ax/nvim-window-picker', }, lazy = false, -- neo-tree will lazily load itself opts = {}, config = function() vim.cmd([[ let g:neo_tree_remove_legacy_commands = 1 ]]) vim.api.nvim_set_keymap('', '', ':Neotree reveal', { silent = true }) require('window-picker').setup({ autoselect_one = true, include_current = false, filter_rules = { bo = { filetype = { 'neo-tree', 'neo-tree-popup', 'notify' }, buftype = { 'terminal', 'quickfix' }, }, }, selection_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', highlights = { statusline = { focused = { bg = '#519aba', }, unfocused = { bg = '#519aba', }, }, winbar = { focused = { bg = '#519aba', }, unfocused = { bg = '#519aba', }, }, }, }) require('neo-tree').setup({ default_component_configs = { icon = { folder_empty = '󰜌', folder_empty_open = '󰜌', }, git_status = { symbols = { renamed = '󰁕', unstaged = '󰄱', }, }, }, document_symbols = { kinds = { File = { icon = '󰈙', hl = 'Tag' }, Namespace = { icon = '󰌗', hl = 'Include' }, Package = { icon = '󰏖', hl = 'Label' }, Class = { icon = '󰌗', hl = 'Include' }, Property = { icon = '󰆧', hl = '@property' }, Enum = { icon = '󰒻', hl = '@number' }, Function = { icon = '󰊕', hl = 'Function' }, String = { icon = '󰀬', hl = 'String' }, Number = { icon = '󰎠', hl = 'Number' }, Array = { icon = '󰅪', hl = 'Type' }, Object = { icon = '󰅩', hl = 'Type' }, Key = { icon = '󰌋', hl = '' }, Struct = { icon = '󰌗', hl = 'Type' }, Operator = { icon = '󰆕', hl = 'Operator' }, TypeParameter = { icon = '󰊄', hl = 'Type' }, StaticMethod = { icon = '󰠄 ', hl = 'Function' }, }, }, close_if_last_window = true, -- Close Neo-tree if it is the last window left in the tab popup_border_style = 'rounded', enable_git_status = true, enable_diagnostics = false, sort_case_insensitive = false, sort_function = nil, default_component_configs = { container = { enable_character_fade = true, }, indent = { indent_size = 2, padding = 1, -- extra padding on left hand side -- indent guides with_markers = true, indent_marker = '│', last_indent_marker = '└', highlight = 'NeoTreeIndentMarker', -- expander config, needed for nesting files with_expanders = nil, -- if nil and file nesting is enabled, will enable expanders expander_collapsed = '', expander_expanded = '', expander_highlight = 'NeoTreeExpander', }, icon = { folder_closed = '', folder_open = '', folder_empty = '', default = '', highlight = 'NeoTreeFileIcon', }, modified = { symbol = '[+]', highlight = 'NeoTreeGitAdded', }, name = { trailing_slash = false, use_git_status_colors = true, highlight = 'NeoTreeFileName', }, git_status = { symbols = { added = '', modified = '', deleted = '✖', renamed = '󰁕', untracked = '', ignored = '', unstaged = '', staged = '', conflict = '', }, }, }, window = { position = 'left', width = 35, mapping_options = { noremap = true, nowait = true, }, mappings = { [''] = { 'toggle_node', nowait = false, }, [''] = 'revert_preview', ['P'] = { 'toggle_preview', config = { use_float = true } }, ['s'] = 'split_with_window_picker', ['v'] = 'vsplit_with_window_picker', ['t'] = 'open_tabnew', [''] = 'open_with_window_picker', ['<2-LeftMouse>'] = 'open_with_window_picker', ['C'] = 'close_node', ['z'] = 'close_all_nodes', ['a'] = { 'add', config = { show_path = 'absolute', }, }, ['d'] = 'delete', ['r'] = 'rename', ['y'] = 'copy_to_clipboard', ['x'] = 'cut_to_clipboard', ['p'] = 'paste_from_clipboard', ['c'] = 'copy', ['m'] = { 'move', config = { show_path = 'absolute', }, }, ['q'] = 'close_window', ['R'] = 'refresh', ['?'] = 'show_help', ['>'] = 'prev_source', ['<'] = 'next_source', }, }, nesting_rules = {}, filesystem = { filtered_items = { visible = false, -- when true, they will just be displayed differently than normal items hide_dotfiles = false, hide_gitignored = true, hide_by_name = { '.git' }, hide_by_pattern = {}, always_show = { 'node_modules' }, never_show = {}, never_show_by_pattern = {}, }, follow_current_file = { enabled = false }, -- This will find and focus the file in the active buffer every -- time the current file is changed while the tree is open. group_empty_dirs = false, -- when true, empty folders will be grouped together hijack_netrw_behavior = 'open_default', -- netrw disabled, opening a directory opens neo-tree -- in whatever position is specified in window.position -- "open_current", -- netrw disabled, opening a directory opens within the -- window like netrw would, regardless of window.position -- "disabled", -- netrw left alone, neo-tree does not handle opening dirs use_libuv_file_watcher = true, -- This will use the OS level file watchers to detect changes -- instead of relying on nvim autocmd events. window = { mappings = { [''] = 'navigate_up', ['.'] = 'set_root', ['H'] = 'toggle_hidden', ['/'] = 'fuzzy_finder', ['D'] = 'fuzzy_finder_directory', ['f'] = 'filter_on_submit', [''] = 'clear_filter', ['[g'] = 'prev_git_modified', [']g'] = 'next_git_modified', }, }, }, buffers = { follow_current_file = { enabled = true }, -- This will find and focus the file in the active buffer every -- time the current file is changed while the tree is open. group_empty_dirs = true, -- when true, empty folders will be grouped together show_unloaded = true, window = { mappings = { ['d'] = 'buffer_delete', [''] = 'navigate_up', ['.'] = 'set_root', }, }, }, git_status = { window = { position = 'float', mappings = { ['gA'] = 'git_add_all', ['gu'] = 'git_unstage_file', ['ga'] = 'git_add_file', ['gr'] = 'git_revert_file', ['gc'] = 'git_commit', ['gp'] = 'git_push', ['gg'] = 'git_commit_and_push', }, }, }, source_selector = { winbar = true, statusline = false, sources = { { source = 'filesystem', display_name = ' 󰉓 Files', }, { source = 'document_symbols', display_name = ' 󰈙 Symbols', }, { source = 'git_status', display_name = ' 󰊢 Git', }, }, }, }) end, }