mirror of
https://github.com/NotAShelf/nvf.git
synced 2024-11-01 11:01:15 +00:00
feat: rewrite nvimtree configuration and rename nvimTreeLua to nvimTree
WARNING: breaking change - see #109
This commit is contained in:
commit
f0dffff72e
11 changed files with 1432 additions and 594 deletions
|
@ -113,15 +113,8 @@ inputs: let
|
|||
};
|
||||
|
||||
vim.filetree = {
|
||||
nvimTreeLua = {
|
||||
nvimTree = {
|
||||
enable = true;
|
||||
renderer = {
|
||||
rootFolderLabel = null;
|
||||
};
|
||||
view = {
|
||||
width = 25;
|
||||
cursorline = false;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -218,7 +211,7 @@ inputs: let
|
|||
};
|
||||
|
||||
vim.session = {
|
||||
nvim-session-manager.enable = isMaximal;
|
||||
nvim-session-manager.enable = false;
|
||||
};
|
||||
|
||||
vim.gestures = {
|
||||
|
|
|
@ -43,7 +43,7 @@ https://github.com/notashelf[notashelf]:
|
|||
|
||||
* Added <<opt-vim.cursorlineOpt>> for configuring Neovim's cursorlineOpt.
|
||||
|
||||
* Added <<opt-vim.filetree.nvimTreeLua.view.cursorline>>, default false, to enable cursorline in nvimtre.
|
||||
* Added `filetree.nvimTreeLua.view.cursorline`, default false, to enable cursorline in nvimtre.
|
||||
|
||||
* Added Fidget.nvim support for the Catppuccin theme.
|
||||
|
||||
|
|
11
lib/lua.nix
11
lib/lua.nix
|
@ -13,12 +13,17 @@
|
|||
else "'${value}'";
|
||||
|
||||
# convert an expression to lua
|
||||
|
||||
expToLua = exp:
|
||||
if builtins.isList exp
|
||||
then listToLuaTable exp
|
||||
then listToLuaTable exp # if list, convert to lua table
|
||||
else if builtins.isAttrs exp
|
||||
then attrsetToLuaTable exp
|
||||
else ("\"" + builtins.toJSON exp + "\"");
|
||||
then attrsetToLuaTable exp # if attrs, convert to table
|
||||
else if builtins.isBool exp
|
||||
then lib.boolToString exp # if bool, convert to string
|
||||
else if builtins.isInt exp
|
||||
then builtins.toString exp # if int, convert to string
|
||||
else (builtins.toJSON exp); # otherwise jsonify the value and print as is
|
||||
|
||||
# convert list to a lua table
|
||||
listToLuaTable = list:
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
_: {
|
||||
imports = [
|
||||
./nvimtree-lua
|
||||
./nvimtree
|
||||
];
|
||||
}
|
||||
|
|
|
@ -1,145 +0,0 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
with builtins; let
|
||||
cfg = config.vim.filetree.nvimTreeLua;
|
||||
self = import ./nvimtree-lua.nix {
|
||||
inherit pkgs;
|
||||
lib = lib;
|
||||
};
|
||||
mappings = self.options.vim.filetree.nvimTreeLua.mappings;
|
||||
in {
|
||||
config = mkIf cfg.enable {
|
||||
vim.startPlugins = ["nvim-tree-lua"];
|
||||
|
||||
vim.maps.normal = mkMerge [
|
||||
(mkBinding cfg.mappings.toggle ":NvimTreeToggle<cr>" mappings.toggle.description)
|
||||
(mkBinding cfg.mappings.refresh ":NvimTreeRefresh<cr>" mappings.refresh.description)
|
||||
(mkBinding cfg.mappings.findFile ":NvimTreeFindFile<cr>" mappings.findFile.description)
|
||||
(mkBinding cfg.mappings.focus ":NvimTreeFocus<cr>" mappings.focus.description)
|
||||
];
|
||||
|
||||
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},
|
||||
cursorline = ${boolToString cfg.view.cursorline}
|
||||
},
|
||||
|
||||
git = {
|
||||
enable = ${boolToString cfg.git.enable},
|
||||
ignore = ${boolToString cfg.git.ignore},
|
||||
},
|
||||
|
||||
filesystem_watchers = {
|
||||
enable = ${boolToString cfg.filesystemWatchers.enable},
|
||||
},
|
||||
|
||||
actions = {
|
||||
change_dir = {
|
||||
global = ${boolToString cfg.actions.changeDir.global},
|
||||
},
|
||||
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},
|
||||
|
||||
root_folder_label = ${
|
||||
if cfg.renderer.rootFolderLabel == null
|
||||
then "false"
|
||||
else "''${toString cfg.rootFolderLabel}''"
|
||||
},
|
||||
},
|
||||
|
||||
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)}
|
||||
},
|
||||
},
|
||||
})
|
||||
'';
|
||||
};
|
||||
}
|
|
@ -1,427 +0,0 @@
|
|||
{
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
with builtins; {
|
||||
options.vim.filetree.nvimTreeLua = {
|
||||
enable = mkEnableOption "filetree via nvim-tree-lua" // {default = false;};
|
||||
|
||||
mappings = {
|
||||
toggle = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = "<C-n>";
|
||||
description = "Toggle NvimTree";
|
||||
};
|
||||
refresh = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = "<leader>tr";
|
||||
description = "Refresh NvimTree";
|
||||
};
|
||||
findFile = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = "<leader>tg";
|
||||
description = "Find file in NvimTree";
|
||||
};
|
||||
focus = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = "<leader>tf";
|
||||
description = "Focus NvimTree";
|
||||
};
|
||||
};
|
||||
|
||||
sortBy = mkOption {
|
||||
default = "name";
|
||||
description = "Sort by name or extension";
|
||||
type = types.enum ["name" "extension" "modification_time" "case_sensitive"];
|
||||
};
|
||||
|
||||
hideFiles = mkOption {
|
||||
default = ["node_modules" ".cache"];
|
||||
description = "Files to hide in the file view by default.";
|
||||
type = with types; listOf str;
|
||||
};
|
||||
|
||||
openOnSetup = mkOption {
|
||||
default = true;
|
||||
description = "Open when vim is started on a directory";
|
||||
type = types.bool;
|
||||
};
|
||||
|
||||
closeOnLastWindow = mkOption {
|
||||
default = true;
|
||||
description = "Close when tree is last window open";
|
||||
type = types.bool;
|
||||
};
|
||||
|
||||
ignoreFileTypes = mkOption {
|
||||
default = [];
|
||||
description = "Ignore file types";
|
||||
type = with types; listOf str;
|
||||
};
|
||||
|
||||
followBufferFile = mkOption {
|
||||
default = true;
|
||||
description = "Follow file that is in current buffer on tree";
|
||||
type = types.bool;
|
||||
};
|
||||
|
||||
indentMarkers = mkOption {
|
||||
default = true;
|
||||
description = "Show indent markers";
|
||||
type = types.bool;
|
||||
};
|
||||
|
||||
hideDotFiles = mkOption {
|
||||
default = false;
|
||||
description = "Hide dotfiles";
|
||||
type = types.bool;
|
||||
};
|
||||
|
||||
openTreeOnNewTab = mkOption {
|
||||
default = true;
|
||||
description = "Opens the tree view when opening a new tab";
|
||||
type = types.bool;
|
||||
};
|
||||
|
||||
disableNetRW = mkOption {
|
||||
default = false;
|
||||
description = "Disables netrw and replaces it with tree";
|
||||
type = types.bool;
|
||||
};
|
||||
|
||||
hijackNetRW = mkOption {
|
||||
default = true;
|
||||
description = "Prevents netrw from automatically opening when opening directories";
|
||||
type = types.bool;
|
||||
};
|
||||
|
||||
trailingSlash = mkOption {
|
||||
default = true;
|
||||
description = "Add a trailing slash to all folders";
|
||||
type = types.bool;
|
||||
};
|
||||
|
||||
groupEmptyFolders = mkOption {
|
||||
default = true;
|
||||
description = "Compact empty folders trees into a single item";
|
||||
type = types.bool;
|
||||
};
|
||||
|
||||
lspDiagnostics = mkOption {
|
||||
default = true;
|
||||
description = "Shows lsp diagnostics in the tree";
|
||||
type = types.bool;
|
||||
};
|
||||
|
||||
systemOpenCmd = mkOption {
|
||||
default = "${pkgs.xdg-utils}/bin/xdg-open";
|
||||
description = "The command used to open a file with the associated default program";
|
||||
type = types.str;
|
||||
};
|
||||
|
||||
updateCwd = mkOption {
|
||||
# updateCwd has been deprecated in favor of syncRootWithCwd
|
||||
# this option is kept for backwards compatibility
|
||||
default = true;
|
||||
description = "Updates the tree when changing nvim's directory (DirChanged event).";
|
||||
type = types.bool;
|
||||
};
|
||||
|
||||
ignore_ft_on_setup = mkOption {
|
||||
default = [];
|
||||
description = "Ignore file types on setup";
|
||||
type = with types; listOf str;
|
||||
};
|
||||
|
||||
hijackCursor = mkOption {
|
||||
default = false;
|
||||
description = "Hijack the cursor in the tree to put it at the start of the filename";
|
||||
type = types.bool;
|
||||
};
|
||||
|
||||
hijackUnnamedBufferWhenOpening = mkOption {
|
||||
default = false;
|
||||
description = "Open nvimtree in place of the unnamed buffer if it's empty.";
|
||||
type = types.bool;
|
||||
};
|
||||
|
||||
syncRootWithCwd = mkOption {
|
||||
default = true;
|
||||
description = "Changes the tree root directory on `DirChanged` and refreshes the tree";
|
||||
type = types.bool;
|
||||
};
|
||||
|
||||
updateFocusedFile = mkOption {
|
||||
default = {
|
||||
enable = true;
|
||||
update_cwd = true;
|
||||
};
|
||||
description = "Updates the tree when changing nvim's directory (DirChanged event).";
|
||||
type = with types; attrsOf (either bool (attrsOf bool));
|
||||
};
|
||||
|
||||
view = {
|
||||
adaptiveSize = mkOption {
|
||||
default = true;
|
||||
description = "Resize the tree when the window is resized";
|
||||
type = types.bool;
|
||||
};
|
||||
side = mkOption {
|
||||
default = "left";
|
||||
description = "Side the tree will appear on left or right";
|
||||
type = types.enum ["left" "right"];
|
||||
};
|
||||
width = mkOption {
|
||||
default = 35;
|
||||
description = "Width of the tree in charecters";
|
||||
type = types.int;
|
||||
};
|
||||
cursorline = mkOption {
|
||||
default = false;
|
||||
description = "Whether to display the cursor line in NvimTree";
|
||||
type = types.bool;
|
||||
};
|
||||
};
|
||||
|
||||
git = {
|
||||
enable = mkEnableOption "Git integration";
|
||||
ignore = mkOption {
|
||||
default = false;
|
||||
description = "Ignore files in git";
|
||||
type = types.bool;
|
||||
};
|
||||
};
|
||||
|
||||
filesystemWatchers = {
|
||||
enable = mkOption {
|
||||
default = true;
|
||||
description = "Enable filesystem watchers";
|
||||
type = types.bool;
|
||||
};
|
||||
};
|
||||
|
||||
actions = {
|
||||
changeDir = {
|
||||
global = mkOption {
|
||||
default = true;
|
||||
description = "Change directory when changing nvim's directory (DirChanged event).";
|
||||
type = types.bool;
|
||||
};
|
||||
};
|
||||
openFile = {
|
||||
resizeWindow = mkOption {
|
||||
default = true;
|
||||
description = "Resize the tree when opening a file";
|
||||
type = types.bool;
|
||||
};
|
||||
quitOnOpen = mkOption {
|
||||
default = false;
|
||||
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;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
renderer = {
|
||||
higlightGit = mkOption {
|
||||
default = false;
|
||||
description = "Highlight git related files";
|
||||
type = types.bool;
|
||||
};
|
||||
|
||||
highlightOpenedFiles = mkOption {
|
||||
default = "none";
|
||||
description = "Highlight opened files";
|
||||
type = types.enum ["none" "icon" "name" "all"];
|
||||
};
|
||||
|
||||
indentMarkers = mkOption {
|
||||
default = false;
|
||||
description = "Show indent markers";
|
||||
type = types.bool;
|
||||
};
|
||||
|
||||
showHiddenFiles = mkOption {
|
||||
default = true;
|
||||
description = "Show hidden files";
|
||||
type = types.bool;
|
||||
};
|
||||
|
||||
trailingSlash = mkOption {
|
||||
default = false;
|
||||
description = "Add a trailing slash to all folders";
|
||||
type = types.bool;
|
||||
};
|
||||
|
||||
showParentFolder = mkOption {
|
||||
default = false;
|
||||
description = "Show parent folder";
|
||||
type = types.bool;
|
||||
};
|
||||
|
||||
groupEmptyFolders = mkOption {
|
||||
default = false;
|
||||
description = "Compact empty folders trees into a single item";
|
||||
type = types.bool;
|
||||
};
|
||||
|
||||
rootFolderLabel = mkOption {
|
||||
default = null;
|
||||
description = "Root folder label. Set null to disable";
|
||||
type = with types; nullOr str;
|
||||
};
|
||||
|
||||
icons = {
|
||||
show = {
|
||||
file = mkOption {
|
||||
default = true;
|
||||
description = "Show file icons";
|
||||
type = types.bool;
|
||||
};
|
||||
folder = mkOption {
|
||||
default = true;
|
||||
description = "Show folder icons";
|
||||
type = types.bool;
|
||||
};
|
||||
folderArrow = mkOption {
|
||||
default = true;
|
||||
description = "Show folder arrow icons";
|
||||
type = types.bool;
|
||||
};
|
||||
git = mkOption {
|
||||
default = false;
|
||||
description = "Show git icons";
|
||||
type = types.bool;
|
||||
};
|
||||
};
|
||||
glyphs = {
|
||||
default = mkOption {
|
||||
default = "";
|
||||
description = "Default icon";
|
||||
type = types.str;
|
||||
};
|
||||
symlink = mkOption {
|
||||
default = "";
|
||||
description = "Symlink icon";
|
||||
type = types.str;
|
||||
};
|
||||
|
||||
folder = {
|
||||
default = mkOption {
|
||||
default = "";
|
||||
description = "Default folder icon";
|
||||
type = types.str;
|
||||
};
|
||||
open = mkOption {
|
||||
default = "";
|
||||
description = "Open folder icon";
|
||||
type = types.str;
|
||||
};
|
||||
empty = mkOption {
|
||||
default = "";
|
||||
description = "Empty folder icon";
|
||||
type = types.str;
|
||||
};
|
||||
emptyOpen = mkOption {
|
||||
default = "";
|
||||
description = "Empty open folder icon";
|
||||
type = types.str;
|
||||
};
|
||||
symlink = mkOption {
|
||||
default = "";
|
||||
description = "Symlink folder icon";
|
||||
type = types.str;
|
||||
};
|
||||
symlinkOpen = mkOption {
|
||||
default = "";
|
||||
description = "Symlink open folder icon";
|
||||
type = types.str;
|
||||
};
|
||||
arrowOpen = mkOption {
|
||||
default = "";
|
||||
description = "Open folder arrow icon";
|
||||
type = types.str;
|
||||
};
|
||||
arrowClosed = mkOption {
|
||||
default = "";
|
||||
description = "Closed folder arrow icon";
|
||||
type = types.str;
|
||||
};
|
||||
};
|
||||
|
||||
git = {
|
||||
unstaged = mkOption {
|
||||
default = "✗";
|
||||
description = "Unstaged git icon";
|
||||
type = types.str;
|
||||
};
|
||||
staged = mkOption {
|
||||
default = "✓";
|
||||
description = "Staged git icon";
|
||||
type = types.str;
|
||||
};
|
||||
unmerged = mkOption {
|
||||
default = "";
|
||||
description = "Unmerged git icon";
|
||||
type = types.str;
|
||||
};
|
||||
renamed = mkOption {
|
||||
default = "➜";
|
||||
description = "Renamed git icon";
|
||||
type = types.str;
|
||||
};
|
||||
untracked = mkOption {
|
||||
default = "★";
|
||||
description = "Untracked git icon";
|
||||
type = types.str;
|
||||
};
|
||||
deleted = mkOption {
|
||||
default = "";
|
||||
description = "Deleted git icon";
|
||||
type = types.str;
|
||||
};
|
||||
ignored = mkOption {
|
||||
default = "◌";
|
||||
description = "Ignored git icon";
|
||||
type = types.str;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
308
modules/filetree/nvimtree/config.nix
Normal file
308
modules/filetree/nvimtree/config.nix
Normal file
|
@ -0,0 +1,308 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
with builtins; let
|
||||
cfg = config.vim.filetree.nvimTree;
|
||||
self = import ./nvimtree.nix {
|
||||
inherit pkgs;
|
||||
lib = lib;
|
||||
};
|
||||
mappings = 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<cr>" mappings.toggle.description)
|
||||
(mkBinding cfg.mappings.refresh ":NvimTreeRefresh<cr>" mappings.refresh.description)
|
||||
(mkBinding cfg.mappings.findFile ":NvimTreeFindFile<cr>" mappings.findFile.description)
|
||||
(mkBinding cfg.mappings.focus ":NvimTreeFocus<cr>" mappings.focus.description)
|
||||
];
|
||||
|
||||
vim.luaConfigRC.nvimtreelua = nvim.dag.entryAnywhere ''
|
||||
${
|
||||
lib.optionalString (cfg.disableNetrw) ''
|
||||
-- disable netrew completely
|
||||
vim.g.loaded_netrw = 1
|
||||
vim.g.loaded_netrwPlugin = 1
|
||||
''
|
||||
}
|
||||
|
||||
require'nvim-tree'.setup({
|
||||
disable_netrw = ${boolToString cfg.disableNetrw},
|
||||
hijack_netrw = ${boolToString cfg.hijackNetrw},
|
||||
auto_reload_on_write = ${boolToString cfg.autoreloadOnWrite},
|
||||
|
||||
sort = {
|
||||
sorter = "${cfg.sort.sorter}",
|
||||
folders_first = ${boolToString cfg.sort.foldersFirst},
|
||||
},
|
||||
|
||||
hijack_unnamed_buffer_when_opening = ${boolToString cfg.hijackUnnamedBufferWhenOpening},
|
||||
hijack_cursor = ${boolToString cfg.hijackCursor},
|
||||
root_dirs = ${nvim.lua.listToLuaTable cfg.rootDirs},
|
||||
prefer_startup_root = ${boolToString cfg.preferStartupRoot},
|
||||
sync_root_with_cwd = ${boolToString cfg.syncRootWithCwd},
|
||||
reload_on_bufenter = ${boolToString cfg.reloadOnBufEnter},
|
||||
respect_buf_cwd = ${boolToString cfg.respectBufCwd},
|
||||
|
||||
hijack_directories = {
|
||||
enable = ${boolToString cfg.hijackDirectories.enable},
|
||||
auto_open = ${boolToString cfg.hijackDirectories.autoOpen},
|
||||
},
|
||||
|
||||
update_focused_file = {
|
||||
enable = ${boolToString cfg.updateFocusedFile.enable},
|
||||
update_root = ${boolToString cfg.updateFocusedFile.updateRoot},
|
||||
ignore_list = ${nvim.lua.listToLuaTable cfg.updateFocusedFile.ignoreList},
|
||||
},
|
||||
|
||||
system_open = {
|
||||
cmd = "${cfg.systemOpen.cmd}",
|
||||
args = ${nvim.lua.listToLuaTable cfg.systemOpen.args},
|
||||
},
|
||||
|
||||
diagnostics = {
|
||||
enable = ${boolToString cfg.diagnostics.enable},
|
||||
icons = {
|
||||
hint = "${cfg.diagnostics.icons.hint}",
|
||||
info = "${cfg.diagnostics.icons.info}",
|
||||
warning = "${cfg.diagnostics.icons.warning}",
|
||||
error = "${cfg.diagnostics.icons.error}",
|
||||
},
|
||||
|
||||
severity = {
|
||||
min = vim.diagnostic.severity.${cfg.diagnostics.severity.min},
|
||||
max = vim.diagnostic.severity.${cfg.diagnostics.severity.max},
|
||||
},
|
||||
},
|
||||
|
||||
git = {
|
||||
enable = ${boolToString cfg.git.enable},
|
||||
show_on_dirs = ${boolToString cfg.git.showOnDirs},
|
||||
show_on_open_dirs = ${boolToString cfg.git.showOnOpenDirs},
|
||||
disable_for_dirs = ${nvim.lua.listToLuaTable cfg.git.disableForDirs},
|
||||
timeout = ${toString cfg.git.timeout},
|
||||
},
|
||||
|
||||
modified = {
|
||||
enable = ${boolToString cfg.modified.enable},
|
||||
show_on_dirs = ${boolToString cfg.modified.showOnDirs},
|
||||
show_on_open_dirs = ${boolToString cfg.modified.showOnOpenDirs},
|
||||
},
|
||||
|
||||
filesystem_watchers = {
|
||||
enable = ${boolToString cfg.filesystemWatchers.enable},
|
||||
debounce_delay = ${toString cfg.filesystemWatchers.debounceDelay},
|
||||
ignore_dirs = ${nvim.lua.listToLuaTable cfg.filesystemWatchers.ignoreDirs},
|
||||
},
|
||||
|
||||
select_prompts = ${boolToString cfg.selectPrompts},
|
||||
|
||||
view = {
|
||||
centralize_selection = ${boolToString cfg.view.centralizeSelection},
|
||||
cursorline = ${boolToString cfg.view.cursorline},
|
||||
debounce_delay = ${toString cfg.view.debounceDelay},
|
||||
width = ${nvim.lua.expToLua cfg.view.width},
|
||||
side = "${cfg.view.side}",
|
||||
preserve_window_proportions = ${boolToString cfg.view.preserveWindowProportions},
|
||||
number = ${boolToString cfg.view.number},
|
||||
relativenumber = ${boolToString cfg.view.relativenumber},
|
||||
signcolumn = "${cfg.view.signcolumn}",
|
||||
float = {
|
||||
enable = ${boolToString cfg.view.float.enable},
|
||||
quit_on_focus_loss = ${boolToString cfg.view.float.quitOnFocusLoss},
|
||||
open_win_config = {
|
||||
relative = "${cfg.view.float.openWinConfig.relative}",
|
||||
border = "${cfg.view.float.openWinConfig.border}",
|
||||
width = ${toString cfg.view.float.openWinConfig.width},
|
||||
height = ${toString cfg.view.float.openWinConfig.height},
|
||||
row = ${toString cfg.view.float.openWinConfig.row},
|
||||
col = ${toString cfg.view.float.openWinConfig.col},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
renderer = {
|
||||
add_trailing = ${boolToString cfg.renderer.addTrailing},
|
||||
group_empty = ${boolToString cfg.renderer.groupEmpty},
|
||||
full_name = ${boolToString cfg.renderer.fullName},
|
||||
highlight_git = ${boolToString cfg.renderer.highlightGit},
|
||||
highlight_opened_files = ${cfg.renderer.highlightOpenedFiles},
|
||||
highlight_modified = ${cfg.renderer.highlightModified},
|
||||
root_folder_label = ${nvim.lua.expToLua cfg.renderer.rootFolderLabel},
|
||||
indent_width = ${toString cfg.renderer.indentWidth},
|
||||
indent_markers = {
|
||||
enable = ${boolToString cfg.renderer.indentMarkers.enable},
|
||||
inline_arrows = ${boolToString cfg.renderer.indentMarkers.inlineArrows},
|
||||
icons = ${nvim.lua.expToLua cfg.renderer.indentMarkers.icons},
|
||||
},
|
||||
|
||||
special_files = ${nvim.lua.listToLuaTable cfg.renderer.specialFiles},
|
||||
symlink_destination = ${boolToString cfg.renderer.symlinkDestination},
|
||||
|
||||
icons = {
|
||||
webdev_colors = ${boolToString cfg.renderer.icons.webdevColors},
|
||||
git_placement = "${cfg.renderer.icons.gitPlacement}",
|
||||
modified_placement = "${cfg.renderer.icons.modifiedPlacement}",
|
||||
padding = "${cfg.renderer.icons.padding}",
|
||||
symlink_arrow = "${cfg.renderer.icons.symlinkArrow}",
|
||||
|
||||
show = {
|
||||
git = ${boolToString cfg.renderer.icons.show.git},
|
||||
folder = ${boolToString cfg.renderer.icons.show.folder},
|
||||
folder_arrow = ${boolToString cfg.renderer.icons.show.folderArrow},
|
||||
file = ${boolToString cfg.renderer.icons.show.file},
|
||||
modified = ${boolToString cfg.renderer.icons.show.modified},
|
||||
},
|
||||
|
||||
glyphs = {
|
||||
default = "${cfg.renderer.icons.glyphs.default}",
|
||||
symlink = "${cfg.renderer.icons.glyphs.symlink}",
|
||||
modified = "${cfg.renderer.icons.glyphs.modified}",
|
||||
|
||||
folder = {
|
||||
default = "${cfg.renderer.icons.glyphs.folder.default}",
|
||||
open = "${cfg.renderer.icons.glyphs.folder.open}",
|
||||
arrow_open = "${cfg.renderer.icons.glyphs.folder.arrowOpen}",
|
||||
arrow_closed = "${cfg.renderer.icons.glyphs.folder.arrowClosed}",
|
||||
empty = "${cfg.renderer.icons.glyphs.folder.empty}",
|
||||
empty_open = "${cfg.renderer.icons.glyphs.folder.emptyOpen}",
|
||||
symlink = "${cfg.renderer.icons.glyphs.folder.symlink}",
|
||||
symlink_open = "${cfg.renderer.icons.glyphs.folder.symlinkOpen}",
|
||||
},
|
||||
|
||||
git = {
|
||||
unstaged = "${cfg.renderer.icons.glyphs.git.unstaged}",
|
||||
staged = "${cfg.renderer.icons.glyphs.git.staged}",
|
||||
unmerged = "${cfg.renderer.icons.glyphs.git.unmerged}",
|
||||
renamed = "${cfg.renderer.icons.glyphs.git.renamed}",
|
||||
untracked = "${cfg.renderer.icons.glyphs.git.untracked}",
|
||||
deleted = "${cfg.renderer.icons.glyphs.git.deleted}",
|
||||
ignored = "${cfg.renderer.icons.glyphs.git.ignored}",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
filters = {
|
||||
git_ignored = ${boolToString cfg.filters.gitIgnored},
|
||||
dotfiles = ${boolToString cfg.filters.dotfiles},
|
||||
git_clean = ${boolToString cfg.filters.gitClean},
|
||||
no_buffer = ${boolToString cfg.filters.noBuffer},
|
||||
exclude = ${nvim.lua.listToLuaTable cfg.filters.exclude},
|
||||
},
|
||||
|
||||
trash = {
|
||||
cmd = "${cfg.trash.cmd}",
|
||||
},
|
||||
|
||||
actions = {
|
||||
use_system_clipboard = ${boolToString cfg.actions.useSystemClipboard},
|
||||
change_dir = {
|
||||
enable = ${boolToString cfg.actions.changeDir.enable},
|
||||
global = ${boolToString cfg.actions.changeDir.global},
|
||||
restrict_above_cwd = ${boolToString cfg.actions.changeDir.restrictAboveCwd},
|
||||
},
|
||||
|
||||
expand_all = {
|
||||
max_folder_discovery = ${toString cfg.actions.expandAll.maxFolderDiscovery},
|
||||
exclude = ${nvim.lua.listToLuaTable cfg.actions.expandAll.exclude},
|
||||
},
|
||||
|
||||
file_popup = {
|
||||
open_win_config = ${nvim.lua.expToLua cfg.actions.filePopup.openWinConfig},
|
||||
},
|
||||
|
||||
open_file = {
|
||||
quit_on_open = ${boolToString cfg.actions.openFile.quitOnOpen},
|
||||
eject = ${boolToString cfg.actions.openFile.eject},
|
||||
resize_window = ${boolToString cfg.actions.openFile.resizeWindow},
|
||||
window_picker = {
|
||||
enable = ${boolToString cfg.actions.openFile.windowPicker.enable},
|
||||
picker = "${cfg.actions.openFile.windowPicker.picker}",
|
||||
chars = "${cfg.actions.openFile.windowPicker.chars}",
|
||||
exclude = {
|
||||
filetype = ${nvim.lua.listToLuaTable cfg.actions.openFile.windowPicker.exclude.filetype},
|
||||
buftype = ${nvim.lua.listToLuaTable cfg.actions.openFile.windowPicker.exclude.buftype},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
remove_file = {
|
||||
close_window = ${boolToString cfg.actions.removeFile.closeWindow},
|
||||
},
|
||||
},
|
||||
|
||||
live_filter = {
|
||||
prefix = "${cfg.liveFilter.prefix}",
|
||||
always_show_folders = ${boolToString cfg.liveFilter.alwaysShowFolders},
|
||||
},
|
||||
|
||||
tab = {
|
||||
sync = {
|
||||
open = ${boolToString cfg.tab.sync.open},
|
||||
close = ${boolToString cfg.tab.sync.close},
|
||||
ignore = ${nvim.lua.listToLuaTable cfg.tab.sync.ignore},
|
||||
},
|
||||
},
|
||||
|
||||
notify = {
|
||||
threshold = vim.log.levels.${cfg.notify.threshold},
|
||||
absolute_path = ${boolToString cfg.notify.absolutePath},
|
||||
},
|
||||
|
||||
ui = {
|
||||
confirm = {
|
||||
remove = ${boolToString cfg.ui.confirm.remove},
|
||||
trash = ${boolToString cfg.ui.confirm.trash},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
-- autostart behaviour
|
||||
${
|
||||
lib.optionalString (cfg.openOnSetup) ''
|
||||
-- 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 })
|
||||
''
|
||||
}
|
||||
'';
|
||||
};
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
_: {
|
||||
imports = [
|
||||
./config.nix
|
||||
./nvimtree-lua.nix
|
||||
./nvimtree.nix
|
||||
];
|
||||
}
|
1109
modules/filetree/nvimtree/nvimtree.nix
Normal file
1109
modules/filetree/nvimtree/nvimtree.nix
Normal file
File diff suppressed because it is too large
Load diff
|
@ -23,7 +23,7 @@ in {
|
|||
always_divide_middle = true,
|
||||
globalstatus = ${boolToString cfg.globalStatus},
|
||||
ignore_focus = {'NvimTree'},
|
||||
extensions = {${optionalString config.vim.filetree.nvimTreeLua.enable "'nvim-tree'"}},
|
||||
extensions = {${optionalString config.vim.filetree.nvimTree.enable "'nvim-tree'"}},
|
||||
refresh = {
|
||||
statusline = ${toString cfg.refresh.statusline},
|
||||
tabline = ${toString cfg.refresh.tabline},
|
||||
|
@ -60,11 +60,6 @@ in {
|
|||
}
|
||||
},
|
||||
''}
|
||||
extensions = {${
|
||||
if (config.vim.filetree.nvimTreeLua.enable)
|
||||
then "\"nvim-tree\""
|
||||
else ""
|
||||
}},
|
||||
}
|
||||
'';
|
||||
};
|
||||
|
|
|
@ -95,7 +95,7 @@ in {
|
|||
|
||||
${
|
||||
# TODO: This probably will need to be reworked for custom-keybinds
|
||||
if config.vim.filetree.nvimTreeLua.enable
|
||||
if config.vim.filetree.nvimTree.enable
|
||||
then ''
|
||||
-- NvimTree
|
||||
["<leader>t"] = { name = "+NvimTree" },
|
||||
|
|
Loading…
Reference in a new issue