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,10 +32,9 @@ in {
defaults
"Mapping options";
mkWindowMappingsOption = defaults:
helpers.mkCompositeOption "Window options" {
mappings = mkMappingsOption defaults;
};
mkWindowMappingsOption = defaults: {
mappings = mkMappingsOption defaults;
};
mkFollowCurrentFileOption = default: {
enabled = helpers.defaultNullOpts.mkBool default ''
@ -96,25 +95,23 @@ in {
gitStatusAsync = helpers.defaultNullOpts.mkBool true "";
gitStatusAsyncOptions =
helpers.mkCompositeOption
"These options are for people with VERY large git repos" {
batchSize =
helpers.defaultNullOpts.mkInt 1000
"How many lines of git status results to process at a time";
gitStatusAsyncOptions = {
batchSize =
helpers.defaultNullOpts.mkInt 1000
"How many lines of git status results to process at a time";
batchDelay =
helpers.defaultNullOpts.mkInt 10
"delay in ms between batches. Spreads out the workload to let other processes run.";
batchDelay =
helpers.defaultNullOpts.mkInt 10
"delay in ms between batches. Spreads out the workload to let other processes run.";
maxLines =
helpers.defaultNullOpts.mkInt 10000
''
How many lines of git status results to process. Anything after this will be dropped.
Anything before this will be used.
The last items to be processed are the untracked files.
'';
};
maxLines =
helpers.defaultNullOpts.mkInt 10000
''
How many lines of git status results to process. Anything after this will be dropped.
Anything before this will be used.
The last items to be processed are the untracked files.
'';
};
hideRootNode = helpers.defaultNullOpts.mkBool false "Hide the root node.";
@ -308,7 +305,7 @@ in {
};
eventHandlers =
helpers.mkNullOrOption
(types.attrsOf types.str)
(with types; attrsOf str)
''
Configuration of event handlers.
Attrs:
@ -334,8 +331,8 @@ in {
```
'';
defaultComponentConfigs = helpers.mkCompositeOption "Configuration for default components." {
container = helpers.mkCompositeOption "Container options" {
defaultComponentConfigs = {
container = {
enableCharacterFade = helpers.defaultNullOpts.mkBool true "";
width = helpers.defaultNullOpts.mkStr "100%" "";
@ -343,8 +340,8 @@ in {
rightPadding = helpers.defaultNullOpts.mkInt 0 "";
};
diagnostics = helpers.mkCompositeOption "diagnostics" {
symbols = helpers.mkCompositeOption "symbols" {
diagnostics = {
symbols = {
hint = helpers.defaultNullOpts.mkStr "H" "";
info = helpers.defaultNullOpts.mkStr "I" "";
@ -354,7 +351,7 @@ in {
error = helpers.defaultNullOpts.mkStr "X" "";
};
highlights = helpers.mkCompositeOption "highlights" {
highlights = {
hint = helpers.defaultNullOpts.mkStr "DiagnosticSignHint" "";
info = helpers.defaultNullOpts.mkStr "DiagnosticSignInfo" "";
@ -365,7 +362,7 @@ in {
};
};
indent = helpers.mkCompositeOption "indent" {
indent = {
indentSize = helpers.defaultNullOpts.mkInt 2 "";
padding = helpers.defaultNullOpts.mkInt 1 "";
@ -409,13 +406,13 @@ in {
'';
};
modified = helpers.mkCompositeOption "modified" {
modified = {
symbol = helpers.defaultNullOpts.mkStr "[+] " "";
highlight = helpers.defaultNullOpts.mkStr "NeoTreeModified" "";
};
name = helpers.mkCompositeOption "name" {
name = {
trailingSlash = helpers.defaultNullOpts.mkBool false "";
useGitStatusColors = helpers.defaultNullOpts.mkBool true "";
@ -423,37 +420,30 @@ in {
highlight = helpers.defaultNullOpts.mkStr "NeoTreeFileName" "";
};
gitStatus = helpers.mkCompositeOption "git status" {
gitStatus = {
symbols =
helpers.mkCompositeOption
''
Symbol characters for git status.
Set to empty string to not show them.
''
mapAttrs
(
mapAttrs
(
optionName: default:
helpers.defaultNullOpts.mkStr default optionName
)
{
added = "";
deleted = "";
modified = "";
renamed = "";
untracked = "";
ignored = "";
unstaged = "";
staged = "";
conflict = "";
}
);
optionName: default:
helpers.defaultNullOpts.mkStr default optionName
)
{
added = "";
deleted = "";
modified = "";
renamed = "";
untracked = "";
ignored = "";
unstaged = "";
staged = "";
conflict = "";
};
align = helpers.defaultNullOpts.mkStr "right" "icon alignment";
};
};
renderers = helpers.mkCompositeOption "Renderers configuration" {
renderers = {
directory =
mkRendererComponentListOption
''
@ -566,117 +556,110 @@ in {
helpers.defaultNullOpts.mkNullable (types.attrsOf types.str) "{}"
"nesting rules";
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 =
helpers.defaultNullOpts.mkEnum
["left" "right" "top" "bottom" "float" "current"] "left" "position";
window = {
position =
helpers.defaultNullOpts.mkEnum
["left" "right" "top" "bottom" "float" "current"] "left" "position";
width = helpers.defaultNullOpts.mkInt 40 "Applies to left and right positions";
width = helpers.defaultNullOpts.mkInt 40 "Applies to left and right positions";
height = helpers.defaultNullOpts.mkInt 15 "Applies to top and bottom positions";
height = helpers.defaultNullOpts.mkInt 15 "Applies to top and bottom positions";
autoExpandWidth =
helpers.defaultNullOpts.mkBool false
''
Expand the window when file exceeds the window width. does not work with
position = "float"
'';
popup = helpers.mkCompositeOption "Settings that apply to float position only" {
size = helpers.mkCompositeOption "size" {
height = helpers.defaultNullOpts.mkStr "80%" "height";
width = helpers.defaultNullOpts.mkStr "50%" "height";
};
position = helpers.defaultNullOpts.mkStr "80%" ''
50% means center it.
You can also specify border here, if you want a different setting from the global
`popupBorderStyle`.
'';
};
sameLevel = helpers.defaultNullOpts.mkBool false ''
Create and paste/move files/directories on the same level as the directory under cursor
(as opposed to within the directory under cursor).
autoExpandWidth =
helpers.defaultNullOpts.mkBool false
''
Expand the window when file exceeds the window width. does not work with
position = "float"
'';
insertAs = helpers.defaultNullOpts.mkEnumFirstDefault ["child" "sibling"] ''
Affects how nodes get inserted into the tree during creation/pasting/moving of files if
the node under the cursor is a directory:
popup = {
size = {
height = helpers.defaultNullOpts.mkStr "80%" "height";
- "child": Insert nodes as children of the directory under cursor.
- "sibling": Insert nodes as siblings of the directory under cursor.
'';
mappingOptions = helpers.mkCompositeOption "Mapping options" {
noremap = helpers.defaultNullOpts.mkBool true "noremap";
nowait = helpers.defaultNullOpts.mkBool true "nowait";
width = helpers.defaultNullOpts.mkStr "50%" "height";
};
mappings =
mkMappingsOption
''
```nix
{
"<space>" = {
command = "toggle_node";
# disable `nowait` if you have existing combos starting with this char that you want to use
nowait = false;
};
"<2-LeftMouse>" = "open";
"<cr>" = "open";
"<esc>" = "revert_preview";
P = {
command = "toggle_preview";
config = { use_float = true; };
};
l = "focus_preview";
S = "open_split";
# S = "split_with_window_picker";
s = "open_vsplit";
# s = "vsplit_with_window_picker";
t = "open_tabnew";
# "<cr>" = "open_drop";
# t = "open_tab_drop";
w = "open_with_window_picker";
C = "close_node";
z = "close_all_nodes";
# Z = "expand_all_nodes";
R = "refresh";
a = {
command = "add";
# some commands may take optional config options, see `:h neo-tree-mappings` for details
config = {
show_path = "none"; # "none", "relative", "absolute"
};
};
A = "add_directory"; # also accepts the config.show_path and config.insert_as options.
d = "delete";
r = "rename";
y = "copy_to_clipboard";
x = "cut_to_clipboard";
p = "paste_from_clipboard";
c = "copy"; # takes text input for destination, also accepts the config.show_path and config.insert_as options
m = "move"; # takes text input for destination, also accepts the config.show_path and config.insert_as options
e = "toggle_auto_expand_width";
q = "close_window";
"?" = "show_help";
"<" = "prev_source";
">" = "next_source";
}
```
'';
position = helpers.defaultNullOpts.mkStr "80%" ''
50% means center it.
You can also specify border here, if you want a different setting from the global
`popupBorderStyle`.
'';
};
filesystem = helpers.mkCompositeOption "Filesystem options" {
sameLevel = helpers.defaultNullOpts.mkBool false ''
Create and paste/move files/directories on the same level as the directory under cursor
(as opposed to within the directory under cursor).
'';
insertAs = helpers.defaultNullOpts.mkEnumFirstDefault ["child" "sibling"] ''
Affects how nodes get inserted into the tree during creation/pasting/moving of files if
the node under the cursor is a directory:
- "child": Insert nodes as children of the directory under cursor.
- "sibling": Insert nodes as siblings of the directory under cursor.
'';
mappingOptions = {
noremap = helpers.defaultNullOpts.mkBool true "noremap";
nowait = helpers.defaultNullOpts.mkBool true "nowait";
};
mappings =
mkMappingsOption
''
```nix
{
"<space>" = {
command = "toggle_node";
# disable `nowait` if you have existing combos starting with this char that you want to use
nowait = false;
};
"<2-LeftMouse>" = "open";
"<cr>" = "open";
"<esc>" = "revert_preview";
P = {
command = "toggle_preview";
config = { use_float = true; };
};
l = "focus_preview";
S = "open_split";
# S = "split_with_window_picker";
s = "open_vsplit";
# s = "vsplit_with_window_picker";
t = "open_tabnew";
# "<cr>" = "open_drop";
# t = "open_tab_drop";
w = "open_with_window_picker";
C = "close_node";
z = "close_all_nodes";
# Z = "expand_all_nodes";
R = "refresh";
a = {
command = "add";
# some commands may take optional config options, see `:h neo-tree-mappings` for details
config = {
show_path = "none"; # "none", "relative", "absolute"
};
};
A = "add_directory"; # also accepts the config.show_path and config.insert_as options.
d = "delete";
r = "rename";
y = "copy_to_clipboard";
x = "cut_to_clipboard";
p = "paste_from_clipboard";
c = "copy"; # takes text input for destination, also accepts the config.show_path and config.insert_as options
m = "move"; # takes text input for destination, also accepts the config.show_path and config.insert_as options
e = "toggle_auto_expand_width";
q = "close_window";
"?" = "show_help";
"<" = "prev_source";
">" = "next_source";
}
```
'';
};
filesystem = {
window = mkWindowMappingsOption (lib.mdDoc ''
```nix
{
@ -711,12 +694,12 @@ in {
helpers.defaultNullOpts.mkBool true
"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";
current = helpers.defaultNullOpts.mkStr "window" "current is when position = current";
};
filteredItems = helpers.mkCompositeOption "filtered items" {
filteredItems = {
visible =
helpers.defaultNullOpts.mkBool false
"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.";
followCurrentFile = mkFollowCurrentFileOption true;
@ -890,7 +873,7 @@ in {
'';
};
gitStatus = helpers.mkCompositeOption "git status options" {
gitStatus = {
window = mkWindowMappingsOption ''
{
A = "git_add_all";
@ -904,8 +887,8 @@ in {
'';
};
example = helpers.mkCompositeOption "example options" {
renderers = helpers.mkCompositeOption "renderers" {
example = {
renderers = {
custom =
mkRendererComponentListOption
''
@ -1021,52 +1004,51 @@ in {
ifNonNull' mappings
(mapAttrs processMapping mappings);
processWindowMappings = window:
ifNonNull' window {
mappings = processMappings window.mappings;
};
processWindowMappings = window: {
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
# and extraSources is not null
sources =
if (cfg.extraSources != null)
if (extraSources != null)
then
if (cfg.sources == null)
then ["filesystem" "git_status" "buffers"] ++ cfg.extraSources
else cfg.sources ++ cfg.extraSources
else cfg.sources;
add_blank_line_at_top = cfg.addBlankLineAtTop;
auto_clean_after_session_restore = cfg.autoCleanAfterSessionRestore;
close_if_last_window = cfg.closeIfLastWindow;
default_source = cfg.defaultSource;
enable_diagnostics = cfg.enableDiagnostics;
enable_git_status = cfg.enableGitStatus;
enable_modified_markers = cfg.enableModifiedMarkers;
enable_refresh_on_write = cfg.enableRefreshOnWrite;
git_status_async = cfg.gitStatusAsync;
git_status_async_options = ifNonNull' cfg.gitStatusAsyncOptions {
batch_size = cfg.gitStatusAsyncOptions.batchSize;
batch_delay = cfg.gitStatusAsyncOptions.batchDelay;
max_lines = cfg.gitStatusAsyncOptions.maxLines;
if (sources == null)
then ["filesystem" "git_status" "buffers"] ++ extraSources
else sources ++ extraSources
else sources;
add_blank_line_at_top = addBlankLineAtTop;
auto_clean_after_session_restore = autoCleanAfterSessionRestore;
close_if_last_window = closeIfLastWindow;
default_source = defaultSource;
enable_diagnostics = enableDiagnostics;
enable_git_status = enableGitStatus;
enable_modified_markers = enableModifiedMarkers;
enable_refresh_on_write = enableRefreshOnWrite;
git_status_async = gitStatusAsync;
git_status_async_options = with gitStatusAsyncOptions; {
batch_size = batchSize;
batch_delay = batchDelay;
max_lines = maxLines;
};
hide_root_node = cfg.hideRootNode;
retain_hidden_root_indent = cfg.retainHiddenRootIndent;
log_level = cfg.logLevel;
log_to_file = cfg.logToFile;
open_files_in_last_window = cfg.openFilesInLastWindow;
popup_border_style = cfg.popupBorderStyle;
resize_timer_interval = cfg.resizeTimerInterval;
sort_case_insensitive = cfg.sortCaseInsensitive;
sort_function = mkRaw cfg.sortFunction;
use_popups_for_input = cfg.usePopupsForInput;
use_default_mappings = cfg.useDefaultMappings;
source_selector = with cfg.sourceSelector; {
hide_root_node = hideRootNode;
retain_hidden_root_indent = retainHiddenRootIndent;
log_level = logLevel;
log_to_file = logToFile;
open_files_in_last_window = openFilesInLastWindow;
popup_border_style = popupBorderStyle;
resize_timer_interval = resizeTimerInterval;
sort_case_insensitive = sortCaseInsensitive;
sort_function = mkRaw sortFunction;
use_popups_for_input = usePopupsForInput;
use_default_mappings = useDefaultMappings;
source_selector = with sourceSelector; {
inherit winbar statusline;
show_scrolled_off_parent_node = showScrolledOffParentNode;
sources =
ifNonNull' cfg.sourceSelector.sources
ifNonNull' sources
(
map
(
@ -1075,7 +1057,7 @@ in {
display_name = source.displayName;
}
)
cfg.sourceSelector.sources
sources
);
content_layout = contentLayout;
tabs_layout = tabsLayout;
@ -1092,129 +1074,123 @@ in {
highlight_separator_active = highlightSeparatorActive;
};
event_handlers =
ifNonNull' cfg.eventHandlers
ifNonNull' eventHandlers
(
mapAttrsToList
(event: handler: {
inherit event;
handler = helpers.mkRaw handler;
})
cfg.eventHandlers
eventHandlers
);
default_component_configs = with cfg.defaultComponentConfigs;
ifNonNull' cfg.defaultComponentConfigs {
container = ifNonNull' cfg.defaultComponentConfigs.container {
enable_character_fade = container.enableCharacterFade;
inherit (container) width;
right_padding = container.rightPadding;
};
inherit diagnostics;
indent = with indent;
ifNonNull' cfg.defaultComponentConfigs.indent {
indent_size = indentSize;
inherit padding;
with_markers = withMarkers;
indent_markers = indentMarker;
last_indent_marker = lastIndentMarker;
inherit highlight;
with_expanders = withExpanders;
expander_collapsed = expanderCollapsed;
expander_expanded = expanderExpanded;
expander_highlight = expanderHighlight;
};
icon = with icon;
ifNonNull' cfg.defaultComponentConfigs.icon {
folder_closed = folderClosed;
folder_open = folderOpen;
folder_empty = folderEmpty;
folder_empty_open = folderEmptyOpen;
inherit default highlight;
};
inherit modified;
name = with name;
ifNonNull' cfg.defaultComponentConfigs.name {
trailing_slash = trailingSlash;
use_git_status_colors = useGitStatusColors;
inherit highlight;
};
git_status = gitStatus;
default_component_configs = with defaultComponentConfigs; {
container = with container; {
enable_character_fade = enableCharacterFade;
inherit width;
right_padding = rightPadding;
};
inherit diagnostics;
indent = with indent; {
indent_size = indentSize;
inherit padding;
with_markers = withMarkers;
indent_markers = indentMarker;
last_indent_marker = lastIndentMarker;
inherit highlight;
with_expanders = withExpanders;
expander_collapsed = expanderCollapsed;
expander_expanded = expanderExpanded;
expander_highlight = expanderHighlight;
};
icon = with icon; {
folder_closed = folderClosed;
folder_open = folderOpen;
folder_empty = folderEmpty;
folder_empty_open = folderEmptyOpen;
inherit
default
highlight
;
};
inherit modified;
name = with name; {
trailing_slash = trailingSlash;
use_git_status_colors = useGitStatusColors;
inherit highlight;
};
git_status = gitStatus;
};
renderers = ifNonNull' cfg.renderers (
mapAttrs (name: processRendererComponentList) cfg.renderers
);
nesting_rules = cfg.nestingRules;
window = with window;
ifNonNull' cfg.window {
inherit position width height;
auto_expand_width = autoExpandWidth;
inherit popup;
same_level = sameLevel;
insert_as = insertAs;
mapping_options = mappingOptions;
mappings = processMappings mappings;
window = with window; {
inherit position width height;
auto_expand_width = autoExpandWidth;
inherit popup;
same_level = sameLevel;
insert_as = insertAs;
mapping_options = mappingOptions;
mappings = processMappings mappings;
};
filesystem = with filesystem; {
window = processWindowMappings window;
async_directory_scan = asyncDirectoryScan;
scan_mode = scanMode;
bind_to_cwd = bindToCwd;
cwd_target = cwdTarget;
filtered_items = with filteredItems; {
inherit visible;
force_visible_in_empty_folder = forceVisibleInEmptyFolder;
show_hidden_count = showHiddenCount;
hide_dotfiles = hideDotfiles;
hide_gitignored = hideGitignored;
hide_hidden = hideHidden;
hide_by_name = hideByName;
hide_by_pattern = hideByPattern;
always_show = alwaysShow;
never_show = neverShow;
never_show_by_pattern = neverShowByPattern;
};
filesystem = with filesystem;
ifNonNull' cfg.filesystem {
window = processWindowMappings window;
async_directory_scan = asyncDirectoryScan;
scan_mode = scanMode;
bind_to_cwd = bindToCwd;
cwd_target = cwdTarget;
filtered_items = with filteredItems;
ifNonNull' cfg.filesystem.filteredItems {
inherit visible;
force_visible_in_empty_folder = forceVisibleInEmptyFolder;
show_hidden_count = showHiddenCount;
hide_dotfiles = hideDotfiles;
hide_gitignored = hideGitignored;
hide_hidden = hideHidden;
hide_by_name = hideByName;
hide_by_pattern = hideByPattern;
always_show = alwaysShow;
never_show = neverShow;
never_show_by_pattern = neverShowByPattern;
};
find_by_full_path_words = findByFullPathWords;
find_command = findCommand;
find_args =
if isString findArgs
then mkRaw findArgs
else findArgs;
group_empty_dirs = groupEmptyDirs;
search_limit = searchLimit;
follow_current_file = followCurrentFile;
hijack_netrw_behavior = hijackNetrwBehavior;
use_libuv_file_watcher = useLibuvFileWatcher;
};
buffers = with buffers;
ifNonNull' cfg.buffers {
bind_to_cwd = bindToCwd;
follow_current_file = followCurrentFile;
group_empty_dirs = groupEmptyDirs;
window = processWindowMappings window;
};
git_status = ifNonNull' cfg.gitStatus {
find_by_full_path_words = findByFullPathWords;
find_command = findCommand;
find_args =
if isString findArgs
then mkRaw findArgs
else findArgs;
group_empty_dirs = groupEmptyDirs;
search_limit = searchLimit;
follow_current_file = followCurrentFile;
hijack_netrw_behavior = hijackNetrwBehavior;
use_libuv_file_watcher = useLibuvFileWatcher;
};
buffers = with buffers; {
bind_to_cwd = bindToCwd;
follow_current_file = followCurrentFile;
group_empty_dirs = groupEmptyDirs;
window = processWindowMappings window;
};
git_status = {
window = processWindowMappings cfg.gitStatus.window;
};
example = with example;
ifNonNull' cfg.example {
renderers = ifNonNull' cfg.example.renderers {
custom = processRendererComponentList renderers.custom;
};
example = with example; {
renderers = with renderers; {
custom = processRendererComponentList custom;
};
document_symbols = {
follow_cursor = cfg.documentSymbols.followCursor;
inherit (cfg.documentSymbols) kinds;
};
document_symbols = with documentSymbols; {
follow_cursor = followCursor;
inherit kinds;
custom_kinds.__raw =
"{"
+ (concatStringsSep ","
(
mapAttrsToList
(id: name: ''[${id}] = "${name}"'')
cfg.documentSymbols.customKinds
customKinds
))
+ "}";
window = processWindowMappings cfg.documentSymbols.window;
window = processWindowMappings window;
};
}
// cfg.extraOptions;
@ -1226,7 +1202,7 @@ in {
];
extraConfigLua = ''
require('neo-tree').setup(${helpers.toLuaObject options})
require('neo-tree').setup(${helpers.toLuaObject setupOptions})
'';
extraPackages = [pkgs.git];
};