local get_icon = require("astroui").get_icon return { "nvim-neo-tree/neo-tree.nvim", dependencies = { "MunifTanjim/nui.nvim" }, cmd = "Neotree", opts = { auto_clean_after_session_restore = true, close_if_last_window = false, source_selector = { winbar = false, content_layout = "center", }, default_component_configs = { indent = { indent_size = 2, padding = 1, -- extra padding on left hand side with_markers = true, indent_marker = "│", last_indent_marker = "└", highlight = "NeoTreeIndentMarker", with_expanders = nil, -- if nil and file nesting is enabled, will enable expanders expander_collapsed = "", expander_expanded = "", expander_highlight = "NeoTreeExpander", }, modified = { symbol = get_icon "FileModified" }, name = { trailing_slash = false, use_git_status_colors = true, highlight = "NeoTreeFileName", }, git_status = { symbols = { added = get_icon "GitAdd", deleted = get_icon "GitDelete", modified = get_icon "GitChange", renamed = get_icon "GitRenamed", untracked = "", ignored = get_icon "GitIgnored", unstaged = get_icon "GitUnstaged", staged = get_icon "GitStaged", conflict = get_icon "GitConflict", }, }, }, window = { width = 35, mappings = { [""] = false, -- disable space until we figure out which-key disabling ["[b"] = "prev_source", ["]b"] = "next_source", o = "open", O = "system_open", h = "parent_or_close", l = "child_or_open", Y = "copy_selector", }, }, filesystem = { filtered_items = { visible = true, -- when true, they will just be displayed differently than normal items hide_dotfiles = false, hide_gitignored = false, hide_hidden = false, -- only works on Windows for hidden files/directories hide_by_name = { --"node_modules" }, hide_by_pattern = { -- uses glob style patterns --"*.meta", --"*/src/*/tsconfig.json", "*_templ.go", }, always_show = { -- remains visible even if other settings would normally hide it --".gitignored", }, 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 = true, }, hijack_netrw_behavior = "open_current", use_libuv_file_watcher = true, commands = { delete = function(state) local tree = state.tree local node = tree:get_node() local log = require "neo-tree.log" local inputs = require "neo-tree.ui.inputs" local msg = string.format("Are you sure you want to delete '%s'?", node.name) local do_delete_ = function(confirmed) if not confirmed then return end vim.fn.system { "gio", "trash", node.path } end if node.type == "file" or node.type == "directory" then inputs.confirm(msg, do_delete_) else log.warn "The `delete` command can only be used on files and directories" end end, delete_visual = function(state, selected_nodes) local paths_to_delete = {} local inputs = require "neo-tree.ui.inputs" for _, node_to_delete in pairs(selected_nodes) do if node_to_delete.type == "file" or node_to_delete.type == "directory" then table.insert(paths_to_delete, node_to_delete.path) end end local msg = "Are you sure you want to delete " .. #paths_to_delete .. " items?" local do_delete_ = function(confirmed) if not confirmed then return end for _, path in pairs(paths_to_delete) do vim.fn.system { "gio", "trash", path } end end inputs.confirm(msg, do_delete_) end, }, }, 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 = { ["bd"] = "buffer_delete", [""] = "navigate_up", ["."] = "set_root", }, }, }, event_handlers = { { event = "neo_tree_buffer_enter", handler = function(_) vim.opt_local.signcolumn = "auto" end, }, }, }, }