feat: rename nvimtree.lua option and conform to new configuration format

This commit is contained in:
NotAShelf 2023-07-30 11:40:46 +03:00
parent 9a956161b3
commit 5c7546a8fa
No known key found for this signature in database
GPG key ID: 02D1DD3FA08B6B29
6 changed files with 1452 additions and 574 deletions

View file

@ -1,5 +1,5 @@
_: {
imports = [
./nvimtree-lua
./nvimtree
];
}

View file

@ -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)}
},
},
})
'';
};
}

View file

@ -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;
};
};
};
};
};
};
}

View file

@ -0,0 +1,293 @@
{
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.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 })
''
}
${
lib.optionalString (cfg.disableNetrw) ''
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 = {
width = ${nvim.lua.expToLua cfg.view.width},
centralize_selection = ${boolToString cfg.view.centralizeSelection},
cursorline = ${boolToString cfg.view.cursorline},
debounce_delay = ${toString cfg.view.debounceDelay},
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 = ${nvim.lua.expToLua cfg.view.float.openWinConfig},
},
},
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},
},
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}",
},
},
},
special_files = ${nvim.lua.listToLuaTable cfg.renderer.specialFiles},
symlink_destination = ${boolToString cfg.renderer.symlinkDestination},
},
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},
},
},
})'';
};
}

View file

@ -1,6 +1,6 @@
_: {
imports = [
./config.nix
./nvimtree-lua.nix
./nvimtree.nix
];
}

File diff suppressed because it is too large Load diff