diff --git a/modules/plugins/treesitter/config.nix b/modules/plugins/treesitter/config.nix index fd841b0..fe8052f 100644 --- a/modules/plugins/treesitter/config.nix +++ b/modules/plugins/treesitter/config.nix @@ -39,8 +39,13 @@ in { # For some reason treesitter highlighting does not work on start if this is set before syntax on configRC.treesitter-fold = mkIf cfg.fold (entryBefore ["basic"] '' + " This is required by treesitter-context to handle folds set foldmethod=expr set foldexpr=nvim_treesitter#foldexpr() + + " This is optional, but is set rather as a sane default. + " If unset, opened files will be folded by automatically as + " the files are opened set nofoldenable ''); @@ -67,6 +72,9 @@ in { }, -- Indentation module for Treesitter + -- Keymaps are set to false here as they are + -- handled by `vim.maps` entries calling lua + -- functions achieving the same functionality. incremental_selection = { enable = true, disable = {}, diff --git a/modules/plugins/treesitter/treesitter.nix b/modules/plugins/treesitter/treesitter.nix index 1ff4dfe..f228bdc 100644 --- a/modules/plugins/treesitter/treesitter.nix +++ b/modules/plugins/treesitter/treesitter.nix @@ -6,7 +6,7 @@ inherit (lib.options) mkOption mkEnableOption literalMD; inherit (lib.types) listOf package str either bool; inherit (lib.nvim.binds) mkMappingOption; - inherit (lib.nvim.types) luaInline mkGrammarOption; + inherit (lib.nvim.types) luaInline; in { options.vim.treesitter = { enable = mkEnableOption "treesitter, also enabled automatically through language options"; diff --git a/modules/plugins/treesitter/ts-context/config.nix b/modules/plugins/treesitter/ts-context/config.nix index a108959..df5c151 100644 --- a/modules/plugins/treesitter/ts-context/config.nix +++ b/modules/plugins/treesitter/ts-context/config.nix @@ -4,28 +4,21 @@ ... }: let inherit (lib.modules) mkIf; - inherit (lib.trivial) boolToString; - inherit (lib.nvim.lua) nullString; + inherit (lib.nvim.lua) toLuaObject; inherit (lib.nvim.dag) entryAfter; inherit (config.vim) treesitter; cfg = treesitter.context; in { config = mkIf (treesitter.enable && cfg.enable) { - vim.startPlugins = ["nvim-treesitter-context"]; + vim = { + startPlugins = ["nvim-treesitter-context"]; - vim.luaConfigRC.treesitter-context = entryAfter ["treesitter"] '' - require'treesitter-context'.setup { - enable = true, - max_lines = ${toString cfg.maxLines}, - min_window_height = ${toString cfg.minWindowHeight}, - line_numbers = ${boolToString cfg.lineNumbers}, - multiline_threshold = ${toString cfg.multilineThreshold}, - trim_scope = '${cfg.trimScope}', - mode = '${cfg.mode}', - separator = ${nullString cfg.separator}, - z_index = ${toString cfg.zindex}, - } - ''; + # set up treesitter-context after Treesitter. The ordering + # should not matter, but there is no harm in doing this + luaConfigRC.treesitter-context = entryAfter ["treesitter"] '' + require("treesitter-context").setup(${toLuaObject cfg.setupOpts}) + ''; + }; }; } diff --git a/modules/plugins/treesitter/ts-context/context.nix b/modules/plugins/treesitter/ts-context/context.nix index 387aa81..61d029a 100644 --- a/modules/plugins/treesitter/ts-context/context.nix +++ b/modules/plugins/treesitter/ts-context/context.nix @@ -1,60 +1,94 @@ {lib, ...}: let inherit (lib.options) mkOption mkEnableOption; inherit (lib.types) int bool str nullOr enum; + inherit (lib.nvim.types) mkPluginSetupOption; + inherit (lib.nvim.config) batchRenameOptions; + migrationTable = { + maxLines = "max_lines"; + minWindowHeight = "min_window_height"; + lineNumbers = "line_numbers"; + multilineThreshold = "multiline_threshold"; + trimScope = "trim_scope"; + mode = "mode"; + seperator = "separator"; + zindex = "z_index"; + }; + + renamedSetupOpts = + batchRenameOptions + ["vim" "treesitter" "context"] + ["vim" "treesitter" "context" "setupOpts"] + migrationTable; in { + imports = renamedSetupOpts; options.vim.treesitter.context = { enable = mkEnableOption "context of current buffer contents [nvim-treesitter-context] "; - maxLines = mkOption { - type = int; - default = 0; - description = "How many lines the window should span. Values <=0 mean no limit."; - }; + setupOpts = mkPluginSetupOption "treesitter-context" { + max_lines = mkOption { + type = int; + default = 0; + description = '' + How many lines the window should span. - minWindowHeight = mkOption { - type = int; - default = 0; - description = "Minimum editor window height to enable context. Values <= 0 mean no limit."; - }; + Values >= 0 mean there will be no limit. + ''; + }; - lineNumbers = mkOption { - type = bool; - default = true; - description = ""; - }; + min_window_height = mkOption { + type = int; + default = 0; + description = '' + Minimum editor window height to enable context. - multilineThreshold = mkOption { - type = int; - default = 20; - description = "Maximum number of lines to collapse for a single context line."; - }; + Values >= 0 mean there will be no limit. + ''; + }; - trimScope = mkOption { - type = enum ["inner" "outer"]; - default = "outer"; - description = "Which context lines to discard if [](#opt-vim.treesitter.context.maxLines) is exceeded."; - }; + line_numbers = mkOption { + type = bool; + default = true; + description = "Whether to display line numbers in current context"; + }; - mode = mkOption { - type = enum ["cursor" "topline"]; - default = "cursor"; - description = "Line used to calculate context."; - }; + multiline_threshold = mkOption { + type = int; + default = 20; + description = "Maximum number of lines to collapse for a single context line."; + }; - separator = mkOption { - type = nullOr str; - default = null; - description = '' - Separator between context and content. Should be a single character string, like '-'. + trim_scope = mkOption { + type = enum ["inner" "outer"]; + default = "outer"; + description = '' + Which context lines to discard if + [](#opt-vim.treesitter.context.setupOpts.max_lines) is exceeded. + ''; + }; - When separator is set, the context will only show up when there are at least 2 lines above cursorline. - ''; - }; + mode = mkOption { + type = enum ["cursor" "topline"]; + default = "cursor"; + description = "Line used to calculate context."; + }; - zindex = mkOption { - type = int; - default = 20; - description = "The Z-index of the context window."; + separator = mkOption { + type = nullOr str; + default = "-"; + description = '' + Separator between context and content. This option should + be a single character string, like '-'. + + When separator is set, the context will only show up when + there are at least 2 lines above cursorline. + ''; + }; + + zindex = mkOption { + type = int; + default = 20; + description = "The Z-index of the context window."; + }; }; }; }