Explore the source / nvim

Inside nvim.

Neovim modules, plugins, mappings, and shared theme. Browse the current public files here, or visit the nvim repository on GitHub.

nvim / main

lua/myconf/plugins/nvim-tree.lua

View on GitHub
return {
   "nvim-tree/nvim-tree.lua",
   -- dependencies = "nvim-tree/nvim-web-devicons",
   config = function()
      local nvimtree = require("nvim-tree")
      local shell = require("myconf.core.api").shell
      local key = vim.keymap

      vim.g.loaded_netrw = 1
      vim.g.loaded_netrwPlugin = 1

      local function custom_on_attach(bufnr)
         local api = require("nvim-tree.api")
         local function opts(desc)
            return {
               desc = "nvim-tree: " .. desc,
               buffer = bufnr,
               noremap = true,
               silent = true,
               nowait = true,
            }
         end
         api.config.mappings.default_on_attach(bufnr)

         local function reveal_in_file_manager()
            local node = api.tree.get_node_under_cursor()
            if node and node.absolute_path then
               shell.reveal_path(node.absolute_path)
            end
         end

         key.del("n", "<C-]>", { buffer = bufnr })
         key.del("n", "s", { buffer = bufnr })
         key.set("n", "<S-CR>", api.tree.change_root_to_node, opts("CD"))
         key.set("n", "<S-BS>", api.tree.change_root_to_parent, opts("Up"))
         key.set("n", "h", api.node.navigate.parent_close, opts("Close Directory"))
         key.set("n", "l", api.node.open.edit, opts("Open"))
         key.set("n", "o", api.node.run.system, opts("Open with default app"))
         key.set("n", "O", reveal_in_file_manager, opts("Reveal in file manager"))
      end

      nvimtree.setup({
         on_attach = custom_on_attach,

         view = {
            width = 35,
            relativenumber = false,
            number = false,
         },

         update_cwd = true, -- update nvim-tree root to cwd
         update_focused_file = { -- update the focused file on `nvim-tree`
            enable = true,
         },

         renderer = {
            add_trailing = true,
            indent_width = 2,
            full_name = true,
            root_folder_label = function(path)
               return vim.fn.fnamemodify(path, ":t")
            end,
            indent_markers = {
               enable = true,
               icons = {
                  item = "├",
               },
            },
            icons = {
               show = {
                  file = false,
                  folder = false,
                  git = true,
                  hidden = false,
               },

               git_placement = "after",
               glyphs = {
                  folder = {
                     arrow_closed = "\u{2013}", -- closed folder
                     arrow_open = "\u{00B7}", -- opened folder
                     default = "", -- icon for closed folders
                     open = "", -- icon for opened folders
                  },
                  git = {
                     unstaged = "✗",
                     staged = "✓",
                     unmerged = "",
                     renamed = "➜",
                     untracked = "?",
                     deleted = "-",
                     ignored = "◌",
                  },
               },
            },
         },

         -- disable window_picker for explorer to work well with window splits
         actions = {
            open_file = {
               window_picker = {
                  enable = false,
               },
            },
         },
         filters = {
            custom = { ".DS_Store", "node_modules/", ".git/" },
         },
         git = {
            ignore = false,
         },
      })

      -- set keymaps
      key.set("n", "<leader>ee", "<cmd>NvimTreeToggle<CR>", { desc = "Toggle file explorer" }) -- toggle file explorer
      key.set("n", "<leader>ef", "<cmd>NvimTreeFocus<CR>", { desc = "Focus file explorer" }) -- toggle file explorer on current file
      -- key.set("n", "<leader>ec", "<cmd>NvimTreeCollapse<CR>", { desc = "Collapse file explorer" }) -- collapse file explorer
      key.set("n", "<leader>er", "<cmd>NvimTreeRefresh<CR>", { desc = "Refresh file explorer" }) -- refresh file explorer
      key.set("n", "<leader>et", "<cmd>NvimTreeFindFile<CR>", { desc = "Find file in file explorer" })
   end,
}