mirror of
https://github.com/aminnairi/dotfiles.git
synced 2026-09-14 19:12:13 +02:00
176 lines
4.9 KiB
Lua
176 lines
4.9 KiB
Lua
local function use_nvim_tree_width(options)
|
|
if type(options) ~= "table" then
|
|
return
|
|
end
|
|
|
|
---@type number
|
|
local offset = options.offset
|
|
|
|
---@type number
|
|
local initial_width = options.initial_width
|
|
|
|
local initial_width_type = type(initial_width)
|
|
|
|
local on_width_updated = options.on_width_updated
|
|
|
|
if type(on_width_updated) ~= "function" then
|
|
on_width_updated = function() end
|
|
end
|
|
|
|
if type(offset) ~= "number" then
|
|
offset = 10
|
|
end
|
|
|
|
if initial_width_type ~= "number" and initial_width_type ~= "table" then
|
|
initial_width = 30
|
|
end
|
|
|
|
---@type number|table
|
|
local previous_width = initial_width
|
|
|
|
if initial_width_type ~= "number" then
|
|
previous_width = 30
|
|
end
|
|
|
|
---@type number|table
|
|
local width = initial_width
|
|
|
|
local function get_width()
|
|
return width
|
|
end
|
|
|
|
local function increment_width()
|
|
if type(width) == "table" then
|
|
width = previous_width
|
|
end
|
|
|
|
local new_width = width + offset
|
|
|
|
previous_width = new_width
|
|
width = new_width
|
|
|
|
on_width_updated(new_width)
|
|
end
|
|
|
|
local function decrement_width()
|
|
if type(width) == "table" then
|
|
width = previous_width
|
|
end
|
|
|
|
local new_width = width - offset
|
|
|
|
previous_width = new_width
|
|
width = new_width
|
|
|
|
on_width_updated(new_width)
|
|
end
|
|
|
|
local function dynamic_width()
|
|
width = {}
|
|
on_width_updated(width)
|
|
end
|
|
|
|
return get_width, increment_width, decrement_width, dynamic_width
|
|
end
|
|
|
|
return {
|
|
"nvim-tree/nvim-tree.lua",
|
|
dependencies = {
|
|
"nvim-tree/nvim-web-devicons",
|
|
},
|
|
config = function()
|
|
vim.g.loaded_netrw = 1
|
|
vim.g.loaded_netrwPlugin = 1
|
|
vim.opt.termguicolors = true
|
|
|
|
local nvimTreeApi = require("nvim-tree.api")
|
|
|
|
local get_width, increment_width, decrement_width, dynamic_width = use_nvim_tree_width({
|
|
offset = 5,
|
|
initial_width = 30,
|
|
on_width_updated = function(width)
|
|
vim.cmd.NvimTreeResize(width)
|
|
end
|
|
})
|
|
|
|
local function on_nvim_tree_attach(buffer)
|
|
local function opts(desc)
|
|
return { desc = "nvim-tree: " .. desc, buffer = buffer, noremap = true, silent = true, nowait = true }
|
|
end
|
|
|
|
-- default mappings
|
|
nvimTreeApi.config.mappings.default_on_attach(buffer)
|
|
|
|
-- custom mappings
|
|
vim.keymap.set('n', 'l', nvimTreeApi.node.open.edit, opts('Open file/directory'))
|
|
vim.keymap.set('n', 'h', nvimTreeApi.node.navigate.parent_close, opts('Help'))
|
|
end
|
|
|
|
require("nvim-tree").setup({
|
|
on_attach = on_nvim_tree_attach,
|
|
auto_reload_on_write = true,
|
|
sort_by = "case_sensitive",
|
|
filters = {
|
|
dotfiles = false,
|
|
},
|
|
notify = {
|
|
-- Notifies everything from the INFO severity to ERROR
|
|
threshold = vim.log.levels.INFO,
|
|
-- Notifies only the relative path instead of the absolute
|
|
absolute_path = false,
|
|
},
|
|
-- Move to the first letter of each folder/files instead of the beginning of the line
|
|
hijack_cursor = true,
|
|
-- Disable completely netrw, just in case
|
|
disable_netrw = true,
|
|
-- Reload the tree whenever a buffer is opened
|
|
reload_on_bufenter = true,
|
|
-- Allows using vim.ui.select for various operation instead of the defaut implementation
|
|
select_prompts = true,
|
|
view = {
|
|
-- dynamically get the width of the tree
|
|
width = get_width,
|
|
-- Always open the tree on the left side of the screen
|
|
side = "left",
|
|
-- Never display the number line for the tree
|
|
number = false,
|
|
},
|
|
renderer = {
|
|
-- Never add trailing slashes for folders name
|
|
add_trailing = false,
|
|
-- Never group directories in the tree for those that only have one child node
|
|
group_empty = false,
|
|
-- Never highlight any files in a special way
|
|
special_files = {},
|
|
-- Highlight files that have diagnostics
|
|
highlight_diagnostics = true
|
|
},
|
|
update_focused_file = {
|
|
-- Focus the file in the tree whenever it is focused in the editor
|
|
enable = true
|
|
},
|
|
diagnostics = {
|
|
-- Enable diagnostics for the tree
|
|
enable = true,
|
|
-- Show diagnostics for the parent folder of the incriminated file
|
|
show_on_dirs = true
|
|
}
|
|
})
|
|
|
|
local whichKey = require("which-key")
|
|
|
|
whichKey.add({
|
|
{ "<leader>n", group = "NvimTree" },
|
|
{ "<leader>nt", function() nvimTreeApi.tree.toggle() end, desc = "Toggle" },
|
|
{ "<leader>nf", function() nvimTreeApi.tree.focus() end, desc = "Focus" },
|
|
{ "<leader>ne", function() nvimTreeApi.tree.expand_all() end, desc = "Expand All" },
|
|
{ "<leader>nc", function() nvimTreeApi.tree.collapse_all() end, desc = "Collapse All" },
|
|
{ "<leader>nw", group = "Width" },
|
|
{ "<leader>nwi", increment_width, desc = "Increase" },
|
|
{ "<leader>nwd", decrement_width, desc = "Decrease" },
|
|
{ "<leader>nwa", dynamic_width, desc = "Decrease" },
|
|
{ "<leader>nt", function() nvimTreeApi.tree.toggle() end, desc = "Toggle" },
|
|
})
|
|
end,
|
|
}
|