From b38f24f3482aeb59fa55f9fb2fd6269f978b7b9f Mon Sep 17 00:00:00 2001 From: Gaetan Lepage Date: Sun, 24 Mar 2024 17:42:40 +0100 Subject: [PATCH] plugins/telescope: refactor extensions --- plugins/telescope/default.nix | 10 +- plugins/telescope/extensions/_helpers.nix | 98 +++++++ plugins/telescope/extensions/default.nix | 11 + plugins/telescope/extensions/file-browser.nix | 242 ++++++++++++++++++ plugins/telescope/extensions/frecency.nix | 168 ++++++++++++ plugins/telescope/extensions/fzf-native.nix | 49 ++++ plugins/telescope/extensions/fzy-native.nix | 36 +++ plugins/telescope/extensions/media-files.nix | 120 +++++++++ plugins/telescope/extensions/ui-select.nix | 18 ++ plugins/telescope/extensions/undo.nix | 118 +++++++++ plugins/telescope/file-browser.nix | 216 ---------------- plugins/telescope/frecency.nix | 76 ------ plugins/telescope/fzf-native.nix | 53 ---- plugins/telescope/fzy-native.nix | 39 --- plugins/telescope/media-files.nix | 43 ---- plugins/telescope/ui-select.nix | 34 --- plugins/telescope/undo.nix | 115 --------- .../plugins/telescope/file-browser.nix | 86 +++++++ .../plugins/telescope/frecency.nix | 73 ++++++ .../plugins/telescope/fzf-native.nix | 25 ++ .../plugins/telescope/fzy-native.nix | 23 ++ .../plugins/telescope/media-files.nix | 50 ++++ tests/test-sources/plugins/telescope/undo.nix | 34 +-- 23 files changed, 1136 insertions(+), 601 deletions(-) create mode 100644 plugins/telescope/extensions/_helpers.nix create mode 100644 plugins/telescope/extensions/default.nix create mode 100644 plugins/telescope/extensions/file-browser.nix create mode 100644 plugins/telescope/extensions/frecency.nix create mode 100644 plugins/telescope/extensions/fzf-native.nix create mode 100644 plugins/telescope/extensions/fzy-native.nix create mode 100644 plugins/telescope/extensions/media-files.nix create mode 100644 plugins/telescope/extensions/ui-select.nix create mode 100644 plugins/telescope/extensions/undo.nix delete mode 100644 plugins/telescope/file-browser.nix delete mode 100644 plugins/telescope/frecency.nix delete mode 100644 plugins/telescope/fzf-native.nix delete mode 100644 plugins/telescope/fzy-native.nix delete mode 100644 plugins/telescope/media-files.nix delete mode 100644 plugins/telescope/ui-select.nix delete mode 100644 plugins/telescope/undo.nix create mode 100644 tests/test-sources/plugins/telescope/file-browser.nix create mode 100644 tests/test-sources/plugins/telescope/frecency.nix create mode 100644 tests/test-sources/plugins/telescope/fzf-native.nix create mode 100644 tests/test-sources/plugins/telescope/fzy-native.nix create mode 100644 tests/test-sources/plugins/telescope/media-files.nix diff --git a/plugins/telescope/default.nix b/plugins/telescope/default.nix index 1afc20df..66f4b4f4 100644 --- a/plugins/telescope/default.nix +++ b/plugins/telescope/default.nix @@ -20,15 +20,7 @@ with lib; deprecateExtraOptions = true; optionsRenamedToSettings = ["defaults"]; - imports = [ - ./file-browser.nix - ./frecency.nix - ./fzf-native.nix - ./fzy-native.nix - ./media-files.nix - ./ui-select.nix - ./undo.nix - ]; + imports = [./extensions]; extraOptions = { keymaps = mkOption { diff --git a/plugins/telescope/extensions/_helpers.nix b/plugins/telescope/extensions/_helpers.nix new file mode 100644 index 00000000..6553ec65 --- /dev/null +++ b/plugins/telescope/extensions/_helpers.nix @@ -0,0 +1,98 @@ +{ + lib, + config, + helpers, + ... +}: +with lib; rec { + mkExtension = { + name, + defaultPackage, + extensionName ? name, + settingsOptions ? {}, + settingsExample ? null, + extraOptions ? {}, + imports ? [], + optionsRenamedToSettings ? [], + extraConfig ? cfg: {}, + }: { + # TODO remove this once all deprecation warnings will have been removed. + imports = let + basePluginPath = ["plugins" "telescope" "extensions" name]; + settingsPath = basePluginPath ++ ["settings"]; + in + imports + ++ ( + map + ( + option: let + optionPath = + if isString option + then [option] + else option; # option is already a path (i.e. a list) + + optionPathSnakeCase = map helpers.toSnakeCase optionPath; + in + mkRenamedOptionModule + (basePluginPath ++ optionPath) + (settingsPath ++ optionPathSnakeCase) + ) + optionsRenamedToSettings + ); + + options.plugins.telescope.extensions.${name} = + { + enable = mkEnableOption "the `${name}` telescope extension"; + + package = helpers.mkPackageOption name defaultPackage; + + settings = helpers.mkSettingsOption { + description = "settings for the `${name}` telescope extension."; + options = settingsOptions; + example = settingsExample; + }; + } + // extraOptions; + + config = let + cfg = config.plugins.telescope.extensions.${name}; + in + mkIf cfg.enable + ( + mkMerge [ + { + extraPlugins = [cfg.package]; + + plugins.telescope = { + enabledExtensions = [extensionName]; + settings.extensions.${extensionName} = cfg.settings; + }; + } + (extraConfig cfg) + ] + ); + }; + + mkModeMappingsOption = mode: defaults: + mkOption { + type = with helpers.nixvimTypes; attrsOf strLuaFn; + default = {}; + description = '' + Keymaps in ${mode} mode. + + Default: + ```nix + ${defaults} + ``` + ''; + apply = mapAttrs (_: helpers.mkRaw); + }; + + mkMappingsOption = { + insertDefaults, + normalDefaults, + }: { + i = mkModeMappingsOption "insert" insertDefaults; + n = mkModeMappingsOption "normal" normalDefaults; + }; +} diff --git a/plugins/telescope/extensions/default.nix b/plugins/telescope/extensions/default.nix new file mode 100644 index 00000000..7ba6bcd2 --- /dev/null +++ b/plugins/telescope/extensions/default.nix @@ -0,0 +1,11 @@ +{ + imports = [ + ./file-browser.nix + ./frecency.nix + ./fzf-native.nix + ./fzy-native.nix + ./media-files.nix + ./ui-select.nix + ./undo.nix + ]; +} diff --git a/plugins/telescope/extensions/file-browser.nix b/plugins/telescope/extensions/file-browser.nix new file mode 100644 index 00000000..7da2f22a --- /dev/null +++ b/plugins/telescope/extensions/file-browser.nix @@ -0,0 +1,242 @@ +{ + lib, + helpers, + config, + pkgs, + ... +}: +with lib; let + telescopeHelpers = import ./_helpers.nix {inherit lib helpers config pkgs;}; +in + 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 = { + "" = "require('telescope._extensions.file_browser.actions').create"; + "" = "require('telescope._extensions.file_browser.actions').create_from_prompt"; + "" = "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 = helpers.mkNullOrStr '' + Custom theme, will use your global theme by default. + ''; + + path = helpers.defaultNullOpts.mkStr ''{__raw = "vim.loop.cwd()";}'' '' + Directory to browse files from. + `vim.fn.expanded` automatically. + ''; + + cwd = helpers.defaultNullOpts.mkStr ''{__raw = "vim.loop.cwd()";}'' '' + Directory to browse folders from. + `vim.fn.expanded` automatically. + ''; + + cwd_to_path = helpers.defaultNullOpts.mkBool false '' + Whether folder browser is launched from `path` rather than `cwd`. + ''; + + grouped = helpers.defaultNullOpts.mkBool false '' + Group initial sorting by directories and then files. + ''; + + files = helpers.defaultNullOpts.mkBool true '' + Start in file (true) or folder (false) browser. + ''; + + add_dirs = helpers.defaultNullOpts.mkBool true '' + Whether the file browser shows folders. + ''; + + depth = helpers.defaultNullOpts.mkUnsignedInt 1 '' + File tree depth to display, `false` for unlimited depth. + ''; + + auto_depth = helpers.defaultNullOpts.mkBool false '' + Unlimit or set `depth` to `auto_depth` & unset grouped on prompt for file_browser. + ''; + + select_buffer = helpers.defaultNullOpts.mkBool false '' + Select current buffer if possible. + May imply `hidden=true`. + ''; + + hidden = + helpers.defaultNullOpts.mkNullable + ( + with types; + either + bool + (submodule { + options = { + file_browser = helpers.defaultNullOpts.mkBool false ""; + + folder_browser = helpers.defaultNullOpts.mkBool false ""; + }; + }) + ) + '' + { + file_browser = false; + folder_browser = false; + } + '' + "Determines whether to show hidden files or not."; + + respect_gitignore = helpers.defaultNullOpts.mkBool false '' + Induces slow-down w/ plenary finder (true if `fd` available). + ''; + + browse_files = + helpers.defaultNullOpts.mkLuaFn + "require('telescope._extensions.file_browser.finders').browse_files" + "A custom lua function to override for the file browser."; + + browse_folders = + helpers.defaultNullOpts.mkLuaFn + "require('telescope._extensions.file_browser.finders').browse_folders" + "A custom lua function to override for the folder browser."; + + hide_parent_dir = helpers.defaultNullOpts.mkBool false '' + Hide `../` in the file browser. + ''; + + collapse_dirs = helpers.defaultNullOpts.mkBool false '' + Skip with only a single (possibly hidden) sub-dir in file_browser. + ''; + + quiet = helpers.defaultNullOpts.mkBool false '' + Suppress any notification from file_browser actions. + ''; + + dir_icon = helpers.defaultNullOpts.mkStr "" '' + Change the icon for a directory. + ''; + + dir_icon_hl = helpers.defaultNullOpts.mkStr "Default" '' + Change the highlight group of dir icon. + ''; + + display_stat = + helpers.defaultNullOpts.mkAttrsOf types.anything + '' + { + date = true; + size = true; + mode = true; + } + '' + "Ordered stat; see upstream for more info."; + + hijack_netrw = helpers.defaultNullOpts.mkBool false '' + Use telescope file browser when opening directory paths. + ''; + + use_fd = helpers.defaultNullOpts.mkBool true '' + Use `fd` if available over `plenary.scandir`. + ''; + + git_status = helpers.defaultNullOpts.mkBool true '' + Show the git status of files (true if `git` is found). + ''; + + prompt_path = helpers.defaultNullOpts.mkBool false '' + Show the current relative path from cwd as the prompt prefix. + ''; + + mappings = telescopeHelpers.mkMappingsOption { + insertDefaults = '' + { + "" = "require('telescope._extensions.file_browser.actions').create"; + "" = "require('telescope._extensions.file_browser.actions').create_from_prompt"; + "" = "require('telescope._extensions.file_browser.actions').rename"; + "" = "require('telescope._extensions.file_browser.actions').move"; + "" = "require('telescope._extensions.file_browser.actions').copy"; + "" = "require('telescope._extensions.file_browser.actions').remove"; + "" = "require('telescope._extensions.file_browser.actions').open"; + "" = "require('telescope._extensions.file_browser.actions').goto_parent_dir"; + "" = "require('telescope._extensions.file_browser.actions').goto_home_dir"; + "" = "require('telescope._extensions.file_browser.actions').goto_cwd"; + "" = "require('telescope._extensions.file_browser.actions').change_cwd"; + "" = "require('telescope._extensions.file_browser.actions').toggle_browser"; + "" = "require('telescope._extensions.file_browser.actions').toggle_hidden"; + "" = "require('telescope._extensions.file_browser.actions').toggle_all"; + "" = "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"; + } + ''; + }; + }; + + settingsExample = { + file_browser = { + theme = "ivy"; + hijack_netrw = true; + }; + }; + } diff --git a/plugins/telescope/extensions/frecency.nix b/plugins/telescope/extensions/frecency.nix new file mode 100644 index 00000000..19e2429d --- /dev/null +++ b/plugins/telescope/extensions/frecency.nix @@ -0,0 +1,168 @@ +{ + lib, + helpers, + config, + pkgs, + ... +}: +with lib; + ( + import ./_helpers.nix {inherit lib helpers config pkgs;} + ) + .mkExtension { + name = "frecency"; + defaultPackage = pkgs.vimPlugins.telescope-frecency-nvim; + + # TODO: introduced 2024-03-24, remove on 2024-05-24 + optionsRenamedToSettings = [ + "dbRoot" + "defaultWorkspace" + "ignorePatterns" + "showScores" + "workspaces" + ]; + imports = let + basePluginPath = ["plugins" "telescope" "extensions" "frecency"]; + in [ + ( + mkRemovedOptionModule + (basePluginPath ++ ["showUnindexed"]) + "This option has been removed upstream." + ) + ( + mkRemovedOptionModule + (basePluginPath ++ ["deviconsDisabled"]) + "This option has been removed upstream." + ) + ]; + + settingsOptions = { + auto_validate = helpers.defaultNullOpts.mkBool true '' + If true, it removes stale entries count over than `db_validate_threshold`. + ''; + + db_root = helpers.defaultNullOpts.mkStr ''{__raw = "vim.fn.stdpath 'data'";}'' '' + Path to parent directory of custom database location. + Defaults to `$XDG_DATA_HOME/nvim` if unset. + ''; + + db_safe_mode = helpers.defaultNullOpts.mkBool true '' + If true, it shows confirmation dialog by `vim.ui.select()` before validating DB. + ''; + + db_validate_threshold = helpers.defaultNullOpts.mkUnsignedInt 10 '' + It will removes over than this count in validating DB. + ''; + + default_workspace = helpers.mkNullOrStr '' + Default workspace tag to filter by e.g. `'CWD'` to filter by default to the current + directory. + Can be overridden at query time by specifying another filter like `':*:'`. + ''; + + disable_devicons = helpers.defaultNullOpts.mkBool false '' + Disable devicons (if available). + ''; + + hide_current_buffer = helpers.defaultNullOpts.mkBool false '' + If true, it does not show the current buffer in candidates. + ''; + + filter_delimiter = helpers.defaultNullOpts.mkStr ":" '' + Delimiters to indicate the filter like `:CWD:`. + ''; + + ignore_patterns = + helpers.defaultNullOpts.mkListOf types.str + '' + [ + "*.git/*" + "*/tmp/*" + "term://*" + ] + '' + '' + Patterns in this table control which files are indexed (and subsequently which you'll see + in the finder results). + ''; + + max_timestamps = helpers.defaultNullOpts.mkPositiveInt 10 '' + Set the max count of timestamps DB keeps when you open files. + It ignores the value and use `10` if you set less than or equal to `0`. + + CAUTION: When you reduce the value of this option, it removes old timestamps when you open + the file. + It is reasonable to set this value more than or equal to the default value: `10`. + ''; + + show_filter_column = + helpers.defaultNullOpts.mkNullable + ( + with types; + either + bool + (listOf str) + ) + "true" + '' + Show the path of the active filter before file paths. + In default, it uses the tail of paths for `'LSP'` and `'CWD'` tags. + You can configure this by setting a table for this option. + ''; + + show_scores = helpers.defaultNullOpts.mkBool false '' + To see the scores generated by the algorithm in the results, set this to true. + ''; + + show_unindexed = helpers.defaultNullOpts.mkBool true '' + Determines if non-indexed files are included in workspace filter results. + ''; + + workspace_scan_cmd = + helpers.mkNullOrOption + ( + with helpers.nixvimTypes; + either + rawLua + (listOf str) + ) + '' + This option can be set values as `"LUA"|string[]|null`. + With the default value: `null`, it uses these way below to make entries for workspace + files. + It tries in order until it works successfully. + + 1. `rg -.g '!.git' --files` + 2. `fdfind -Htf` + 3. `fd -Htf` + 4. Native Lua code (old way) + + If you like another commands, set them to this option, like + ```nix + workspace_scan_cmd = ["find" "." "-type" "f"]; + ``` + + If you prefer Native Lua code, set `workspace_scan_cmd.__raw = "LUA"`. + ''; + + workspaces = helpers.defaultNullOpts.mkAttrsOf types.str "{}" '' + This attrs contains mappings of `workspace_tag` -> `workspace_directory`. + The key corresponds to the `:tag_name` used to select the filter in queries. + The value corresponds to the top level directory by which results will be filtered. + ''; + }; + + settingsExample = { + db_root = "/home/my_username/path/to/db_root"; + show_scores = false; + show_unindexed = true; + ignore_patterns = ["*.git/*" "*/tmp/*"]; + disable_devicons = false; + workspaces = { + conf = "/home/my_username/.config"; + data = "/home/my_username/.local/share"; + project = "/home/my_username/projects"; + wiki = "/home/my_username/wiki"; + }; + }; + } diff --git a/plugins/telescope/extensions/fzf-native.nix b/plugins/telescope/extensions/fzf-native.nix new file mode 100644 index 00000000..5f783e34 --- /dev/null +++ b/plugins/telescope/extensions/fzf-native.nix @@ -0,0 +1,49 @@ +{ + lib, + helpers, + config, + pkgs, + ... +}: +( + import ./_helpers.nix {inherit lib helpers config pkgs;} +) +.mkExtension { + name = "fzf-native"; + extensionName = "fzf"; + defaultPackage = pkgs.vimPlugins.telescope-fzf-native-nvim; + + # TODO: introduced 2024-03-24, remove on 2024-05-24 + optionsRenamedToSettings = [ + "fuzzy" + "overrideGenericSorter" + "overrideFileSorter" + "caseMode" + ]; + + settingsOptions = { + fuzzy = helpers.defaultNullOpts.mkBool true '' + Whether to fuzzy search. False will do exact matching. + ''; + + override_generic_sorter = helpers.defaultNullOpts.mkBool true '' + Override the generic sorter. + ''; + + override_file_sorter = helpers.defaultNullOpts.mkBool true '' + Override the file sorter. + ''; + + case_mode = + helpers.defaultNullOpts.mkEnumFirstDefault + ["smart_case" "ignore_case" "respect_case"] + "Case mode."; + }; + + settingsExample = { + fuzzy = false; + override_generic_sorter = true; + override_file_sorter = false; + case_mode = "ignore_case"; + }; +} diff --git a/plugins/telescope/extensions/fzy-native.nix b/plugins/telescope/extensions/fzy-native.nix new file mode 100644 index 00000000..4e778507 --- /dev/null +++ b/plugins/telescope/extensions/fzy-native.nix @@ -0,0 +1,36 @@ +{ + lib, + helpers, + config, + pkgs, + ... +}: +( + import ./_helpers.nix {inherit lib helpers config pkgs;} +) +.mkExtension { + name = "fzy-native"; + extensionName = "fzy_native"; + defaultPackage = pkgs.vimPlugins.telescope-fzy-native-nvim; + + # TODO: introduced 2024-03-24, remove on 2024-05-24 + optionsRenamedToSettings = [ + "overrideFileSorter" + "overrideGenericSorter" + ]; + + settingsOptions = { + override_file_sorter = helpers.defaultNullOpts.mkBool true '' + Whether to override the file sorter. + ''; + + override_generic_sorter = helpers.defaultNullOpts.mkBool true '' + Whether to override the generic sorter. + ''; + }; + + settingsExample = { + override_file_sorter = true; + override_generic_sorter = false; + }; +} diff --git a/plugins/telescope/extensions/media-files.nix b/plugins/telescope/extensions/media-files.nix new file mode 100644 index 00000000..e416d5e5 --- /dev/null +++ b/plugins/telescope/extensions/media-files.nix @@ -0,0 +1,120 @@ +{ + lib, + helpers, + config, + pkgs, + ... +}: +with lib; + ( + import ./_helpers.nix {inherit lib helpers config pkgs;} + ) + .mkExtension { + name = "media-files"; + extensionName = "media_files"; + defaultPackage = pkgs.vimPlugins.telescope-media-files-nvim; + + # TODO: introduced 2024-03-24, remove on 2024-05-24 + optionsRenamedToSettings = [ + "filetypes" + "find_cmd" + ]; + + extraOptions = { + dependencies = let + mkDepOption = { + name, + desc, + package ? pkgs.${name}, + enabledByDefault ? false, + }: { + enable = mkOption { + type = types.bool; + default = enabledByDefault; + description = '' + Whether to install the ${name} dependency. + ${desc} + ''; + }; + + package = mkOption { + type = types.package; + default = package; + description = "The package to use for the ${name} dependency."; + }; + }; + in { + chafa = mkDepOption { + name = "chafa"; + enabledByDefault = true; + desc = "Required for image support."; + }; + + imageMagick = mkDepOption { + name = "ImageMagick"; + package = pkgs.imagemagick; + desc = "Required for svg previews."; + }; + + ffmpegthumbnailer = mkDepOption { + name = "ffmpegthumbnailer"; + desc = "Required for video preview support."; + }; + + pdftoppm = mkDepOption { + name = "pdmtoppm"; + package = pkgs.poppler_utils; + desc = "Required for pdf preview support."; + }; + + epub-thumbnailer = mkDepOption { + name = "epub-thumbnailer"; + desc = "Required for epub preview support"; + }; + + fontpreview = mkDepOption { + name = "fontpreview"; + desc = "Required for font preview support."; + }; + }; + }; + + extraConfig = cfg: { + extraPackages = flatten ( + mapAttrsToList + ( + name: { + enable, + package, + }: + optional enable package + ) + cfg.dependencies + ); + }; + + settingsOptions = { + filetypes = + helpers.defaultNullOpts.mkListOf types.str + '' + [ + "png" + "jpg" + "gif" + "mp4" + "webm" + "pdf" + ] + '' + "Filetypes whitelist."; + + find_cmd = helpers.defaultNullOpts.mkStr "fd" '' + Which find command to use. + ''; + }; + + settingsExample = { + filetypes = ["png" "webp" "jpg" "jpeg"]; + find_cmd = "rg"; + }; + } diff --git a/plugins/telescope/extensions/ui-select.nix b/plugins/telescope/extensions/ui-select.nix new file mode 100644 index 00000000..5bde4b8c --- /dev/null +++ b/plugins/telescope/extensions/ui-select.nix @@ -0,0 +1,18 @@ +{ + lib, + helpers, + config, + pkgs, + ... +}: +( + import ./_helpers.nix {inherit lib helpers config pkgs;} +) +.mkExtension { + name = "ui-select"; + defaultPackage = pkgs.vimPlugins.telescope-ui-select-nvim; + + settingsExample = { + specific_opts.codeactions = false; + }; +} diff --git a/plugins/telescope/extensions/undo.nix b/plugins/telescope/extensions/undo.nix new file mode 100644 index 00000000..4ce296b1 --- /dev/null +++ b/plugins/telescope/extensions/undo.nix @@ -0,0 +1,118 @@ +{ + lib, + helpers, + config, + pkgs, + ... +}: +with lib; let + telescopeHelpers = import ./_helpers.nix {inherit lib helpers config pkgs;}; +in + telescopeHelpers.mkExtension { + name = "undo"; + defaultPackage = pkgs.vimPlugins.telescope-undo-nvim; + + # TODO: introduced 2024-03-24, remove on 2024-05-24 + optionsRenamedToSettings = [ + "useDelta" + "useCustomCommand" + "sideBySide" + "diffContextLines" + "entryFormat" + "timeFormat" + ]; + imports = [ + ( + mkRemovedOptionModule + ["plugins" "telescope" "extensions" "undo" "mappings"] + '' + Use `plugins.telescope.extension.undo.settings.mappings` instead but beware, you need to specify the full name of the callback: + Example: + ``` + mappings = { + i = { + "" = "require('telescope-undo.actions').yank_additions"; + "" = "require('telescope-undo.actions').yank_deletions"; + "" = "require('telescope-undo.actions').restore"; + }; + n = { + "y" = "require('telescope-undo.actions').yank_additions"; + "Y" = "require('telescope-undo.actions').yank_deletions"; + "u" = "require('telescope-undo.actions').restore"; + }; + } + ``` + '' + ) + ]; + + settingsOptions = { + use_delta = helpers.defaultNullOpts.mkBool true '' + When set to true, [delta](https://github.com/dandavison/delta) is used for fancy diffs in + the preview section. + If set to false, `telescope-undo` will not use `delta` even when available and fall back to a + plain diff with treesitter highlights. + ''; + + use_custom_command = helpers.mkNullOrOption (with types; listOf str) '' + Should be in this format: `[ "bash" "-c" "echo '$DIFF' | delta" ]` + ''; + + side_by_side = helpers.defaultNullOpts.mkBool false '' + If set to true tells `delta` to render diffs side-by-side. Thus, requires `delta` to be used. + Be aware that `delta` always uses its own configuration, so it might be that you're getting + the side-by-side view even if this is set to false. + ''; + + diff_context_lines = helpers.defaultNullOpts.mkStrLuaOr types.ints.unsigned "vim.o.scrolloff" '' + Defaults to the scrolloff. + ''; + + entry_format = helpers.defaultNullOpts.mkStr "state #$ID, $STAT, $TIME" '' + The format to show on telescope for the different versions of the file. + ''; + + time_format = helpers.defaultNullOpts.mkStr "" '' + Can be set to a [Lua date format string](https://www.lua.org/pil/22.1.html). + ''; + + mappings = telescopeHelpers.mkMappingsOption { + insertDefaults = '' + { + "" = "require('telescope-undo.actions').yank_additions"; + "" = "require('telescope-undo.actions').yank_deletions"; + "" = "require('telescope-undo.actions').restore"; + } + ''; + + normalDefaults = '' + { + "y" = "require('telescope-undo.actions').yank_additions"; + "Y" = "require('telescope-undo.actions').yank_deletions"; + "u" = "require('telescope-undo.actions').restore"; + } + ''; + }; + }; + + settingsExample = { + use_delta = true; + use_custom_command = ["bash" "-c" "echo '$DIFF' | delta"]; + side_by_side = true; + diff_context_lines = 8; + entry_format = "state #$ID"; + time_format = "!%Y-%m-%dT%TZ"; + mappings = { + i = { + "" = "require('telescope-undo.actions').yank_additions"; + "" = "require('telescope-undo.actions').yank_deletions"; + "" = "require('telescope-undo.actions').restore"; + }; + n = { + "y" = "require('telescope-undo.actions').yank_additions"; + "Y" = "require('telescope-undo.actions').yank_deletions"; + "u" = "require('telescope-undo.actions').restore"; + }; + }; + }; + } diff --git a/plugins/telescope/file-browser.nix b/plugins/telescope/file-browser.nix deleted file mode 100644 index 0d94e654..00000000 --- a/plugins/telescope/file-browser.nix +++ /dev/null @@ -1,216 +0,0 @@ -{ - lib, - helpers, - config, - pkgs, - ... -}: -with lib; let - cfg = config.plugins.telescope.extensions.file_browser; - - hiddenOption = types.submodule { - options = { - fileBrowser = helpers.mkNullOrOption types.bool ""; - - folderBrowser = helpers.mkNullOrOption types.bool ""; - }; - }; - - statOption = types.submodule { - options = { - width = helpers.mkNullOrOption types.int ""; - display = helpers.mkNullOrOption types.str ""; - hl = helpers.mkNullOrOption types.str ""; - }; - }; -in { - options.plugins.telescope.extensions.file_browser = { - enable = mkEnableOption "file browser extension for telescope"; - - package = helpers.mkPackageOption "telescope file_browser" pkgs.vimPlugins.telescope-file-browser-nvim; - - theme = helpers.mkNullOrOption types.str "Custom theme, will use your global theme by default."; - - path = helpers.defaultNullOpts.mkNullable (types.either types.str helpers.nixvimTypes.rawLua) "vim.loop.cwd()" '' - Directory to browse files from. - `vim.fn.expanded` automatically. - ''; - - cwd = helpers.defaultNullOpts.mkNullable (types.either types.str helpers.nixvimTypes.rawLua) "vim.loop.cwd()" '' - Directory to browse folders from. - `vim.fn.expanded` automatically. - ''; - - cwdToPath = helpers.defaultNullOpts.mkBool false '' - Whether folder browser is launched from `path` rather than `cwd`. - ''; - - grouped = helpers.defaultNullOpts.mkBool false '' - Group initial sorting by directories and then files. - ''; - - files = helpers.defaultNullOpts.mkBool true '' - Start in file (true) or folder (false) browser. - ''; - - addDirs = helpers.defaultNullOpts.mkBool true '' - Whether the file browser shows folders. - ''; - - depth = helpers.defaultNullOpts.mkInt 1 '' - File tree depth to display, `false` for unlimited depth. - ''; - - autoDepth = helpers.defaultNullOpts.mkBool false '' - Unlimit or set `depth` to `auto_depth` & unset grouped on prompt for file_browser. - ''; - - selectBuffer = helpers.defaultNullOpts.mkBool false '' - Select current buffer if possible. - May imply `hidden=true`. - ''; - - hidden = helpers.defaultNullOpts.mkNullable (types.either types.bool hiddenOption) "false" '' - Determines whether to show hidden files or not. - ''; - - respectGitignore = helpers.defaultNullOpts.mkBool false '' - Induces slow-down w/ plenary finder (true if `fd` available). - ''; - - browseFiles = helpers.defaultNullOpts.mkLuaFn "fb_finders.browse_files" '' - A custom lua function to override for the file browser. - ''; - - browseFolders = helpers.defaultNullOpts.mkLuaFn "fb_finders.browse_folders" '' - A custom lua function to override for the folder browser. - ''; - - hideParentDir = helpers.defaultNullOpts.mkBool false '' - Hide `../` in the file browser. - ''; - - collapseDirs = helpers.defaultNullOpts.mkBool false '' - Skip with only a single (possibly hidden) sub-dir in file_browser. - ''; - - quiet = helpers.defaultNullOpts.mkBool false '' - Suppress any notification from file_browser actions. - ''; - - dirIcon = helpers.defaultNullOpts.mkStr "" '' - Change the icon for a directory. - ''; - - dirIconHl = helpers.defaultNullOpts.mkStr "Default" '' - Change the highlight group of dir icon. - ''; - - displayStat = - helpers.defaultNullOpts.mkNullable (with types; attrsOf (either bool statOption)) - "{ date = true, size = true, mode = true }" '' - Ordered stat; see upstream for more info. - ''; - - hijackNetrw = helpers.defaultNullOpts.mkBool false '' - Use telescope file browser when opening directory paths. - ''; - - useFd = helpers.defaultNullOpts.mkBool true '' - Use `fd` if available over `plenary.scandir`. - ''; - - gitStatus = helpers.defaultNullOpts.mkBool true '' - Show the git status of files (true if `git` is found). - ''; - - promptPath = helpers.defaultNullOpts.mkBool false '' - Show the current relative path from cwd as the prompt prefix. - ''; - - mappings = - helpers.mkNullOrOption ( - with types; - attrsOf (attrsOf (either str helpers.nixvimTypes.rawLua)) - ) '' - `fb_actions` mappings. - Mappings can also be a lua function. - ''; - }; - - config = let - options = with cfg; { - inherit - depth - cwd - files - grouped - path - quiet - theme - ; - add_dirs = addDirs; - auto_depth = autoDepth; - browse_files = browseFiles; - browse_folders = browseFolders; - collapse_dirs = collapseDirs; - cwd_to_path = cwdToPath; - dir_icon = dirIcon; - dir_icon_hl = dirIconHl; - display_stat = - helpers.ifNonNull' displayStat - ( - with builtins; - mapAttrs ( - _: attr: - if isBool attr - then attr - else - attr - // { - display = helpers.mkRaw attr.display; - } - ) - displayStat - ); - - git_status = gitStatus; - hidden = helpers.ifNonNull' hidden ( - if isBool hidden - then hidden - else - with hidden; { - file_browser = fileBrowser; - folder_browser = folderBrowser; - } - ); - hide_parent_dir = hideParentDir; - hijack_netrw = hijackNetrw; - mappings = helpers.ifNonNull' mappings ( - with builtins; - mapAttrs ( - _: - mapAttrs ( - _: action: - if isString action - then helpers.mkRaw "require('telescope._extensions.file_browser.actions').${action}" - else action - ) - ) - mappings - ); - prompt_path = promptPath; - respect_gitignore = respectGitignore; - select_buffer = selectBuffer; - use_fd = useFd; - }; - in - mkIf cfg.enable { - extraPlugins = [cfg.package]; - - plugins.telescope = { - enabledExtensions = ["file_browser"]; - settings.extensions.file_browser = options; - }; - }; -} diff --git a/plugins/telescope/frecency.nix b/plugins/telescope/frecency.nix deleted file mode 100644 index b01f5560..00000000 --- a/plugins/telescope/frecency.nix +++ /dev/null @@ -1,76 +0,0 @@ -{ - lib, - helpers, - config, - pkgs, - ... -}: -with lib; let - cfg = config.plugins.telescope.extensions.frecency; -in { - options.plugins.telescope.extensions.frecency = { - enable = mkEnableOption "frecency"; - - package = helpers.mkPackageOption "telescope extension frecency" pkgs.vimPlugins.telescope-frecency-nvim; - - dbRoot = mkOption { - type = types.nullOr types.str; - description = "Path to parent directory of custom database location. Defaults to $XDG_DATA_HOME/nvim"; - default = null; - }; - defaultWorkspace = mkOption { - type = types.nullOr types.str; - description = "Default workspace tag to filter by e.g 'CWD' to filter by default to the current directory"; - default = null; - }; - ignorePatterns = mkOption { - type = types.nullOr (types.listOf types.str); - description = "Patterns in this list control which files are indexed"; - default = null; - }; - showScores = mkOption { - type = types.nullOr types.bool; - description = "Whether to show scores generated by the algorithm in the results"; - default = null; - }; - workspaces = mkOption { - type = types.nullOr (types.attrsOf types.str); - description = "this table contains mappings of workspace_tag -> workspace_directory"; - default = null; - }; - showUnindexed = mkOption { - type = types.nullOr types.bool; - description = "Determines if non-indexed files are included in workspace filter results"; - default = null; - }; - deviconsDisabled = mkOption { - type = types.nullOr types.bool; - description = "Disable devicons (if available)"; - default = null; - }; - }; - - config = let - configuration = { - db_root = cfg.dbRoot; - default_workspace = cfg.defaultWorkspace; - ignore_patterns = cfg.ignorePatterns; - show_scores = cfg.showScores; - inherit (cfg) workspaces; - show_unindexed = cfg.showUnindexed; - devicons_disabled = cfg.deviconsDisabled; - }; - in - mkIf cfg.enable { - extraPackages = [pkgs.sqlite]; - extraPlugins = with pkgs.vimPlugins; [ - cfg.package - sqlite-lua - ]; - - plugins.telescope = { - enabledExtensions = ["frecency"]; - settings.extensions.frecency = configuration; - }; - }; -} diff --git a/plugins/telescope/fzf-native.nix b/plugins/telescope/fzf-native.nix deleted file mode 100644 index 1579e535..00000000 --- a/plugins/telescope/fzf-native.nix +++ /dev/null @@ -1,53 +0,0 @@ -{ - lib, - helpers, - config, - pkgs, - ... -}: -with lib; let - cfg = config.plugins.telescope.extensions.fzf-native; -in { - options.plugins.telescope.extensions.fzf-native = { - enable = mkEnableOption "fzf-native"; - - package = helpers.mkPackageOption "telescope extension fzf-native" pkgs.vimPlugins.telescope-fzf-native-nvim; - - fuzzy = mkOption { - type = types.nullOr types.bool; - description = "Whether to fuzzy search. False will do exact matching"; - default = null; - }; - overrideGenericSorter = mkOption { - type = types.nullOr types.bool; - description = "Override the generice sorter"; - default = null; - }; - overrideFileSorter = mkOption { - type = types.nullOr types.bool; - description = "Override the file sorter"; - default = null; - }; - caseMode = mkOption { - type = types.nullOr (types.enum ["smart_case" "ignore_case" "respect_case"]); - default = null; - }; - }; - - config = let - configuration = { - inherit (cfg) fuzzy; - override_generic_sorter = cfg.overrideGenericSorter; - override_file_sorter = cfg.overrideFileSorter; - case_mode = cfg.caseMode; - }; - in - mkIf cfg.enable { - extraPlugins = [cfg.package]; - - plugins.telescope = { - enabledExtensions = ["fzf"]; - settings.extensions.fzf = configuration; - }; - }; -} diff --git a/plugins/telescope/fzy-native.nix b/plugins/telescope/fzy-native.nix deleted file mode 100644 index 0484f71b..00000000 --- a/plugins/telescope/fzy-native.nix +++ /dev/null @@ -1,39 +0,0 @@ -{ - pkgs, - config, - lib, - ... -}: -with lib; let - cfg = config.plugins.telescope.extensions.fzy-native; -in { - options.plugins.telescope.extensions.fzy-native = { - enable = mkEnableOption "fzy-native"; - - overrideGenericSorter = mkOption { - type = types.nullOr types.bool; - description = "Override the generice sorter"; - default = null; - }; - overrideFileSorter = mkOption { - type = types.nullOr types.bool; - description = "Override the file sorter"; - default = null; - }; - }; - - config = let - configuration = { - override_generic_sorter = cfg.overrideGenericSorter; - override_file_sorter = cfg.overrideFileSorter; - }; - in - mkIf cfg.enable { - extraPlugins = [pkgs.vimPlugins.telescope-fzy-native-nvim]; - - plugins.telescope = { - enabledExtensions = ["fzy_native"]; - settings.extensions.fzy_native = options; - }; - }; -} diff --git a/plugins/telescope/media-files.nix b/plugins/telescope/media-files.nix deleted file mode 100644 index 75755acd..00000000 --- a/plugins/telescope/media-files.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ - lib, - helpers, - config, - pkgs, - ... -}: -with lib; let - cfg = config.plugins.telescope.extensions.media_files; -in { - options.plugins.telescope.extensions.media_files = { - enable = mkEnableOption "media_files extension for telescope"; - - package = helpers.mkPackageOption "telescope extension media_files" pkgs.vimPlugins.telescope-media-files-nvim; - - filetypes = mkOption { - default = null; - type = with types; nullOr (listOf str); - }; - - find_cmd = mkOption { - default = null; - type = with types; nullOr str; - example = ''"rg"''; - }; - }; - - config = mkIf cfg.enable { - plugins.telescope = { - enabledExtensions = ["media_files"]; - }; - - extraPlugins = with pkgs.vimPlugins; [ - popup-nvim - plenary-nvim - cfg.package - ]; - - extraPackages = with pkgs; [ - ueberzug - ]; - }; -} diff --git a/plugins/telescope/ui-select.nix b/plugins/telescope/ui-select.nix deleted file mode 100644 index 04c63553..00000000 --- a/plugins/telescope/ui-select.nix +++ /dev/null @@ -1,34 +0,0 @@ -{ - lib, - helpers, - config, - pkgs, - ... -}: -with lib; let - cfg = config.plugins.telescope.extensions.ui-select; -in { - options.plugins.telescope.extensions.ui-select = { - enable = mkEnableOption "ui-select extension for telescope"; - - package = helpers.mkPackageOption "telescope extension ui-select" pkgs.vimPlugins.telescope-ui-select-nvim; - - settings = mkOption { - type = with types; attrsOf anything; - default = {}; - example = { - specific_opts.codeactions = false; - }; - description = "Settings for this extension."; - }; - }; - - config = mkIf cfg.enable { - plugins.telescope = { - enabledExtensions = ["ui-select"]; - settings.extensions.ui-select = cfg.settings; - }; - - extraPlugins = [cfg.package]; - }; -} diff --git a/plugins/telescope/undo.nix b/plugins/telescope/undo.nix deleted file mode 100644 index c8950c36..00000000 --- a/plugins/telescope/undo.nix +++ /dev/null @@ -1,115 +0,0 @@ -{ - lib, - helpers, - config, - pkgs, - ... -}: -with lib; let - cfg = config.plugins.telescope.extensions.undo; -in { - options.plugins.telescope.extensions.undo = { - enable = mkEnableOption "undo"; - - package = helpers.mkPackageOption "telescope extension undo" pkgs.vimPlugins.telescope-undo-nvim; - - useDelta = helpers.defaultNullOpts.mkBool true '' - When set to true, [delta](https://github.com/dandavison/delta) is used for fancy diffs in the preview section. - If set to false, `telescope-undo` will not use `delta` even when available and fall back to a plain diff with - treesitter highlights. - ''; - - useCustomCommand = helpers.mkNullOrOption (with types; listOf str) '' - should be in this format: [ "bash" "-c" "echo '$DIFF' | delta" ] - ''; - - sideBySide = helpers.defaultNullOpts.mkBool false '' - If set to true tells `delta` to render diffs side-by-side. Thus, requires `delta` to be - used. Be aware that `delta` always uses its own configuration, so it might be that you're getting - the side-by-side view even if this is set to false. - ''; - - diffContextLines = helpers.defaultNullOpts.mkStrLuaOr types.ints.unsigned "vim.o.scrolloff" '' - Defaults to the scrolloff. - ''; - - entryFormat = helpers.defaultNullOpts.mkStr "state #$ID, $STAT, $TIME" '' - The format to show on telescope for the different versions of the file. - ''; - - timeFormat = helpers.defaultNullOpts.mkStr "" '' - Can be set to a [Lua date format string](https://www.lua.org/pil/22.1.html). - ''; - - mappings = { - i = - helpers.defaultNullOpts.mkNullable - ( - with types; - attrsOf str - ) - '' - { - "" = "yank_additions"; - "" = "yank_deletions"; - "" = "restore"; - } - '' - "Keymaps in insert mode"; - n = - helpers.defaultNullOpts.mkNullable - ( - with types; - attrsOf str - ) - '' - { - "y" = "yank_additions"; - "Y" = "yank_deletions"; - "u" = "restore"; - } - '' - "Keymaps in normal mode"; - }; - }; - - config = let - configuration = with cfg; { - use_delta = useDelta; - use_custom_command = useCustomCommand; - side_by_side = sideBySide; - diff_context_lines = diffContextLines; - entry_format = entryFormat; - time_format = timeFormat; - mappings = with mappings; { - i = - helpers.ifNonNull' i - ( - mapAttrs - (key: action: - helpers.mkRaw "require('telescope-undo.actions').${action}") - i - ); - - n = - helpers.ifNonNull' n - ( - mapAttrs - (key: action: - helpers.mkRaw "require('telescope-undo.actions').${action}") - n - ); - }; - }; - in - mkIf - cfg.enable - { - extraPlugins = [cfg.package]; - - plugins.telescope = { - enabledExtensions = ["undo"]; - settings.extensions.undo = configuration; - }; - }; -} diff --git a/tests/test-sources/plugins/telescope/file-browser.nix b/tests/test-sources/plugins/telescope/file-browser.nix new file mode 100644 index 00000000..168c0418 --- /dev/null +++ b/tests/test-sources/plugins/telescope/file-browser.nix @@ -0,0 +1,86 @@ +{ + empty = { + plugins.telescope = { + enable = true; + extensions.file-browser.enable = true; + }; + }; + + defaults = { + plugins.telescope = { + enable = true; + + extensions.file-browser = { + enable = true; + + settings = { + theme = null; + path.__raw = "vim.loop.cwd()"; + cwd.__raw = "vim.loop.cwd()"; + cwd_to_path = false; + grouped = false; + files = true; + add_dirs = true; + depth = 1; + auto_depth = false; + select_buffer = false; + hidden = { + file_browser = false; + folder_browser = false; + }; + respect_gitignore = false; + browse_files = "require('telescope._extensions.file_browser.finders').browse_files"; + browse_folders = "require('telescope._extensions.file_browser.finders').browse_folders"; + hide_parent_dir = false; + collapse_dirs = false; + quiet = false; + dir_icon = ""; + dir_icon_hl = "Default"; + display_stat = { + date = true; + size = true; + mode = true; + }; + hijack_netrw = false; + use_fd = true; + git_status = true; + prompt_path = false; + mappings = { + i = { + "" = "require('telescope._extensions.file_browser.actions').create"; + "" = "require('telescope._extensions.file_browser.actions').create_from_prompt"; + "" = "require('telescope._extensions.file_browser.actions').rename"; + "" = "require('telescope._extensions.file_browser.actions').move"; + "" = "require('telescope._extensions.file_browser.actions').copy"; + "" = "require('telescope._extensions.file_browser.actions').remove"; + "" = "require('telescope._extensions.file_browser.actions').open"; + "" = "require('telescope._extensions.file_browser.actions').goto_parent_dir"; + "" = "require('telescope._extensions.file_browser.actions').goto_home_dir"; + "" = "require('telescope._extensions.file_browser.actions').goto_cwd"; + "" = "require('telescope._extensions.file_browser.actions').change_cwd"; + "" = "require('telescope._extensions.file_browser.actions').toggle_browser"; + "" = "require('telescope._extensions.file_browser.actions').toggle_hidden"; + "" = "require('telescope._extensions.file_browser.actions').toggle_all"; + "" = "require('telescope._extensions.file_browser.actions').backspace"; + }; + 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"; + "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"; + }; + }; + }; + }; + }; + }; +} diff --git a/tests/test-sources/plugins/telescope/frecency.nix b/tests/test-sources/plugins/telescope/frecency.nix new file mode 100644 index 00000000..768fb094 --- /dev/null +++ b/tests/test-sources/plugins/telescope/frecency.nix @@ -0,0 +1,73 @@ +{ + empty = { + # A warning is displayed on stdout + tests.dontRun = true; + + plugins.telescope = { + enable = true; + extensions.frecency.enable = true; + }; + }; + + defaults = { + # A warning is displayed on stdout + tests.dontRun = true; + + plugins.telescope = { + enable = true; + + extensions.frecency = { + enable = true; + + settings = { + auto_validate = true; + db_root.__raw = "vim.fn.stdpath 'data'"; + db_safe_mode = true; + db_validate_threshold = 10; + default_workspace = null; + disable_devicons = false; + hide_current_buffer = false; + filter_delimiter = ":"; + ignore_patterns = [ + "*.git/*" + "*/tmp/*" + "term://*" + ]; + max_timestamps = 10; + show_filter_column = true; + show_scores = false; + show_unindexed = true; + workspace_scan_cmd = null; + workspaces = {}; + }; + }; + }; + }; + + example = { + # A warning is displayed on stdout + tests.dontRun = true; + + plugins.telescope = { + enable = true; + + extensions.frecency = { + enable = true; + + settings = { + db_root = "/home/my_username/path/to/db_root"; + show_scores = false; + show_unindexed = true; + ignore_patterns = ["*.git/*" "*/tmp/*"]; + disable_devicons = false; + workspaces = { + conf = "/home/my_username/.config"; + data = "/home/my_username/.local/share"; + project = "/home/my_username/projects"; + wiki = "/home/my_username/wiki"; + }; + }; + }; + }; + }; +} diff --git a/tests/test-sources/plugins/telescope/fzf-native.nix b/tests/test-sources/plugins/telescope/fzf-native.nix new file mode 100644 index 00000000..7cf63acd --- /dev/null +++ b/tests/test-sources/plugins/telescope/fzf-native.nix @@ -0,0 +1,25 @@ +{ + empty = { + plugins.telescope = { + enable = true; + extensions.fzf-native.enable = true; + }; + }; + + defaults = { + plugins.telescope = { + enable = true; + + extensions.fzf-native = { + enable = true; + + settings = { + fuzzy = true; + override_generic_sorter = true; + override_file_sorter = true; + case_mode = "smart_case"; + }; + }; + }; + }; +} diff --git a/tests/test-sources/plugins/telescope/fzy-native.nix b/tests/test-sources/plugins/telescope/fzy-native.nix new file mode 100644 index 00000000..f6f34747 --- /dev/null +++ b/tests/test-sources/plugins/telescope/fzy-native.nix @@ -0,0 +1,23 @@ +{ + empty = { + plugins.telescope = { + enable = true; + extensions.fzy-native.enable = true; + }; + }; + + example = { + plugins.telescope = { + enable = true; + + extensions.fzy-native = { + enable = true; + + settings = { + override_file_sorter = true; + override_generic_sorter = false; + }; + }; + }; + }; +} diff --git a/tests/test-sources/plugins/telescope/media-files.nix b/tests/test-sources/plugins/telescope/media-files.nix new file mode 100644 index 00000000..c13b6fab --- /dev/null +++ b/tests/test-sources/plugins/telescope/media-files.nix @@ -0,0 +1,50 @@ +{pkgs, ...}: { + empty = { + plugins.telescope = { + enable = true; + extensions.media-files.enable = true; + }; + }; + + defaults = { + plugins.telescope = { + enable = true; + + extensions.media-files = { + enable = true; + + settings = { + filetypes = [ + "png" + "jpg" + "gif" + "mp4" + "webm" + "pdf" + ]; + + find_cmd = "fd"; + }; + }; + }; + }; + + dependencies = { + plugins.telescope = { + enable = true; + + extensions.media-files = { + enable = true; + + dependencies = { + chafa.enable = true; + imageMagick.enable = true; + ffmpegthumbnailer.enable = true; + pdftoppm.enable = true; + epub-thumbnailer.enable = pkgs.stdenv.isLinux; + fontpreview.enable = pkgs.stdenv.isLinux; + }; + }; + }; + }; +} diff --git a/tests/test-sources/plugins/telescope/undo.nix b/tests/test-sources/plugins/telescope/undo.nix index 434865b5..a6807f13 100644 --- a/tests/test-sources/plugins/telescope/undo.nix +++ b/tests/test-sources/plugins/telescope/undo.nix @@ -13,22 +13,24 @@ extensions.undo = { enable = true; - useDelta = true; - useCustomCommand = ["bash" "-c" "echo '$DIFF' | delta"]; - sideBySide = true; - diffContextLines = 8; - entryFormat = "state #$ID"; - timeFormat = "!%Y-%m-%dT%TZ"; - mappings = { - i = { - "" = "yank_additions"; - "" = "yank_deletions"; - "" = "restore"; - }; - n = { - "y" = "yank_additions"; - "Y" = "yank_deletions"; - "u" = "restore"; + settings = { + use_delta = true; + use_custom_command = ["bash" "-c" "echo '$DIFF' | delta"]; + side_by_side = true; + diff_context_lines = 8; + entry_format = "state #$ID"; + time_format = "!%Y-%m-%dT%TZ"; + mappings = { + i = { + "" = "require('telescope-undo.actions').yank_additions"; + "" = "require('telescope-undo.actions').yank_deletions"; + "" = "require('telescope-undo.actions').restore"; + }; + n = { + "y" = "require('telescope-undo.actions').yank_additions"; + "Y" = "require('telescope-undo.actions').yank_deletions"; + "u" = "require('telescope-undo.actions').restore"; + }; }; }; };