diff --git a/modules/utility/telescope/config.nix b/modules/utility/telescope/config.nix index d9a156f..4e60f22 100644 --- a/modules/utility/telescope/config.nix +++ b/modules/utility/telescope/config.nix @@ -11,7 +11,7 @@ inherit (lib) pushDownDefault; cfg = config.vim.telescope; - self = import ./telescope.nix {inherit lib;}; + self = import ./telescope.nix {inherit pkgs lib;}; mappingDefinitions = self.options.vim.telescope.mappings; mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions; @@ -66,52 +66,7 @@ in { vim.luaConfigRC.telescope = entryAnywhere '' local telescope = require('telescope') - telescope.setup { - defaults = { - vimgrep_arguments = { - "${pkgs.ripgrep}/bin/rg", - "--color=never", - "--no-heading", - "--with-filename", - "--line-number", - "--column", - "--smart-case", - "--hidden", - "--no-ignore", - }, - pickers = { - find_command = { - "${pkgs.fd}/bin/fd", - }, - }, - }, - prompt_prefix = "  ", - selection_caret = " ", - entry_prefix = " ", - initial_mode = "insert", - selection_strategy = "reset", - sorting_strategy = "ascending", - layout_strategy = "horizontal", - layout_config = { - horizontal = { - prompt_position = "top", - preview_width = 0.55, - results_width = 0.8, - }, - vertical = { - mirror = false, - }, - width = 0.8, - height = 0.8, - preview_cutoff = 120, - }, - file_ignore_patterns = { "node_modules", ".git/", "dist/", "build/", "target/", "result/" }, -- TODO: make this configurable - color_devicons = true, - path_display = { "absolute" }, - set_env = { ["COLORTERM"] = "truecolor" }, - winblend = 0, - border = {}, - } + telescope.setup(${nvim.lua.toLuaObject cfg.setupOpts}) ${ if config.vim.ui.noice.enable diff --git a/modules/utility/telescope/telescope.nix b/modules/utility/telescope/telescope.nix index fd8d2f3..27fa98a 100644 --- a/modules/utility/telescope/telescope.nix +++ b/modules/utility/telescope/telescope.nix @@ -1,6 +1,62 @@ -{lib, ...}: let - inherit (lib.options) mkEnableOption; +{ + pkgs, + lib, + ... +}: let + inherit (lib.options) mkEnableOption mkOption; + inherit (lib.types) int str listOf float bool; inherit (lib.nvim.binds) mkMappingOption; + inherit (lib.nvim.types) mkPluginSetupOption; + mkOptOfType = type: default: + mkOption { + # TODO: description + description = "See plugin docs for more info"; + inherit type default; + }; + + setupOptions = { + defaults = { + vimgrep_arguments = mkOptOfType (listOf str) [ + "${pkgs.ripgrep}/bin/rg" + "--color=never" + "--no-heading" + "--with-filename" + "--line-number" + "--column" + "--smart-case" + "--hidden" + "--no-ignore" + ]; + pickers.find_command = mkOptOfType (listOf str) ["${pkgs.fd}/bin/fd"]; + prompt_prefix = mkOptOfType str "  "; + selection_caret = mkOptOfType str " "; + entry_prefix = mkOptOfType str " "; + initial_mode = mkOptOfType str "insert"; + selection_strategy = mkOptOfType str "reset"; + sorting_strategy = mkOptOfType str "ascending"; + layout_strategy = mkOptOfType str "horizontal"; + layout_config = { + horizontal = { + prompt_position = mkOptOfType str "top"; + preview_width = mkOptOfType float 0.55; + results_width = mkOptOfType float 0.8; + }; + vertical = { + mirror = mkOptOfType bool false; + }; + width = mkOptOfType float 0.8; + height = mkOptOfType float 0.8; + preview_cutoff = mkOptOfType int 120; + }; + file_ignore_patterns = mkOptOfType (listOf str) ["node_modules" ".git/" "dist/" "build/" "target/" "result/"]; + color_devicons = mkOptOfType bool true; + path_display = mkOptOfType (listOf str) ["absolute"]; + set_env = { + COLORTERM = mkOptOfType str "truecolor"; + }; + winblend = mkOptOfType int 0; + }; + }; in { options.vim.telescope = { mappings = { @@ -30,5 +86,7 @@ in { }; enable = mkEnableOption "telescope.nvim: multi-purpose search and picker utility"; + + setupOpts = mkPluginSetupOption "Telescope" setupOptions; }; }