plugins/neo-tree: cleaning

This commit is contained in:
Gaetan Lepage 2023-11-23 16:25:30 +01:00 committed by Gaétan Lepage
parent 578b1acc71
commit 3da7758bc0

View file

@ -32,8 +32,7 @@ in {
defaults defaults
"Mapping options"; "Mapping options";
mkWindowMappingsOption = defaults: mkWindowMappingsOption = defaults: {
helpers.mkCompositeOption "Window options" {
mappings = mkMappingsOption defaults; mappings = mkMappingsOption defaults;
}; };
@ -96,9 +95,7 @@ in {
gitStatusAsync = helpers.defaultNullOpts.mkBool true ""; gitStatusAsync = helpers.defaultNullOpts.mkBool true "";
gitStatusAsyncOptions = gitStatusAsyncOptions = {
helpers.mkCompositeOption
"These options are for people with VERY large git repos" {
batchSize = batchSize =
helpers.defaultNullOpts.mkInt 1000 helpers.defaultNullOpts.mkInt 1000
"How many lines of git status results to process at a time"; "How many lines of git status results to process at a time";
@ -308,7 +305,7 @@ in {
}; };
eventHandlers = eventHandlers =
helpers.mkNullOrOption helpers.mkNullOrOption
(types.attrsOf types.str) (with types; attrsOf str)
'' ''
Configuration of event handlers. Configuration of event handlers.
Attrs: Attrs:
@ -334,8 +331,8 @@ in {
``` ```
''; '';
defaultComponentConfigs = helpers.mkCompositeOption "Configuration for default components." { defaultComponentConfigs = {
container = helpers.mkCompositeOption "Container options" { container = {
enableCharacterFade = helpers.defaultNullOpts.mkBool true ""; enableCharacterFade = helpers.defaultNullOpts.mkBool true "";
width = helpers.defaultNullOpts.mkStr "100%" ""; width = helpers.defaultNullOpts.mkStr "100%" "";
@ -343,8 +340,8 @@ in {
rightPadding = helpers.defaultNullOpts.mkInt 0 ""; rightPadding = helpers.defaultNullOpts.mkInt 0 "";
}; };
diagnostics = helpers.mkCompositeOption "diagnostics" { diagnostics = {
symbols = helpers.mkCompositeOption "symbols" { symbols = {
hint = helpers.defaultNullOpts.mkStr "H" ""; hint = helpers.defaultNullOpts.mkStr "H" "";
info = helpers.defaultNullOpts.mkStr "I" ""; info = helpers.defaultNullOpts.mkStr "I" "";
@ -354,7 +351,7 @@ in {
error = helpers.defaultNullOpts.mkStr "X" ""; error = helpers.defaultNullOpts.mkStr "X" "";
}; };
highlights = helpers.mkCompositeOption "highlights" { highlights = {
hint = helpers.defaultNullOpts.mkStr "DiagnosticSignHint" ""; hint = helpers.defaultNullOpts.mkStr "DiagnosticSignHint" "";
info = helpers.defaultNullOpts.mkStr "DiagnosticSignInfo" ""; info = helpers.defaultNullOpts.mkStr "DiagnosticSignInfo" "";
@ -365,7 +362,7 @@ in {
}; };
}; };
indent = helpers.mkCompositeOption "indent" { indent = {
indentSize = helpers.defaultNullOpts.mkInt 2 ""; indentSize = helpers.defaultNullOpts.mkInt 2 "";
padding = helpers.defaultNullOpts.mkInt 1 ""; padding = helpers.defaultNullOpts.mkInt 1 "";
@ -409,13 +406,13 @@ in {
''; '';
}; };
modified = helpers.mkCompositeOption "modified" { modified = {
symbol = helpers.defaultNullOpts.mkStr "[+] " ""; symbol = helpers.defaultNullOpts.mkStr "[+] " "";
highlight = helpers.defaultNullOpts.mkStr "NeoTreeModified" ""; highlight = helpers.defaultNullOpts.mkStr "NeoTreeModified" "";
}; };
name = helpers.mkCompositeOption "name" { name = {
trailingSlash = helpers.defaultNullOpts.mkBool false ""; trailingSlash = helpers.defaultNullOpts.mkBool false "";
useGitStatusColors = helpers.defaultNullOpts.mkBool true ""; useGitStatusColors = helpers.defaultNullOpts.mkBool true "";
@ -423,14 +420,8 @@ in {
highlight = helpers.defaultNullOpts.mkStr "NeoTreeFileName" ""; highlight = helpers.defaultNullOpts.mkStr "NeoTreeFileName" "";
}; };
gitStatus = helpers.mkCompositeOption "git status" { gitStatus = {
symbols = symbols =
helpers.mkCompositeOption
''
Symbol characters for git status.
Set to empty string to not show them.
''
(
mapAttrs mapAttrs
( (
optionName: default: optionName: default:
@ -446,14 +437,13 @@ in {
unstaged = ""; unstaged = "";
staged = ""; staged = "";
conflict = ""; conflict = "";
} };
);
align = helpers.defaultNullOpts.mkStr "right" "icon alignment"; align = helpers.defaultNullOpts.mkStr "right" "icon alignment";
}; };
}; };
renderers = helpers.mkCompositeOption "Renderers configuration" { renderers = {
directory = directory =
mkRendererComponentListOption mkRendererComponentListOption
'' ''
@ -566,14 +556,7 @@ in {
helpers.defaultNullOpts.mkNullable (types.attrsOf types.str) "{}" helpers.defaultNullOpts.mkNullable (types.attrsOf types.str) "{}"
"nesting rules"; "nesting rules";
window = window = {
helpers.mkCompositeOption
''
Window options.
See https://github.com/MunifTanjim/nui.nvim/tree/main/lua/nui/popup for possible options.
These can also be functions that return these options.
''
{
position = position =
helpers.defaultNullOpts.mkEnum helpers.defaultNullOpts.mkEnum
["left" "right" "top" "bottom" "float" "current"] "left" "position"; ["left" "right" "top" "bottom" "float" "current"] "left" "position";
@ -589,8 +572,8 @@ in {
position = "float" position = "float"
''; '';
popup = helpers.mkCompositeOption "Settings that apply to float position only" { popup = {
size = helpers.mkCompositeOption "size" { size = {
height = helpers.defaultNullOpts.mkStr "80%" "height"; height = helpers.defaultNullOpts.mkStr "80%" "height";
width = helpers.defaultNullOpts.mkStr "50%" "height"; width = helpers.defaultNullOpts.mkStr "50%" "height";
@ -616,7 +599,7 @@ in {
- "sibling": Insert nodes as siblings of the directory under cursor. - "sibling": Insert nodes as siblings of the directory under cursor.
''; '';
mappingOptions = helpers.mkCompositeOption "Mapping options" { mappingOptions = {
noremap = helpers.defaultNullOpts.mkBool true "noremap"; noremap = helpers.defaultNullOpts.mkBool true "noremap";
nowait = helpers.defaultNullOpts.mkBool true "nowait"; nowait = helpers.defaultNullOpts.mkBool true "nowait";
@ -676,7 +659,7 @@ in {
``` ```
''; '';
}; };
filesystem = helpers.mkCompositeOption "Filesystem options" { filesystem = {
window = mkWindowMappingsOption (lib.mdDoc '' window = mkWindowMappingsOption (lib.mdDoc ''
```nix ```nix
{ {
@ -711,12 +694,12 @@ in {
helpers.defaultNullOpts.mkBool true helpers.defaultNullOpts.mkBool true
"true creates a 2-way binding between vim's cwd and neo-tree's root."; "true creates a 2-way binding between vim's cwd and neo-tree's root.";
cwdTarget = helpers.mkCompositeOption "cwd target" { cwdTarget = {
sidebar = helpers.defaultNullOpts.mkStr "tab" "sidebar is when position = left or right"; sidebar = helpers.defaultNullOpts.mkStr "tab" "sidebar is when position = left or right";
current = helpers.defaultNullOpts.mkStr "window" "current is when position = current"; current = helpers.defaultNullOpts.mkStr "window" "current is when position = current";
}; };
filteredItems = helpers.mkCompositeOption "filtered items" { filteredItems = {
visible = visible =
helpers.defaultNullOpts.mkBool false helpers.defaultNullOpts.mkBool false
"when true, they will just be displayed differently than normal items"; "when true, they will just be displayed differently than normal items";
@ -872,7 +855,7 @@ in {
''; '';
}; };
buffers = helpers.mkCompositeOption "Buffers options" { buffers = {
bindToCwd = helpers.defaultNullOpts.mkBool true "Bind to current working directory."; bindToCwd = helpers.defaultNullOpts.mkBool true "Bind to current working directory.";
followCurrentFile = mkFollowCurrentFileOption true; followCurrentFile = mkFollowCurrentFileOption true;
@ -890,7 +873,7 @@ in {
''; '';
}; };
gitStatus = helpers.mkCompositeOption "git status options" { gitStatus = {
window = mkWindowMappingsOption '' window = mkWindowMappingsOption ''
{ {
A = "git_add_all"; A = "git_add_all";
@ -904,8 +887,8 @@ in {
''; '';
}; };
example = helpers.mkCompositeOption "example options" { example = {
renderers = helpers.mkCompositeOption "renderers" { renderers = {
custom = custom =
mkRendererComponentListOption mkRendererComponentListOption
'' ''
@ -1021,52 +1004,51 @@ in {
ifNonNull' mappings ifNonNull' mappings
(mapAttrs processMapping mappings); (mapAttrs processMapping mappings);
processWindowMappings = window: processWindowMappings = window: {
ifNonNull' window {
mappings = processMappings window.mappings; mappings = processMappings window.mappings;
}; };
options = with cfg; setupOptions = with cfg;
{ {
# Concatenate sources and extraSources, setting sources to it's default value if it is null # Concatenate sources and extraSources, setting sources to it's default value if it is null
# and extraSources is not null # and extraSources is not null
sources = sources =
if (cfg.extraSources != null) if (extraSources != null)
then then
if (cfg.sources == null) if (sources == null)
then ["filesystem" "git_status" "buffers"] ++ cfg.extraSources then ["filesystem" "git_status" "buffers"] ++ extraSources
else cfg.sources ++ cfg.extraSources else sources ++ extraSources
else cfg.sources; else sources;
add_blank_line_at_top = cfg.addBlankLineAtTop; add_blank_line_at_top = addBlankLineAtTop;
auto_clean_after_session_restore = cfg.autoCleanAfterSessionRestore; auto_clean_after_session_restore = autoCleanAfterSessionRestore;
close_if_last_window = cfg.closeIfLastWindow; close_if_last_window = closeIfLastWindow;
default_source = cfg.defaultSource; default_source = defaultSource;
enable_diagnostics = cfg.enableDiagnostics; enable_diagnostics = enableDiagnostics;
enable_git_status = cfg.enableGitStatus; enable_git_status = enableGitStatus;
enable_modified_markers = cfg.enableModifiedMarkers; enable_modified_markers = enableModifiedMarkers;
enable_refresh_on_write = cfg.enableRefreshOnWrite; enable_refresh_on_write = enableRefreshOnWrite;
git_status_async = cfg.gitStatusAsync; git_status_async = gitStatusAsync;
git_status_async_options = ifNonNull' cfg.gitStatusAsyncOptions { git_status_async_options = with gitStatusAsyncOptions; {
batch_size = cfg.gitStatusAsyncOptions.batchSize; batch_size = batchSize;
batch_delay = cfg.gitStatusAsyncOptions.batchDelay; batch_delay = batchDelay;
max_lines = cfg.gitStatusAsyncOptions.maxLines; max_lines = maxLines;
}; };
hide_root_node = cfg.hideRootNode; hide_root_node = hideRootNode;
retain_hidden_root_indent = cfg.retainHiddenRootIndent; retain_hidden_root_indent = retainHiddenRootIndent;
log_level = cfg.logLevel; log_level = logLevel;
log_to_file = cfg.logToFile; log_to_file = logToFile;
open_files_in_last_window = cfg.openFilesInLastWindow; open_files_in_last_window = openFilesInLastWindow;
popup_border_style = cfg.popupBorderStyle; popup_border_style = popupBorderStyle;
resize_timer_interval = cfg.resizeTimerInterval; resize_timer_interval = resizeTimerInterval;
sort_case_insensitive = cfg.sortCaseInsensitive; sort_case_insensitive = sortCaseInsensitive;
sort_function = mkRaw cfg.sortFunction; sort_function = mkRaw sortFunction;
use_popups_for_input = cfg.usePopupsForInput; use_popups_for_input = usePopupsForInput;
use_default_mappings = cfg.useDefaultMappings; use_default_mappings = useDefaultMappings;
source_selector = with cfg.sourceSelector; { source_selector = with sourceSelector; {
inherit winbar statusline; inherit winbar statusline;
show_scrolled_off_parent_node = showScrolledOffParentNode; show_scrolled_off_parent_node = showScrolledOffParentNode;
sources = sources =
ifNonNull' cfg.sourceSelector.sources ifNonNull' sources
( (
map map
( (
@ -1075,7 +1057,7 @@ in {
display_name = source.displayName; display_name = source.displayName;
} }
) )
cfg.sourceSelector.sources sources
); );
content_layout = contentLayout; content_layout = contentLayout;
tabs_layout = tabsLayout; tabs_layout = tabsLayout;
@ -1092,25 +1074,23 @@ in {
highlight_separator_active = highlightSeparatorActive; highlight_separator_active = highlightSeparatorActive;
}; };
event_handlers = event_handlers =
ifNonNull' cfg.eventHandlers ifNonNull' eventHandlers
( (
mapAttrsToList mapAttrsToList
(event: handler: { (event: handler: {
inherit event; inherit event;
handler = helpers.mkRaw handler; handler = helpers.mkRaw handler;
}) })
cfg.eventHandlers eventHandlers
); );
default_component_configs = with cfg.defaultComponentConfigs; default_component_configs = with defaultComponentConfigs; {
ifNonNull' cfg.defaultComponentConfigs { container = with container; {
container = ifNonNull' cfg.defaultComponentConfigs.container { enable_character_fade = enableCharacterFade;
enable_character_fade = container.enableCharacterFade; inherit width;
inherit (container) width; right_padding = rightPadding;
right_padding = container.rightPadding;
}; };
inherit diagnostics; inherit diagnostics;
indent = with indent; indent = with indent; {
ifNonNull' cfg.defaultComponentConfigs.indent {
indent_size = indentSize; indent_size = indentSize;
inherit padding; inherit padding;
with_markers = withMarkers; with_markers = withMarkers;
@ -1122,17 +1102,18 @@ in {
expander_expanded = expanderExpanded; expander_expanded = expanderExpanded;
expander_highlight = expanderHighlight; expander_highlight = expanderHighlight;
}; };
icon = with icon; icon = with icon; {
ifNonNull' cfg.defaultComponentConfigs.icon {
folder_closed = folderClosed; folder_closed = folderClosed;
folder_open = folderOpen; folder_open = folderOpen;
folder_empty = folderEmpty; folder_empty = folderEmpty;
folder_empty_open = folderEmptyOpen; folder_empty_open = folderEmptyOpen;
inherit default highlight; inherit
default
highlight
;
}; };
inherit modified; inherit modified;
name = with name; name = with name; {
ifNonNull' cfg.defaultComponentConfigs.name {
trailing_slash = trailingSlash; trailing_slash = trailingSlash;
use_git_status_colors = useGitStatusColors; use_git_status_colors = useGitStatusColors;
inherit highlight; inherit highlight;
@ -1143,8 +1124,7 @@ in {
mapAttrs (name: processRendererComponentList) cfg.renderers mapAttrs (name: processRendererComponentList) cfg.renderers
); );
nesting_rules = cfg.nestingRules; nesting_rules = cfg.nestingRules;
window = with window; window = with window; {
ifNonNull' cfg.window {
inherit position width height; inherit position width height;
auto_expand_width = autoExpandWidth; auto_expand_width = autoExpandWidth;
inherit popup; inherit popup;
@ -1153,15 +1133,13 @@ in {
mapping_options = mappingOptions; mapping_options = mappingOptions;
mappings = processMappings mappings; mappings = processMappings mappings;
}; };
filesystem = with filesystem; filesystem = with filesystem; {
ifNonNull' cfg.filesystem {
window = processWindowMappings window; window = processWindowMappings window;
async_directory_scan = asyncDirectoryScan; async_directory_scan = asyncDirectoryScan;
scan_mode = scanMode; scan_mode = scanMode;
bind_to_cwd = bindToCwd; bind_to_cwd = bindToCwd;
cwd_target = cwdTarget; cwd_target = cwdTarget;
filtered_items = with filteredItems; filtered_items = with filteredItems; {
ifNonNull' cfg.filesystem.filteredItems {
inherit visible; inherit visible;
force_visible_in_empty_folder = forceVisibleInEmptyFolder; force_visible_in_empty_folder = forceVisibleInEmptyFolder;
show_hidden_count = showHiddenCount; show_hidden_count = showHiddenCount;
@ -1186,35 +1164,33 @@ in {
hijack_netrw_behavior = hijackNetrwBehavior; hijack_netrw_behavior = hijackNetrwBehavior;
use_libuv_file_watcher = useLibuvFileWatcher; use_libuv_file_watcher = useLibuvFileWatcher;
}; };
buffers = with buffers; buffers = with buffers; {
ifNonNull' cfg.buffers {
bind_to_cwd = bindToCwd; bind_to_cwd = bindToCwd;
follow_current_file = followCurrentFile; follow_current_file = followCurrentFile;
group_empty_dirs = groupEmptyDirs; group_empty_dirs = groupEmptyDirs;
window = processWindowMappings window; window = processWindowMappings window;
}; };
git_status = ifNonNull' cfg.gitStatus { git_status = {
window = processWindowMappings cfg.gitStatus.window; window = processWindowMappings cfg.gitStatus.window;
}; };
example = with example; example = with example; {
ifNonNull' cfg.example { renderers = with renderers; {
renderers = ifNonNull' cfg.example.renderers { custom = processRendererComponentList custom;
custom = processRendererComponentList renderers.custom;
}; };
}; };
document_symbols = { document_symbols = with documentSymbols; {
follow_cursor = cfg.documentSymbols.followCursor; follow_cursor = followCursor;
inherit (cfg.documentSymbols) kinds; inherit kinds;
custom_kinds.__raw = custom_kinds.__raw =
"{" "{"
+ (concatStringsSep "," + (concatStringsSep ","
( (
mapAttrsToList mapAttrsToList
(id: name: ''[${id}] = "${name}"'') (id: name: ''[${id}] = "${name}"'')
cfg.documentSymbols.customKinds customKinds
)) ))
+ "}"; + "}";
window = processWindowMappings cfg.documentSymbols.window; window = processWindowMappings window;
}; };
} }
// cfg.extraOptions; // cfg.extraOptions;
@ -1226,7 +1202,7 @@ in {
]; ];
extraConfigLua = '' extraConfigLua = ''
require('neo-tree').setup(${helpers.toLuaObject options}) require('neo-tree').setup(${helpers.toLuaObject setupOptions})
''; '';
extraPackages = [pkgs.git]; extraPackages = [pkgs.git];
}; };