mirror of
https://github.com/NotAShelf/neovim-flake.git
synced 2024-12-19 09:49:48 +01:00
feat: apply new module format to nvimtree
This commit is contained in:
parent
5ace8e9ba2
commit
e09ccfd014
4 changed files with 178 additions and 84 deletions
|
@ -1,10 +1,5 @@
|
|||
{
|
||||
pkgs,
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}: {
|
||||
_: {
|
||||
imports = [
|
||||
./nvimtreelua.nix
|
||||
./nvimtree-lua
|
||||
];
|
||||
}
|
||||
|
|
131
modules/filetree/nvimtree-lua/config.nix
Normal file
131
modules/filetree/nvimtree-lua/config.nix
Normal file
|
@ -0,0 +1,131 @@
|
|||
{
|
||||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
with builtins; let
|
||||
cfg = config.vim.filetree.nvimTreeLua;
|
||||
in {
|
||||
config = mkIf cfg.enable {
|
||||
vim.startPlugins = ["nvim-tree-lua"];
|
||||
|
||||
vim.nnoremap = {
|
||||
"<C-n>" = ":NvimTreeToggle<CR>";
|
||||
"<leader>tr" = ":NvimTreeRefresh<CR>";
|
||||
"<leader>tg" = ":NvimTreeFindFile<CR>";
|
||||
"<leader>tf" = ":NvimTreeFocus<CR>";
|
||||
};
|
||||
|
||||
vim.luaConfigRC.nvimtreelua = nvim.dag.entryAnywhere ''
|
||||
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
|
||||
|
||||
-- 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
|
||||
${
|
||||
# FIXME: this function is actually obslete due to the existence of the dashboard, I need to find an alternative logic
|
||||
if (cfg.openOnSetup)
|
||||
then ''
|
||||
vim.api.nvim_create_autocmd({ "VimEnter" }, { callback = open_nvim_tree })
|
||||
''
|
||||
else ""
|
||||
}
|
||||
|
||||
require'nvim-tree'.setup({
|
||||
sort_by = ${"'" + cfg.sortBy + "'"},
|
||||
disable_netrw = ${boolToString cfg.disableNetRW},
|
||||
hijack_netrw = ${boolToString cfg.hijackNetRW},
|
||||
hijack_cursor = ${boolToString cfg.hijackCursor},
|
||||
open_on_tab = ${boolToString cfg.openTreeOnNewTab},
|
||||
sync_root_with_cwd = ${boolToString cfg.syncRootWithCwd},
|
||||
update_focused_file = {
|
||||
enable = ${boolToString cfg.updateFocusedFile.enable},
|
||||
update_cwd = ${boolToString cfg.updateFocusedFile.update_cwd},
|
||||
},
|
||||
|
||||
view = {
|
||||
width = ${toString cfg.view.width},
|
||||
side = ${"'" + cfg.view.side + "'"},
|
||||
adaptive_size = ${boolToString cfg.view.adaptiveSize},
|
||||
hide_root_folder = ${boolToString cfg.view.hideRootFolder},
|
||||
},
|
||||
git = {
|
||||
enable = ${boolToString cfg.git.enable},
|
||||
ignore = ${boolToString cfg.git.ignore},
|
||||
},
|
||||
|
||||
filesystem_watchers = {
|
||||
enable = ${boolToString cfg.filesystemWatchers.enable},
|
||||
},
|
||||
|
||||
actions = {
|
||||
open_file = {
|
||||
quit_on_open = ${boolToString cfg.actions.openFile.quitOnOpen},
|
||||
resize_window = ${boolToString cfg.actions.openFile.resizeWindow},
|
||||
window_picker = {
|
||||
enable = ${boolToString cfg.actions.openFile.windowPicker.enable},
|
||||
chars = ${toString cfg.actions.openFile.windowPicker.chars},
|
||||
},
|
||||
},
|
||||
expand_all = {
|
||||
exclude = {
|
||||
${builtins.concatStringsSep "\n" (builtins.map (s: "\"" + s + "\",") cfg.actions.expandAll.exclude)}
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
renderer = {
|
||||
highlight_git = ${boolToString cfg.renderer.higlightGit},
|
||||
highlight_opened_files = ${"'" + cfg.renderer.highlightOpenedFiles + "'"},
|
||||
indent_markers = {
|
||||
enable = ${boolToString cfg.renderer.indentMarkers},
|
||||
},
|
||||
-- TODO: those two
|
||||
add_trailing = ${boolToString cfg.renderer.trailingSlash},
|
||||
group_empty = ${boolToString cfg.renderer.groupEmptyFolders},
|
||||
},
|
||||
|
||||
system_open = {
|
||||
cmd = ${"'" + cfg.systemOpenCmd + "'"},
|
||||
},
|
||||
diagnostics = {
|
||||
enable = ${boolToString cfg.lspDiagnostics},
|
||||
},
|
||||
filters = {
|
||||
dotfiles = ${boolToString cfg.hideDotFiles},
|
||||
custom = {
|
||||
${builtins.concatStringsSep "\n" (builtins.map (s: "\"" + s + "\",") cfg.hideFiles)}
|
||||
},
|
||||
},
|
||||
})
|
||||
'';
|
||||
};
|
||||
}
|
6
modules/filetree/nvimtree-lua/default.nix
Normal file
6
modules/filetree/nvimtree-lua/default.nix
Normal file
|
@ -0,0 +1,6 @@
|
|||
_: {
|
||||
imports = [
|
||||
./config.nix
|
||||
./nvimtree-lua.nix
|
||||
];
|
||||
}
|
|
@ -15,6 +15,12 @@ in {
|
|||
description = "Enable nvim-tree-lua";
|
||||
};
|
||||
|
||||
sortBy = mkOption {
|
||||
default = "name";
|
||||
description = "Sort by name or extension";
|
||||
type = types.enum ["name" "extension" "modification_time" "case_sensitive"];
|
||||
};
|
||||
|
||||
treeSide = mkOption {
|
||||
default = "left";
|
||||
description = "Side the tree will appear on left or right";
|
||||
|
@ -132,7 +138,7 @@ in {
|
|||
};
|
||||
|
||||
hijackCursor = mkOption {
|
||||
default = true;
|
||||
default = false;
|
||||
description = "Hijack the cursor in the tree to put it at the start of the filename";
|
||||
type = types.bool;
|
||||
};
|
||||
|
@ -211,6 +217,38 @@ in {
|
|||
description = "Quit the tree when opening a file";
|
||||
type = types.bool;
|
||||
};
|
||||
windowPicker = {
|
||||
enable = mkEnableOption "Window picker";
|
||||
|
||||
chars = mkOption {
|
||||
default = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
|
||||
description = "A string of chars used as identifiers by the window picker";
|
||||
type = types.str;
|
||||
};
|
||||
|
||||
/*
|
||||
# FIXME: Can't get this to place the list items in a lua table
|
||||
exclude = {
|
||||
fileType = mkOption {
|
||||
default = ["notify" "packer" "qf" "diff" "fugitive" "fugitiveblame"];
|
||||
description = "File types to exclude from window picker";
|
||||
type = with types; listOf str;
|
||||
};
|
||||
buftype = mkOption {
|
||||
default = ["nofile" "terminal" "help"];
|
||||
description = "Buffer types to exclude from window picker";
|
||||
type = with types; listOf str;
|
||||
};
|
||||
};
|
||||
*/
|
||||
};
|
||||
};
|
||||
expandAll = {
|
||||
exclude = mkOption {
|
||||
default = [];
|
||||
description = "Exclude files from expand all";
|
||||
type = with types; listOf str;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -280,7 +318,6 @@ in {
|
|||
type = types.bool;
|
||||
};
|
||||
};
|
||||
|
||||
glyphs = {
|
||||
default = mkOption {
|
||||
default = "";
|
||||
|
@ -377,79 +414,4 @@ in {
|
|||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
vim.startPlugins = ["nvim-tree-lua"];
|
||||
|
||||
vim.nnoremap = {
|
||||
"<C-n>" = ":NvimTreeToggle<CR>";
|
||||
"<leader>tr" = ":NvimTreeRefresh<CR>";
|
||||
"<leader>tg" = ":NvimTreeFindFile<CR>";
|
||||
"<leader>tf" = ":NvimTreeFocus<CR>";
|
||||
};
|
||||
|
||||
vim.luaConfigRC.nvimtreelua = nvim.dag.entryAnywhere ''
|
||||
require'nvim-tree'.setup({
|
||||
disable_netrw = ${boolToString cfg.disableNetRW},
|
||||
hijack_netrw = ${boolToString cfg.hijackNetRW},
|
||||
hijack_cursor = ${boolToString cfg.hijackCursor},
|
||||
open_on_tab = ${boolToString cfg.openTreeOnNewTab},
|
||||
-- FIXME: Open on startup has been deprecated
|
||||
-- needs an alternative, see https://github.com/nvim-tree/nvim-tree.lua/wiki/Open-At-Startup3
|
||||
-- open_on_setup = ${boolToString cfg.openOnSetup},
|
||||
-- open_on_setup_file = ${boolToString cfg.openOnSetup},
|
||||
sync_root_with_cwd = ${boolToString cfg.syncRootWithCwd},
|
||||
update_focused_file = {
|
||||
enable = ${boolToString cfg.updateFocusedFile.enable},
|
||||
update_cwd = ${boolToString cfg.updateFocusedFile.update_cwd},
|
||||
},
|
||||
|
||||
view = {
|
||||
width = ${toString cfg.view.width},
|
||||
side = ${"'" + cfg.view.side + "'"},
|
||||
adaptive_size = ${boolToString cfg.view.adaptiveSize},
|
||||
hide_root_folder = ${boolToString cfg.view.hideRootFolder},
|
||||
},
|
||||
git = {
|
||||
enable = ${boolToString cfg.git.enable},
|
||||
ignore = ${boolToString cfg.git.ignore},
|
||||
},
|
||||
|
||||
filesystem_watchers = {
|
||||
enable = ${boolToString cfg.filesystemWatchers.enable},
|
||||
},
|
||||
|
||||
actions = {
|
||||
open_file = {
|
||||
quit_on_open = ${boolToString cfg.actions.openFile.quitOnOpen},
|
||||
resize_window = ${boolToString cfg.actions.openFile.resizeWindow},
|
||||
},
|
||||
},
|
||||
|
||||
renderer = {
|
||||
highlight_git = ${boolToString cfg.renderer.higlightGit},
|
||||
highlight_opened_files = ${"'" + cfg.renderer.highlightOpenedFiles + "'"},
|
||||
indent_markers = {
|
||||
enable = ${boolToString cfg.renderer.indentMarkers},
|
||||
},
|
||||
-- TODO: those two
|
||||
add_trailing = ${boolToString cfg.renderer.trailingSlash},
|
||||
group_empty = ${boolToString cfg.renderer.groupEmptyFolders},
|
||||
},
|
||||
|
||||
system_open = {
|
||||
cmd = ${"'" + cfg.systemOpenCmd + "'"},
|
||||
},
|
||||
diagnostics = {
|
||||
enable = ${boolToString cfg.lspDiagnostics},
|
||||
},
|
||||
filters = {
|
||||
dotfiles = ${boolToString cfg.hideDotFiles},
|
||||
custom = {
|
||||
${builtins.concatStringsSep "\n" (builtins.map (s: "\"" + s + "\",") cfg.hideFiles)}
|
||||
},
|
||||
},
|
||||
})
|
||||
'';
|
||||
};
|
||||
}
|
Loading…
Reference in a new issue