vim.pack.add({ { src = 'https://github.com/nvim-neo-tree/neo-tree.nvim', version = vim.version.range('3') }, 'https://github.com/nvim-lua/plenary.nvim', 'https://github.com/MunifTanjim/nui.nvim', 'https://github.com/nvim-tree/nvim-web-devicons', 'https://github.com/antosha417/nvim-lsp-file-operations', 'https://github.com/3rd/image.nvim', { src = 'https://github.com/s1n7ax/nvim-window-picker', version = vim.version.range('2'), }, }) require('lsp-file-operations').setup() require('window-picker').setup({ filter_rules = { include_current_win = false, autoselect_one = true, bo = { filetype = { "neo-tree", "neo-tree-popup", "notify" }, buftype = { "terminal", "quickfix" }, }, }, }) require('neo-tree').setup({ vim.diagnostic.config({ signs = { text = { [vim.diagnostic.severity.ERROR] = '', [vim.diagnostic.severity.WARN] = '', [vim.diagnostic.severity.INFO] = '', [vim.diagnostic.severity.HINT] = '󰌵', }, } }), close_if_last_window = true, enable_git_status = true, enable_diagnostics = true, open_files_do_not_replace_types = { 'terminal', 'trouble', 'qf' }, open_files_using_relative_paths = false, sort_case_insensitive = true, sort_function = nil, default_component_configs = { container = { enable_character_fade = true, }, indent = { indent_size = 2, padding = 1, with_markers = true, indent_marker = '│', last_indent_marker = '└', highlight = 'NeoTreeIndentMarker', with_expanders = nil, expander_collapsed = '', expander_expanded = '', expander_highlight = 'NeoTreeExpander', }, icon = { folder_closed = '', folder_open = '', folder_empty = '󰜌', provider = function(icon, node, state) if node.type == 'file' or node.type == 'terminal' then local success, web_devicons = pcall(require, 'nvim-web-devicons') local name = node.type == 'terminal' and 'terminal' or node.name if success then local devicon, hl = web_devicons.get_icon(name) icon.text = devicon or icon.text icon.highlight = hl or icon.highlight end end end, default = '*', highlight = 'NeoTreeFileIcon', }, modified = { symbol = '[+]', highlight = 'NeoTreeModified', }, name = { trailing_slash = false, use_git_status_colors = true, highlight = 'NeoTreeFileName', }, git_status = { symbols = { added = '', modified = '', deleted = '✖', renamed = '󰁕', untracked = '', ignored = '', unstaged = '󰄱', staged = '', conflict = '', }, }, file_size = { enabled = true, width = 12, required_width = 64, }, type = { enabled = true, width = 10, required_width = 122, }, last_modified = { enabled = true, width = 20, required_width = 88, }, created = { enabled = true, width = 20, required_width = 110, }, symlink_target = { enabled = false, }, }, window = { position = 'left', width = 30, mapping_options = { noremap = true, nowait = true, }, mappings = { [''] = { 'toggle_node', nowait = false, }, ['<2-LeftMouse>'] = 'open', [''] = 'open', [''] = 'cancel', ['P'] = { 'toggle_preview', config = { use_float = true, use_image_nvim = true } }, ['l'] = 'focus_preview', ['S'] = 'open_split', ['s'] = 'open_vsplit', ['t'] = 'open_tabnew', ['w'] = 'open_with_window_picker', ['C'] = 'close_node', ['z'] = 'close_all_nodes', ['a'] = { 'add', config = { show_path = 'relative', }, }, ['A'] = 'add_directory', ['d'] = 'delete', ['r'] = 'rename', ['b'] = 'rename_basename', ['y'] = 'copy_to_clipboard', ['x'] = 'cut_to_clipboard', ['p'] = 'paste_from_clipboard', ['c'] = { 'copy', config = { show_path = 'relative' } }, ['m'] = { 'move', config = { show_path = 'relative' } }, ['q'] = 'close_window', ['R'] = 'refresh', ['?'] = 'show_help', ['<'] = 'prev_source', ['>'] = 'next_source', ['i'] = 'show_file_details', }, }, filesystem = { filtered_items = { visible = false, hide_dotfiles = true, hide_gitignored = true, hide_hidden = true, hide_by_name = { 'node_modules', '.next', '.vscode', '.idea', }, hide_by_pattern = { '*.meta', '*/src/*/tsconfig.json', }, always_show = { '.gitignored', }, always_show_by_pattern = { -- uses glob style patterns '.env*', }, never_show = { '.DS_Store', 'thumbs.db' }, never_show_by_pattern = {}, }, follow_current_file = { enabled = false, leave_dirs_open = false, }, group_empty_dirs = false, hijack_netrw_behavior = 'open_default', use_libuv_file_watcher = false, commands = { avante_add_files = function(state) local node = state.tree:get_node() local filepath = node:get_id() local relative_path = require('avante.utils').relative_path(filepath) local sidebar = require('avante').get() local open = sidebar:is_open() if not open then require('avante.api').ask() sidebar = require('avante').get() end sidebar.file_selector:add_selected_file(relative_path) if not open then sidebar.file_selector:remove_selected_file('neo-tree filesystem [1]') end end, }, window = { mappings = { [''] = 'navigate_up', ['.'] = 'set_root', ['H'] = 'toggle_hidden', ['/'] = 'fuzzy_finder', ['D'] = 'fuzzy_finder_directory', ['#'] = 'fuzzy_sorter', -- ['D'] = 'fuzzy_sorter_directory', ['f'] = 'filter_on_submit', [''] = 'clear_filter', ['[g'] = 'prev_git_modified', [']g'] = 'next_git_modified', ['o'] = { 'show_help', nowait = false, config = { title = 'Order by', prefix_key = 'o' }, }, ['oa'] = 'avante_add_files', ['oc'] = { 'order_by_created', nowait = false }, ['od'] = { 'order_by_diagnostics', nowait = false }, ['og'] = { 'order_by_git_status', nowait = false }, ['om'] = { 'order_by_modified', nowait = false }, ['on'] = { 'order_by_name', nowait = false }, ['os'] = { 'order_by_size', nowait = false }, ['ot'] = { 'order_by_type', nowait = false }, }, fuzzy_finder_mappings = { [''] = 'move_cursor_down', [''] = 'move_cursor_down', [''] = 'move_cursor_up', [''] = 'move_cursor_up', [''] = 'close', }, }, }, buffers = { follow_current_file = { enabled = true, leave_dirs_open = false, }, group_empty_dirs = true, show_unloaded = true, window = { mappings = { ['d'] = 'buffer_delete', ['bd'] = 'buffer_delete', [''] = 'navigate_up', ['.'] = 'set_root', ['o'] = { 'show_help', nowait = false, config = { title = 'Order by', prefix_key = 'o' }, }, ['oc'] = { 'order_by_created', nowait = false }, ['od'] = { 'order_by_diagnostics', nowait = false }, ['om'] = { 'order_by_modified', nowait = false }, ['on'] = { 'order_by_name', nowait = false }, ['os'] = { 'order_by_size', nowait = false }, ['ot'] = { 'order_by_type', nowait = false }, }, }, }, git_status = { window = { position = 'float', mappings = { ['A'] = 'git_add_all', ['gu'] = 'git_unstage_file', ['gU'] = 'git_undo_last_commit', ['ga'] = 'git_add_file', ['gr'] = 'git_revert_file', ['gc'] = 'git_commit', ['gp'] = 'git_push', ['gg'] = 'git_commit_and_push', ['o'] = { 'show_help', nowait = false, config = { title = 'Order by', prefix_key = 'o' }, }, ['oc'] = { 'order_by_created', nowait = false }, ['od'] = { 'order_by_diagnostics', nowait = false }, ['om'] = { 'order_by_modified', nowait = false }, ['on'] = { 'order_by_name', nowait = false }, ['os'] = { 'order_by_size', nowait = false }, ['ot'] = { 'order_by_type', nowait = false }, }, }, }, }) -- Neotree vim.keymap.set({'n', 'v', 'x' }, 't', ':Neotree toggle') vim.keymap.set({'n', 'v', 'x' }, 'T', ':Neotree focus')