-- Neo-tree is a Neovim plugin to browse the file system -- https://github.com/nvim-neo-tree/neo-tree.nvim ---@module 'lazy' ---@type LazySpec return { 'nvim-neo-tree/neo-tree.nvim', version = '*', dependencies = { 'nvim-lua/plenary.nvim', 'nvim-tree/nvim-web-devicons', -- not strictly required, but recommended 'MunifTanjim/nui.nvim', }, lazy = false, keys = { { '\\', ':Neotree reveal', desc = 'NeoTree reveal', silent = true }, }, ---@module 'neo-tree' ---@type neotree.Config opts = { filesystem = { window = { position = 'left', width = 40, mapping_options = { noremap = true, nowait = true, }, mappings = { [''] = { 'toggle_node', nowait = false, -- disable `nowait` if you have existing combos starting with this char that you want to use }, ['<2-LeftMouse>'] = 'open', [''] = 'open', [''] = 'cancel', -- close preview or floating neo-tree window ['P'] = { 'toggle_preview', config = { use_float = true, use_snacks_image = true, use_image_nvim = true, }, }, -- Read `# Preview Mode` for more information ['l'] = 'focus_preview', ['S'] = 'open_split', ['s'] = 'open_vsplit', -- ["S"] = "split_with_window_picker", -- ["s"] = "vsplit_with_window_picker", ['t'] = 'open_tabnew', -- [""] = "open_drop", -- ["t"] = "open_tab_drop", ['w'] = 'open_with_window_picker', --["P"] = "toggle_preview", -- enter preview mode, which shows the current node without focusing ['C'] = 'close_node', -- ['C'] = 'close_all_subnodes', ['z'] = 'close_all_nodes', --["Z"] = "expand_all_nodes", --["Z"] = "expand_all_subnodes", ['a'] = { 'add', -- this command supports BASH style brace expansion ("x{a,b,c}" -> xa,xb,xc). see `:h neo-tree-file-actions` for details -- some commands may take optional config options, see `:h neo-tree-mappings` for details config = { show_path = 'none', -- "none", "relative", "absolute" }, }, ['A'] = 'add_directory', -- also accepts the optional config.show_path option like "add". this also supports BASH style brace expansion. ['d'] = 'delete', ['r'] = 'rename', ['b'] = 'rename_basename', ['y'] = 'copy_to_clipboard', ['x'] = 'cut_to_clipboard', ['p'] = 'paste_from_clipboard', [''] = 'clear_clipboard', ['c'] = 'copy', -- takes text input for destination, also accepts the optional config.show_path option like "add": -- ["c"] = { -- "copy", -- config = { -- show_path = "none" -- "none", "relative", "absolute" -- } --} ['m'] = 'move', -- takes text input for destination, also accepts the optional config.show_path option like "add". ['q'] = 'close_window', ['R'] = 'refresh', ['?'] = 'show_help', ['<'] = 'prev_source', ['>'] = 'next_source', ['i'] = 'show_file_details', -- ["i"] = { -- "show_file_details", -- -- format strings of the timestamps shown for date created and last modified (see `:h os.date()`) -- -- both options accept a string or a function that takes in the date in seconds and returns a string to display -- -- config = { -- -- created_format = "%Y-%m-%d %I:%M %p", -- -- modified_format = "relative", -- equivalent to the line below -- -- modified_format = function(seconds) return require('neo-tree.utils').relative_date(seconds) end -- -- } -- }, }, }, nesting_rules = {}, filesystem = { filtered_items = { visible = false, -- when true, they will just be displayed differently than normal items hide_dotfiles = true, hide_gitignored = true, hide_ignored = true, -- hide files that are ignored by other gitignore-like files -- other gitignore-like files, in descending order of precedence. ignore_files = { '.neotreeignore', '.ignore', -- ".rgignore" }, hide_hidden = true, -- only works on Windows for hidden files/directories hide_by_name = { --"node_modules" }, hide_by_pattern = { -- uses glob style patterns --"*.meta", --"*/src/*/tsconfig.json", }, always_show = { -- remains visible even if other settings would normally hide it --".gitignored", }, always_show_by_pattern = { -- uses glob style patterns --".env*", }, never_show = { -- remains hidden even if visible is toggled to true, this overrides always_show --".DS_Store", --"thumbs.db" }, never_show_by_pattern = { -- uses glob style patterns --".null-ls_*", }, }, 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. leave_dirs_open = false, -- `false` closes auto expanded dirs, such as with `:Neotree reveal` }, 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 = false, -- This will use the OS level file watchers to detect changes -- instead of relying on nvim autocmd events. hide_by_name = { 'node_modules', '.DS_Store', }, window = { mappings = { [''] = 'navigate_up', ['.'] = 'set_root', ['H'] = 'toggle_hidden', ['/'] = 'fuzzy_finder', ['D'] = 'fuzzy_finder_directory', ['#'] = 'fuzzy_sorter', -- fuzzy sorting using the fzy algorithm -- ["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' }, }, ['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 }, -- [''] = function(state) ... end, ['\\'] = 'close_window', ['e'] = 'close_window', }, fuzzy_finder_mappings = { -- define keymaps for filter popup window in fuzzy_finder_mode [''] = 'move_cursor_down', [''] = 'move_cursor_down', [''] = 'move_cursor_up', [''] = 'move_cursor_up', [''] = 'close', [''] = 'close_keep_filter', [''] = 'close_clear_filter', [''] = { '', raw = true }, { -- normal mode mappings n = { ['j'] = 'move_cursor_down', ['k'] = 'move_cursor_up', [''] = 'close_keep_filter', [''] = 'close_clear_filter', [''] = 'close', }, }, -- [""] = "noop", -- if you want to use normal mode -- ["key"] = function(state, scroll_padding) ... end, }, }, commands = {}, -- Add a custom command or override a global one using the same function name }, 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. leave_dirs_open = false, -- `false` closes auto expanded dirs, such as with `:Neotree reveal` }, group_empty_dirs = true, -- when true, empty folders will be grouped together 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', ['gt'] = 'git_toggle_file_stage', ['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 }, }, }, }, }, keys = { { '\\', ':Neotree reveal position=right', desc = 'NeoTree reveal', silent = true }, { 'e', ':Neotree reveal position=right', desc = 'NeoTree reveal', silent = true }, }, }, { 'antosha417/nvim-lsp-file-operations', dependencies = { 'nvim-lua/plenary.nvim', 'nvim-neo-tree/neo-tree.nvim', -- makes sure that this loads after Neo-tree. }, config = function() require('lsp-file-operations').setup() end, }, { 's1n7ax/nvim-window-picker', version = '2.*', config = function() require('window-picker').setup { filter_rules = { include_current_win = false, autoselect_one = true, -- filter using buffer options bo = { -- if the file type is one of following, the window will be ignored filetype = { 'neo-tree', 'neo-tree-popup', 'notify' }, -- if the buffer type is one of following, the window will be ignored buftype = { 'terminal', 'quickfix' }, }, }, } end, }, }