nix-community.nixvim/plugins/telescope/extensions/file-browser.nix

234 lines
7.8 KiB
Nix
Raw Normal View History

2024-03-24 17:42:40 +01:00
{
lib,
config,
pkgs,
...
}:
2024-05-05 19:39:35 +02:00
with lib;
let
telescopeHelpers = import ./_helpers.nix { inherit lib config pkgs; };
inherit (lib.nixvim) defaultNullOpts mkNullOrStr;
2024-03-24 17:42:40 +01:00
in
2024-05-05 19:39:35 +02:00
telescopeHelpers.mkExtension {
name = "file-browser";
extensionName = "file_browser";
defaultPackage = pkgs.vimPlugins.telescope-file-browser-nvim;
# TODO: introduced 2024-03-24, remove on 2024-05-24
optionsRenamedToSettings = [
"theme"
"path"
"cwd"
"cwdToPath"
"grouped"
# "files" TODO this warning is causing an 'infinite recursion error'... No idea why
"addDirs"
"depth"
"autoDepth"
"selectBuffer"
"hidden"
"respectGitignore"
"browseFiles"
"browseFolders"
"hideParentDir"
"collapseDirs"
"quiet"
"dirIcon"
"dirIconHl"
"displayStat"
"hijackNetrw"
"useFd"
"gitStatus"
"promptPath"
];
imports = [
(mkRemovedOptionModule
[
"plugins"
"telescope"
"extensions"
"file-browser"
"mappings"
]
''
Use `plugins.telescope.extension.file-browser.settings.mappings` instead but beware, you need to specify the full name of the callback:
Example:
```
mappings = {
i = {
"<A-c>" = "require('telescope._extensions.file_browser.actions').create";
"<S-CR>" = "require('telescope._extensions.file_browser.actions').create_from_prompt";
"<A-r>" = "require('telescope._extensions.file_browser.actions').rename";
};
n = {
"c" = "require('telescope._extensions.file_browser.actions').create";
"r" = "require('telescope._extensions.file_browser.actions').rename";
"m" = "require('telescope._extensions.file_browser.actions').move";
};
}
```
''
)
];
settingsOptions = {
theme = mkNullOrStr ''
2024-05-05 19:39:35 +02:00
Custom theme, will use your global theme by default.
'';
path = defaultNullOpts.mkStr { __raw = "vim.loop.cwd()"; } ''
2024-05-05 19:39:35 +02:00
Directory to browse files from.
`vim.fn.expanded` automatically.
'';
cwd = defaultNullOpts.mkStr { __raw = "vim.loop.cwd()"; } ''
2024-05-05 19:39:35 +02:00
Directory to browse folders from.
`vim.fn.expanded` automatically.
'';
cwd_to_path = defaultNullOpts.mkBool false ''
2024-05-05 19:39:35 +02:00
Whether folder browser is launched from `path` rather than `cwd`.
'';
grouped = defaultNullOpts.mkBool false ''
2024-05-05 19:39:35 +02:00
Group initial sorting by directories and then files.
'';
files = defaultNullOpts.mkBool true ''
2024-05-05 19:39:35 +02:00
Start in file (true) or folder (false) browser.
'';
add_dirs = defaultNullOpts.mkBool true ''
2024-05-05 19:39:35 +02:00
Whether the file browser shows folders.
'';
depth = defaultNullOpts.mkUnsignedInt 1 ''
2024-05-05 19:39:35 +02:00
File tree depth to display, `false` for unlimited depth.
'';
auto_depth = defaultNullOpts.mkBool false ''
2024-05-05 19:39:35 +02:00
Unlimit or set `depth` to `auto_depth` & unset grouped on prompt for file_browser.
'';
select_buffer = defaultNullOpts.mkBool false ''
2024-05-05 19:39:35 +02:00
Select current buffer if possible.
May imply `hidden=true`.
'';
hidden =
defaultNullOpts.mkNullable
2024-03-24 17:42:40 +01:00
(
with types;
2024-05-05 19:39:35 +02:00
either bool (submodule {
options = {
file_browser = defaultNullOpts.mkBool false "";
2024-05-05 19:39:35 +02:00
folder_browser = defaultNullOpts.mkBool false "";
2024-05-05 19:39:35 +02:00
};
})
2024-03-24 17:42:40 +01:00
)
{
file_browser = false;
folder_browser = false;
}
2024-03-24 17:42:40 +01:00
"Determines whether to show hidden files or not.";
respect_gitignore = defaultNullOpts.mkBool false ''
2024-05-05 19:39:35 +02:00
Induces slow-down w/ plenary finder (true if `fd` available).
'';
browse_files = defaultNullOpts.mkLuaFn "require('telescope._extensions.file_browser.finders').browse_files" "A custom lua function to override for the file browser.";
2024-05-05 19:39:35 +02:00
browse_folders = defaultNullOpts.mkLuaFn "require('telescope._extensions.file_browser.finders').browse_folders" "A custom lua function to override for the folder browser.";
2024-05-05 19:39:35 +02:00
hide_parent_dir = defaultNullOpts.mkBool false ''
2024-05-05 19:39:35 +02:00
Hide `../` in the file browser.
'';
collapse_dirs = defaultNullOpts.mkBool false ''
2024-05-05 19:39:35 +02:00
Skip with only a single (possibly hidden) sub-dir in file_browser.
'';
quiet = defaultNullOpts.mkBool false ''
2024-05-05 19:39:35 +02:00
Suppress any notification from file_browser actions.
'';
dir_icon = defaultNullOpts.mkStr "" ''
2024-05-05 19:39:35 +02:00
Change the icon for a directory.
'';
dir_icon_hl = defaultNullOpts.mkStr "Default" ''
2024-05-05 19:39:35 +02:00
Change the highlight group of dir icon.
'';
display_stat = defaultNullOpts.mkAttrsOf types.anything {
date = true;
size = true;
mode = true;
} "Ordered stat; see upstream for more info.";
2024-05-05 19:39:35 +02:00
hijack_netrw = defaultNullOpts.mkBool false ''
2024-05-05 19:39:35 +02:00
Use telescope file browser when opening directory paths.
'';
use_fd = defaultNullOpts.mkBool true ''
2024-05-05 19:39:35 +02:00
Use `fd` if available over `plenary.scandir`.
'';
git_status = defaultNullOpts.mkBool true ''
2024-05-05 19:39:35 +02:00
Show the git status of files (true if `git` is found).
'';
prompt_path = defaultNullOpts.mkBool false ''
2024-05-05 19:39:35 +02:00
Show the current relative path from cwd as the prompt prefix.
'';
mappings = telescopeHelpers.mkMappingsOption {
insertDefaults = ''
{
"<A-c>" = "require('telescope._extensions.file_browser.actions').create";
"<S-CR>" = "require('telescope._extensions.file_browser.actions').create_from_prompt";
"<A-r>" = "require('telescope._extensions.file_browser.actions').rename";
"<A-m>" = "require('telescope._extensions.file_browser.actions').move";
"<A-y>" = "require('telescope._extensions.file_browser.actions').copy";
"<A-d>" = "require('telescope._extensions.file_browser.actions').remove";
"<C-o>" = "require('telescope._extensions.file_browser.actions').open";
"<C-g>" = "require('telescope._extensions.file_browser.actions').goto_parent_dir";
"<C-e>" = "require('telescope._extensions.file_browser.actions').goto_home_dir";
"<C-w>" = "require('telescope._extensions.file_browser.actions').goto_cwd";
"<C-t>" = "require('telescope._extensions.file_browser.actions').change_cwd";
"<C-f>" = "require('telescope._extensions.file_browser.actions').toggle_browser";
"<C-h>" = "require('telescope._extensions.file_browser.actions').toggle_hidden";
"<C-s>" = "require('telescope._extensions.file_browser.actions').toggle_all";
"<bs>" = "require('telescope._extensions.file_browser.actions').backspace";
}
'';
normalDefaults = ''
{
"c" = "require('telescope._extensions.file_browser.actions').create";
"r" = "require('telescope._extensions.file_browser.actions').rename";
"m" = "require('telescope._extensions.file_browser.actions').move";
"y" = "require('telescope._extensions.file_browser.actions').copy";
"d" = "require('telescope._extensions.file_browser.actions').remove";
"o" = "require('telescope._extensions.file_browser.actions').open";
"g" = "require('telescope._extensions.file_browser.actions').goto_parent_dir";
"e" = "require('telescope._extensions.file_browser.actions').goto_home_dir";
"w" = "require('telescope._extensions.file_browser.actions').goto_cwd";
"t" = "require('telescope._extensions.file_browser.actions').change_cwd";
"f" = "require('telescope._extensions.file_browser.actions').toggle_browser";
"h" = "require('telescope._extensions.file_browser.actions').toggle_hidden";
"s" = "require('telescope._extensions.file_browser.actions').toggle_all";
}
2024-03-24 17:42:40 +01:00
'';
};
2024-05-05 19:39:35 +02:00
};
2024-03-24 17:42:40 +01:00
2024-05-05 19:39:35 +02:00
settingsExample = {
file_browser = {
theme = "ivy";
hijack_netrw = true;
2024-03-24 17:42:40 +01:00
};
2024-05-05 19:39:35 +02:00
};
}