diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 82f3b2ea0b..6f06e3127f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -71,7 +71,7 @@ You will then need to add Nix options for all (or most) of the upstream plugin o These options should be in `camelCase` (whereas most plugins define their options in `snake_case`), and their names should match exactly (except the case) to the upstream names. There are a number of helpers to help you correctly implement them: -- `helpers.mkPlugin`: This helper is useful for simple plugins that are configured through (vim) global variables. +- `helpers.vim-plugin.mkPlugin`: This helper is useful for simple plugins that are configured through (vim) global variables. - `helpers.defaultNullOpts.{mkBool,mkInt,mkStr,...}`: This family of helpers takes a default value and a description, and sets the Nix default to `null`. These are the main functions you should use to define options. - `helpers.defaultNullOpts.mkNullable`: This takes a type, a default and a description. This is useful for more complex options. - `helpers.nixvimTypes.rawLua`: A type to represent raw lua code. The values are of the form `{ __raw = "";}`. This should not be used if the option can only be raw lua code, `mkLua`/`mkLuaFn` should be used in this case. diff --git a/lib/helpers.nix b/lib/helpers.nix index 47d4b22df5..cafdae0142 100644 --- a/lib/helpers.nix +++ b/lib/helpers.nix @@ -3,6 +3,7 @@ with lib; rec { maintainers = import ./maintainers.nix; keymaps = import ./keymap-helpers.nix {inherit lib;}; autocmd = import ./autocmd-helpers.nix {inherit lib;}; + vim-plugin = import ./vim-plugin.nix {inherit lib mkPackageOption;}; # vim dictionaries are, in theory, compatible with JSON toVimDict = args: @@ -301,105 +302,6 @@ with lib; rec { description = "Plugin to use for ${name}"; }; - mkPlugin = { - config, - lib, - ... - }: { - name, - description ? null, - package ? null, - extraPlugins ? [], - extraPackages ? [], - options ? {}, - globalPrefix ? "", - ... - }: let - cfg = config.plugins.${name}; - - # TODO support nested options! - pluginOptions = - mapAttrs - ( - optName: opt: - opt.option - ) - options; - globals = - mapAttrs' - (optName: opt: { - name = let - optGlobal = - if opt.global == null - then optName - else opt.global; - in - globalPrefix + optGlobal; - value = cfg.${optName}; - }) - options; - # does this evaluate package? - packageOption = - if package == null - then {} - else { - package = mkPackageOption name package; - }; - - extraConfigOption = - if (isString globalPrefix) && (globalPrefix != "") - then { - extraConfig = mkOption { - type = with types; attrsOf anything; - description = '' - The configuration options for ${name} without the '${globalPrefix}' prefix. - Example: To set '${globalPrefix}_foo_bar' to 1, write - ```nix - extraConfig = { - foo_bar = true; - }; - ``` - ''; - default = {}; - }; - } - else {}; - in { - options.plugins.${name} = - { - enable = mkEnableOption ( - if description == null - then name - else description - ); - } - // extraConfigOption - // packageOption - // pluginOptions; - - config = mkIf cfg.enable { - inherit extraPackages globals; - # does this evaluate package? it would not be desired to evaluate pacakge if we use another package. - extraPlugins = extraPlugins ++ optional (package != null) cfg.package; - }; - }; - - mkDefaultOpt = { - type, - global ? null, - description ? null, - example ? null, - default ? null, - ... - }: { - option = mkOption { - type = types.nullOr type; - inherit default description example; - }; - - inherit global; - }; - extraOptionsOptions = { extraOptions = mkOption { default = {}; diff --git a/lib/vim-plugin.nix b/lib/vim-plugin.nix new file mode 100644 index 0000000000..8514e6f198 --- /dev/null +++ b/lib/vim-plugin.nix @@ -0,0 +1,104 @@ +{ + lib, + mkPackageOption, +}: +with lib; { + mkPlugin = { + config, + lib, + ... + }: { + name, + description ? null, + package ? null, + extraPlugins ? [], + extraPackages ? [], + options ? {}, + globalPrefix ? "", + ... + }: let + cfg = config.plugins.${name}; + + # TODO support nested options! + pluginOptions = + mapAttrs + ( + optName: opt: + opt.option + ) + options; + globals = + mapAttrs' + (optName: opt: { + name = let + optGlobal = + if opt.global == null + then optName + else opt.global; + in + globalPrefix + optGlobal; + value = cfg.${optName}; + }) + options; + # does this evaluate package? + packageOption = + if package == null + then {} + else { + package = mkPackageOption name package; + }; + + extraConfigOption = + if (isString globalPrefix) && (globalPrefix != "") + then { + extraConfig = mkOption { + type = with types; attrsOf anything; + description = '' + The configuration options for ${name} without the '${globalPrefix}' prefix. + Example: To set '${globalPrefix}_foo_bar' to 1, write + ```nix + extraConfig = { + foo_bar = true; + }; + ``` + ''; + default = {}; + }; + } + else {}; + in { + options.plugins.${name} = + { + enable = mkEnableOption ( + if description == null + then name + else description + ); + } + // extraConfigOption + // packageOption + // pluginOptions; + + config = mkIf cfg.enable { + inherit extraPackages globals; + # does this evaluate package? it would not be desired to evaluate pacakge if we use another package. + extraPlugins = extraPlugins ++ optional (package != null) cfg.package; + }; + }; + + mkDefaultOpt = { + type, + global ? null, + description ? null, + example ? null, + default ? null, + ... + }: { + option = mkOption { + type = types.nullOr type; + inherit default description example; + }; + + inherit global; + }; +} diff --git a/plugins/completion/copilot-vim.nix b/plugins/completion/copilot-vim.nix index 91eed191f9..ea0cb7dc0d 100644 --- a/plugins/completion/copilot-vim.nix +++ b/plugins/completion/copilot-vim.nix @@ -5,7 +5,7 @@ } @ args: with lib; ( - with import ../helpers.nix {inherit lib;}; + with (import ../helpers.nix {inherit lib;}).vim-plugin; mkPlugin args { name = "copilot-vim"; description = "copilot.vim"; diff --git a/plugins/completion/nvim-cmp/cmp-helpers.nix b/plugins/completion/nvim-cmp/cmp-helpers.nix index d941b9c9d2..fa02837aa4 100644 --- a/plugins/completion/nvim-cmp/cmp-helpers.nix +++ b/plugins/completion/nvim-cmp/cmp-helpers.nix @@ -6,7 +6,7 @@ }: let helpers = import ../../helpers.nix {inherit lib;}; in - with helpers; + with helpers.vim-plugin; with lib; { mkCmpSourcePlugin = { name, diff --git a/plugins/git/fugitive.nix b/plugins/git/fugitive.nix index 129f17b333..9d7465e5dd 100644 --- a/plugins/git/fugitive.nix +++ b/plugins/git/fugitive.nix @@ -5,7 +5,7 @@ } @ attrs: let helpers = import ../helpers.nix {inherit lib;}; in - with helpers; + with helpers.vim-plugin; with lib; mkPlugin attrs { name = "fugitive"; diff --git a/plugins/languages/ledger.nix b/plugins/languages/ledger.nix index d39c54c525..d77e20cd0a 100644 --- a/plugins/languages/ledger.nix +++ b/plugins/languages/ledger.nix @@ -4,7 +4,7 @@ ... } @ args: with lib; -with import ../helpers.nix {inherit lib;}; +with (import ../helpers.nix {inherit lib;}).vim-plugin; mkPlugin args { name = "ledger"; description = "ledger language features"; diff --git a/plugins/languages/markdown-preview.nix b/plugins/languages/markdown-preview.nix index fb4b8c04c0..500c9154b5 100644 --- a/plugins/languages/markdown-preview.nix +++ b/plugins/languages/markdown-preview.nix @@ -5,7 +5,7 @@ ... } @ args: with lib; -with import ../helpers.nix {inherit lib;}; +with (import ../helpers.nix {inherit lib;}).vim-plugin; mkPlugin args { name = "markdown-preview"; description = "markdown-preview.nvim"; diff --git a/plugins/languages/nix.nix b/plugins/languages/nix.nix index 6ee166de03..e7550b284e 100644 --- a/plugins/languages/nix.nix +++ b/plugins/languages/nix.nix @@ -5,7 +5,7 @@ } @ attrs: let helpers = import ../helpers.nix {inherit lib;}; in - with helpers; + with helpers.vim-plugin; with lib; mkPlugin attrs { name = "nix"; diff --git a/plugins/languages/tagbar.nix b/plugins/languages/tagbar.nix index fd24950bae..c383b66023 100644 --- a/plugins/languages/tagbar.nix +++ b/plugins/languages/tagbar.nix @@ -4,7 +4,7 @@ ... } @ args: with lib; -with import ../helpers.nix {inherit lib;}; +with (import ../helpers.nix {inherit lib;}).vim-plugin; mkPlugin args { name = "tagbar"; package = pkgs.vimPlugins.tagbar; diff --git a/plugins/languages/vim-slime.nix b/plugins/languages/vim-slime.nix index c2b8e9e9da..1f77b85f33 100644 --- a/plugins/languages/vim-slime.nix +++ b/plugins/languages/vim-slime.nix @@ -2,122 +2,124 @@ lib, pkgs, ... -} @ args: -with lib; -with import ../helpers.nix {inherit lib;}; - mkPlugin args { - name = "vim-slime"; - package = pkgs.vimPlugins.vim-slime; - globalPrefix = "slime_"; - - options = { - target = mkDefaultOpt { - type = types.enum [ - "dtach" - "kitty" - "neovim" - "screen" - "tmux" - "vimterminal" - "wezterm" - "whimrepl" - "x11" - "zellij" - ]; - description = '' - Which backend vim-slime should use. - - Default: "screen" - ''; - example = "dtach"; +} @ args: let + helpers = import ../helpers.nix {inherit lib;}; +in + with lib; + with helpers.vim-plugin; + mkPlugin args { + name = "vim-slime"; + package = pkgs.vimPlugins.vim-slime; + globalPrefix = "slime_"; + + options = { + target = mkDefaultOpt { + type = types.enum [ + "dtach" + "kitty" + "neovim" + "screen" + "tmux" + "vimterminal" + "wezterm" + "whimrepl" + "x11" + "zellij" + ]; + description = '' + Which backend vim-slime should use. + + Default: "screen" + ''; + example = "dtach"; + }; + + vimterminalCmd = mkDefaultOpt { + global = "vimterminal_cmd"; + type = types.str; + description = "The vim terminal command to execute."; + }; + + noMappings = mkDefaultOpt { + global = "no_mappings"; + type = types.bool; + description = '' + Whether to disable the default mappings. + + Default: `false` + ''; + }; + + pasteFile = mkDefaultOpt { + global = "paste_file"; + type = types.str; + description = '' + Required to transfer data from vim to GNU screen or tmux. + Setting this explicitly can work around some occasional portability issues. + whimrepl does not require or support this setting. + + Default: "$HOME/.slime_paste" + ''; + }; + + preserveCurpos = mkDefaultOpt { + global = "preserve_curpos"; + type = types.bool; + description = '' + Whether to preserve cursor position when sending a line or paragraph. + + Default: `true` + ''; + }; + + defaultConfig = mkDefaultOpt { + global = "default_config"; + type = with helpers.nixvimTypes; attrsOf (either str rawLua); + description = '' + Pre-filled prompt answer. + + Default: `null` + + Examples: + - `tmux`: + ```nix + { + socket_name = "default"; + target_pane = "{last}"; + } + ``` + - `zellij`: + ```nix + { + session_id = "current"; + relative_pane = "right"; + } + ``` + ''; + }; + + dontAskDefault = mkDefaultOpt { + global = "dont_ask_default"; + type = types.bool; + description = '' + Whether to bypass the prompt and use the specified default configuration options. + + Default: `false` + ''; + }; + + bracketedPaste = mkDefaultOpt { + global = "bracketed_paste"; + type = with types; nullOr bool; + description = '' + Sometimes REPL are too smart for their own good, e.g. autocompleting a bracket that should + not be autocompleted when pasting code from a file. + In this case it can be useful to rely on bracketed-paste + (https://cirw.in/blog/bracketed-paste). + Luckily, tmux knows how to handle that. See tmux's manual. + + Default: `false` + ''; + }; }; - - vimterminalCmd = mkDefaultOpt { - global = "vimterminal_cmd"; - type = types.str; - description = "The vim terminal command to execute."; - }; - - noMappings = mkDefaultOpt { - global = "no_mappings"; - type = types.bool; - description = '' - Whether to disable the default mappings. - - Default: `false` - ''; - }; - - pasteFile = mkDefaultOpt { - global = "paste_file"; - type = types.str; - description = '' - Required to transfer data from vim to GNU screen or tmux. - Setting this explicitly can work around some occasional portability issues. - whimrepl does not require or support this setting. - - Default: "$HOME/.slime_paste" - ''; - }; - - preserveCurpos = mkDefaultOpt { - global = "preserve_curpos"; - type = types.bool; - description = '' - Whether to preserve cursor position when sending a line or paragraph. - - Default: `true` - ''; - }; - - defaultConfig = mkDefaultOpt { - global = "default_config"; - type = with nixvimTypes; attrsOf (either str rawLua); - description = '' - Pre-filled prompt answer. - - Default: `null` - - Examples: - - `tmux`: - ```nix - { - socket_name = "default"; - target_pane = "{last}"; - } - ``` - - `zellij`: - ```nix - { - session_id = "current"; - relative_pane = "right"; - } - ``` - ''; - }; - - dontAskDefault = mkDefaultOpt { - global = "dont_ask_default"; - type = types.bool; - description = '' - Whether to bypass the prompt and use the specified default configuration options. - - Default: `false` - ''; - }; - - bracketedPaste = mkDefaultOpt { - global = "bracketed_paste"; - type = with types; nullOr bool; - description = '' - Sometimes REPL are too smart for their own good, e.g. autocompleting a bracket that should - not be autocompleted when pasting code from a file. - In this case it can be useful to rely on bracketed-paste - (https://cirw.in/blog/bracketed-paste). - Luckily, tmux knows how to handle that. See tmux's manual. - - Default: `false` - ''; - }; - }; - } + } diff --git a/plugins/languages/zig.nix b/plugins/languages/zig.nix index d884f8256a..ad01d34547 100644 --- a/plugins/languages/zig.nix +++ b/plugins/languages/zig.nix @@ -5,7 +5,7 @@ } @ attrs: let helpers = import ../helpers.nix {inherit lib;}; in - with helpers; + with helpers.vim-plugin; with lib; mkPlugin attrs { name = "zig"; diff --git a/plugins/statuslines/airline.nix b/plugins/statuslines/airline.nix index 3778c56630..7ec78c73a9 100644 --- a/plugins/statuslines/airline.nix +++ b/plugins/statuslines/airline.nix @@ -4,7 +4,7 @@ ... } @ args: with lib; -with import ../helpers.nix {inherit lib;}; +with (import ../helpers.nix {inherit lib;}).vim-plugin; mkPlugin args { name = "airline"; description = "vim-airline"; diff --git a/plugins/utils/emmet.nix b/plugins/utils/emmet.nix index 359f943618..24ee59040a 100644 --- a/plugins/utils/emmet.nix +++ b/plugins/utils/emmet.nix @@ -11,7 +11,7 @@ with lib; let in either strInt (attrsOf (either strInt (attrsOf strInt))); in - with helpers; + with helpers.vim-plugin; mkPlugin attrs { name = "emmet"; description = "Enable emmet"; diff --git a/plugins/utils/endwise.nix b/plugins/utils/endwise.nix index 9f81021979..8365087a6e 100644 --- a/plugins/utils/endwise.nix +++ b/plugins/utils/endwise.nix @@ -5,7 +5,7 @@ } @ attrs: let helpers = import ../helpers.nix {inherit lib;}; in - with helpers; + with helpers.vim-plugin; with lib; mkPlugin attrs { name = "endwise"; diff --git a/plugins/utils/goyo.nix b/plugins/utils/goyo.nix index 89b5659566..b7d48b69bf 100644 --- a/plugins/utils/goyo.nix +++ b/plugins/utils/goyo.nix @@ -5,7 +5,7 @@ } @ attrs: let helpers = import ../helpers.nix {inherit lib;}; in - with helpers; + with helpers.vim-plugin; with lib; mkPlugin attrs { name = "goyo"; diff --git a/plugins/utils/instant.nix b/plugins/utils/instant.nix index 8a43199626..58b5ed3f8a 100644 --- a/plugins/utils/instant.nix +++ b/plugins/utils/instant.nix @@ -4,7 +4,7 @@ ... } @ args: with lib; -with import ../helpers.nix {inherit lib;}; +with (import ../helpers.nix {inherit lib;}).vim-plugin; mkPlugin args { name = "instant"; description = "instant.nvim"; diff --git a/plugins/utils/magma-nvim.nix b/plugins/utils/magma-nvim.nix index 8849215d3e..06bbb3a7b3 100644 --- a/plugins/utils/magma-nvim.nix +++ b/plugins/utils/magma-nvim.nix @@ -4,7 +4,7 @@ ... } @ args: with lib; -with import ../helpers.nix {inherit lib;}; +with (import ../helpers.nix {inherit lib;}).vim-plugin; mkPlugin args { name = "magma-nvim"; description = "magma-nvim"; diff --git a/plugins/utils/molten.nix b/plugins/utils/molten.nix index 91380a5d3a..c1c9b031ed 100644 --- a/plugins/utils/molten.nix +++ b/plugins/utils/molten.nix @@ -2,208 +2,210 @@ lib, pkgs, ... -} @ args: -with lib; -with import ../helpers.nix {inherit lib;}; - mkPlugin args { - name = "molten"; - description = "molten-nvim"; - package = pkgs.vimPlugins.molten-nvim; - globalPrefix = "molten_"; - - options = { - autoOpenOutput = mkDefaultOpt { - global = "auto_open_output"; - description = '' - Automatically open the output window when your cursor moves over a cell. - - Default: `true` - ''; - type = types.bool; - example = false; - }; - - copyOutput = mkDefaultOpt { - global = "copy_output"; - description = '' - Copy evaluation output to clipboard automatically (requires pyperclip). - - Default: `false` - ''; - type = types.bool; - example = true; - }; - - enterOutputBehavior = mkDefaultOpt { - global = "enter_output_behavior"; - description = '' - The behavior of MoltenEnterOutput. - - Default: `"open_then_enter"` - ''; - type = types.enum ["open_then_enter" "open_and_enter" "no_open"]; - }; - - imageProvider = mkDefaultOpt { - global = "image_provider"; - description = '' - How images are displayed. - - Default: `"none"` - ''; - type = types.enum ["none" "image.nvim"]; - }; - - outputCropBorder = mkDefaultOpt { - global = "output_crop_border"; - description = '' - 'crops' the bottom border of the output window when it would otherwise just sit at the - bottom of the screen. - - Default: `true` - ''; - type = types.bool; - }; - - outputShowMore = mkDefaultOpt { - global = "output_show_more"; - description = '' - When the window can't display the entire contents of the output buffer, shows the number - of extra lines in the window footer (requires nvim 10.0+ and a window border). - - Default: `false` - ''; - type = types.bool; - }; - - outputVirtLines = mkDefaultOpt { - global = "output_virt_lines"; - description = '' - Pad the main buffer with virtual lines so the output doesn't cover anything while it's - open. - - Default: `false` - ''; - type = types.bool; - }; - - outputWinBorder = mkDefaultOpt { - global = "output_win_border"; - description = '' - Some border features will not work if you don't specify your border as a table. - See border option of `:h nvim_open_win()`. - - Default: `["" "━" "" ""]` - ''; - type = nixvimTypes.border; - }; - - outputWinCoverGutter = mkDefaultOpt { - global = "output_win_cover_gutter"; - description = '' - Should the output window cover the gutter (numbers and sign col), or not. - If you change this, you probably also want to change `outputWinStyle`. - - Default: `true` - ''; - type = types.bool; - }; - - outputWinHideOnLeave = mkDefaultOpt { - global = "output_win_hide_on_leave"; - description = '' - After leaving the output window (via `:q` or switching windows), do not attempt to redraw - the output window. - - Default: `true` - ''; - type = types.bool; - }; - - outputWinMaxHeight = mkDefaultOpt { - global = "output_win_max_height"; - description = '' - Max height of the output window. - - Default: `999999` - ''; - type = types.ints.unsigned; - }; - - outputWinMaxWidth = mkDefaultOpt { - global = "output_win_max_width"; - description = '' - Max width of the output window. - - Default: `999999` - ''; - type = types.ints.unsigned; - }; - - outputWinStyle = mkDefaultOpt { - global = "output_win_style"; - description = '' - Value passed to the `style` option in `:h nvim_open_win()` - - Default: `false` - ''; - type = types.enum [false "minimal"]; - }; - - savePath = mkDefaultOpt { - global = "save_path"; - description = '' - Where to save/load data with `:MoltenSave` and `:MoltenLoad`. - - Default: `{__raw = "vim.fn.stdpath('data')..'/molten'";}` - ''; - type = with nixvimTypes; either str rawLua; - }; - - useBorderHighlights = mkDefaultOpt { - global = "use_border_highlights"; - description = '' - When true, uses different highlights for output border depending on the state of the cell - (running, done, error). - See [highlights](https://github.com/benlubas/molten-nvim#highlights). - - Default: `false` - ''; - type = types.bool; - }; - - virtLinesOffBy1 = mkDefaultOpt { - global = "virt_lines_off_by_1"; - description = '' - _Only has effect when `outputVirtLines` is true._ - Allows the output window to cover exactly one line of the regular buffer. - (useful for running code in a markdown file where that covered line will just be ```) - - Default: `false` - ''; - type = types.bool; - }; - - wrapOutput = mkDefaultOpt { - global = "wrap_output"; - description = '' - Wrap text in output windows. - - Default: `false` - ''; - type = types.bool; - }; - - # Debug - showMimetypeDebug = mkDefaultOpt { - global = "show_mimetype_debug"; - description = '' - Before any non-iostream output chunk, the mime-type for that output chunk is shown. - Meant for debugging/plugin devlopment. - - Default: `false` - ''; - type = types.bool; - }; - }; - } +} @ args: let + helpers = import ../helpers.nix {inherit lib;}; +in + with lib; + with helpers.vim-plugin; + mkPlugin args { + name = "molten"; + description = "molten-nvim"; + package = pkgs.vimPlugins.molten-nvim; + globalPrefix = "molten_"; + + options = { + autoOpenOutput = mkDefaultOpt { + global = "auto_open_output"; + description = '' + Automatically open the output window when your cursor moves over a cell. + + Default: `true` + ''; + type = types.bool; + example = false; + }; + + copyOutput = mkDefaultOpt { + global = "copy_output"; + description = '' + Copy evaluation output to clipboard automatically (requires pyperclip). + + Default: `false` + ''; + type = types.bool; + example = true; + }; + + enterOutputBehavior = mkDefaultOpt { + global = "enter_output_behavior"; + description = '' + The behavior of MoltenEnterOutput. + + Default: `"open_then_enter"` + ''; + type = types.enum ["open_then_enter" "open_and_enter" "no_open"]; + }; + + imageProvider = mkDefaultOpt { + global = "image_provider"; + description = '' + How images are displayed. + + Default: `"none"` + ''; + type = types.enum ["none" "image.nvim"]; + }; + + outputCropBorder = mkDefaultOpt { + global = "output_crop_border"; + description = '' + 'crops' the bottom border of the output window when it would otherwise just sit at the + bottom of the screen. + + Default: `true` + ''; + type = types.bool; + }; + + outputShowMore = mkDefaultOpt { + global = "output_show_more"; + description = '' + When the window can't display the entire contents of the output buffer, shows the number + of extra lines in the window footer (requires nvim 10.0+ and a window border). + + Default: `false` + ''; + type = types.bool; + }; + + outputVirtLines = mkDefaultOpt { + global = "output_virt_lines"; + description = '' + Pad the main buffer with virtual lines so the output doesn't cover anything while it's + open. + + Default: `false` + ''; + type = types.bool; + }; + + outputWinBorder = mkDefaultOpt { + global = "output_win_border"; + description = '' + Some border features will not work if you don't specify your border as a table. + See border option of `:h nvim_open_win()`. + + Default: `["" "━" "" ""]` + ''; + type = helpers.nixvimTypes.border; + }; + + outputWinCoverGutter = mkDefaultOpt { + global = "output_win_cover_gutter"; + description = '' + Should the output window cover the gutter (numbers and sign col), or not. + If you change this, you probably also want to change `outputWinStyle`. + + Default: `true` + ''; + type = types.bool; + }; + + outputWinHideOnLeave = mkDefaultOpt { + global = "output_win_hide_on_leave"; + description = '' + After leaving the output window (via `:q` or switching windows), do not attempt to redraw + the output window. + + Default: `true` + ''; + type = types.bool; + }; + + outputWinMaxHeight = mkDefaultOpt { + global = "output_win_max_height"; + description = '' + Max height of the output window. + + Default: `999999` + ''; + type = types.ints.unsigned; + }; + + outputWinMaxWidth = mkDefaultOpt { + global = "output_win_max_width"; + description = '' + Max width of the output window. + + Default: `999999` + ''; + type = types.ints.unsigned; + }; + + outputWinStyle = mkDefaultOpt { + global = "output_win_style"; + description = '' + Value passed to the `style` option in `:h nvim_open_win()` + + Default: `false` + ''; + type = types.enum [false "minimal"]; + }; + + savePath = mkDefaultOpt { + global = "save_path"; + description = '' + Where to save/load data with `:MoltenSave` and `:MoltenLoad`. + + Default: `{__raw = "vim.fn.stdpath('data')..'/molten'";}` + ''; + type = with helpers.nixvimTypes; either str rawLua; + }; + + useBorderHighlights = mkDefaultOpt { + global = "use_border_highlights"; + description = '' + When true, uses different highlights for output border depending on the state of the cell + (running, done, error). + See [highlights](https://github.com/benlubas/molten-nvim#highlights). + + Default: `false` + ''; + type = types.bool; + }; + + virtLinesOffBy1 = mkDefaultOpt { + global = "virt_lines_off_by_1"; + description = '' + _Only has effect when `outputVirtLines` is true._ + Allows the output window to cover exactly one line of the regular buffer. + (useful for running code in a markdown file where that covered line will just be ```) + + Default: `false` + ''; + type = types.bool; + }; + + wrapOutput = mkDefaultOpt { + global = "wrap_output"; + description = '' + Wrap text in output windows. + + Default: `false` + ''; + type = types.bool; + }; + + # Debug + showMimetypeDebug = mkDefaultOpt { + global = "show_mimetype_debug"; + description = '' + Before any non-iostream output chunk, the mime-type for that output chunk is shown. + Meant for debugging/plugin devlopment. + + Default: `false` + ''; + type = types.bool; + }; + }; + } diff --git a/plugins/utils/startify.nix b/plugins/utils/startify.nix index e4679147fd..a6ce6fbbbf 100644 --- a/plugins/utils/startify.nix +++ b/plugins/utils/startify.nix @@ -6,7 +6,7 @@ helpers = import ../helpers.nix {inherit lib;}; in with lib; - with helpers; + with helpers.vim-plugin; mkPlugin args { name = "startify"; description = "Enable startify"; diff --git a/plugins/utils/surround.nix b/plugins/utils/surround.nix index 4be33bfee3..fb88c33ec0 100644 --- a/plugins/utils/surround.nix +++ b/plugins/utils/surround.nix @@ -5,7 +5,7 @@ } @ attrs: let helpers = import ../helpers.nix {inherit lib;}; in - with helpers; + with helpers.vim-plugin; with lib; mkPlugin attrs { name = "surround"; diff --git a/plugins/utils/undotree.nix b/plugins/utils/undotree.nix index 17b69c2347..a95c8efc13 100644 --- a/plugins/utils/undotree.nix +++ b/plugins/utils/undotree.nix @@ -4,7 +4,7 @@ ... } @ args: with lib; -with import ../helpers.nix {inherit lib;}; +with (import ../helpers.nix {inherit lib;}).vim-plugin; mkPlugin args { name = "undotree"; package = pkgs.vimPlugins.undotree;