nvim/.config/nvim/lua/plugins/editor/neotree.lua

-- nvim/.config/nvim/lua/plugins/editor/neotree.lua

return {
  "nvim-neo-tree/neo-tree.nvim",
  branch = "v3.x",
  cmd = "Neotree",
  dependencies = {
    "nvim-lua/plenary.nvim",
    "nvim-tree/nvim-web-devicons",
    "MunifTanjim/nui.nvim",
  },
  keys = {
    { "<leader>e", "<cmd>Neotree toggle<cr>",      desc = "neo-tree" },
    { "<leader>E", "<cmd>Neotree reveal<cr>",      desc = "reveal current file" },
    { "<leader>ge", "<cmd>Neotree git_status<cr>", desc = "git changes" },
    { "<leader>be", "<cmd>Neotree buffers<cr>",    desc = "buffer list" },
  },
  opts = {
    sources = { "filesystem", "buffers", "git_status" },
    close_if_last_window = true,
    popup_border_style = "rounded",
    enable_git_status = true,
    enable_diagnostics = true,
    default_component_configs = {
      indent = { with_markers = true, indent_marker = "│", last_indent_marker = "└" },
      icon   = { folder_closed = "", folder_open = "", folder_empty = "" },
      git_status = {
        symbols = {
          added = "+", modified = "~", deleted = "-",
          renamed = ">", untracked = "?", ignored = "!",
          unstaged = "U", staged = "S", conflict = "!",
        },
      },
    },
    window = {
      width = 32,
      mappings = {
        ["<cr>"] = "open",
        ["o"]    = "open",
        ["s"]    = "open_vsplit",
        ["S"]    = "open_split",
        ["H"]    = "toggle_hidden",
        ["P"]    = { "toggle_preview", config = { use_float = true } },
        ["/"]    = "fuzzy_finder",
      },
    },
    filesystem = {
      follow_current_file = { enabled = true },
      use_libuv_file_watcher = true,
      filtered_items = {
        visible = false,
        hide_dotfiles = false,
        hide_gitignored = true,
        hide_by_name = { "node_modules", ".DS_Store", "target" },
      },
    },
  },
}