{ config, lib, pkgs, ... }: let inherit (lib.strings) optionalString; inherit (lib.modules) mkIf mkMerge; inherit (lib.nvim.binds) mkBinding; inherit (lib.nvim.dag) entryAnywhere; inherit (lib.nvim.lua) toLuaObject; inherit (lib.nvim.binds) pushDownDefault; cfg = config.vim.filetree.nvimTree; self = import ./nvimtree.nix {inherit pkgs lib;}; inherit (self.options.vim.filetree.nvimTree) mappings; in { config = mkIf cfg.enable { vim.startPlugins = ["nvim-tree-lua"]; vim.maps.normal = mkMerge [ (mkBinding cfg.mappings.toggle ":NvimTreeToggle" mappings.toggle.description) (mkBinding cfg.mappings.refresh ":NvimTreeRefresh" mappings.refresh.description) (mkBinding cfg.mappings.findFile ":NvimTreeFindFile" mappings.findFile.description) (mkBinding cfg.mappings.focus ":NvimTreeFocus" mappings.focus.description) ]; vim.binds.whichKey.register = pushDownDefault { "t" = "+NvimTree"; }; vim.luaConfigRC.nvimtreelua = entryAnywhere '' ${ optionalString cfg.disableNetrw '' -- disable netrew completely vim.g.loaded_netrw = 1 vim.g.loaded_netrwPlugin = 1 '' } require'nvim-tree'.setup(${toLuaObject cfg.setupOpts}) ${ optionalString cfg.openOnSetup '' -- autostart behaviour -- Open on startup has been deprecated -- see https://github.com/nvim-tree/nvim-tree.lua/wiki/Open-At-Startup -- use a nix eval to dynamically insert the open on startup function local function open_nvim_tree(data) local IGNORED_FT = { "markdown", } -- buffer is a real file on the disk local real_file = vim.fn.filereadable(data.file) == 1 -- buffer is a [No Name] local no_name = data.file == "" and vim.bo[data.buf].buftype == "" -- &ft local filetype = vim.bo[data.buf].ft -- only files please if not real_file and not no_name then return end -- skip ignored filetypes if vim.tbl_contains(IGNORED_FT, filetype) then return end -- open the tree but don't focus it require("nvim-tree.api").tree.toggle({ focus = false }) end -- function to automatically open the tree on VimEnter vim.api.nvim_create_autocmd({ "VimEnter" }, { callback = open_nvim_tree }) '' } ''; }; }