diff --git a/extra.nix b/extra.nix index f7e48d5..2880d5b 100644 --- a/extra.nix +++ b/extra.nix @@ -115,6 +115,7 @@ inputs: let vim.git = { enable = true; gitsigns.enable = true; + gitsigns.codeActions = true; }; vim.minimap = { diff --git a/lib/types/default.nix b/lib/types/default.nix index 6317160..6d5777d 100644 --- a/lib/types/default.nix +++ b/lib/types/default.nix @@ -5,5 +5,5 @@ in { inherit (typesDag) dagOf; inherit (typesPlugin) pluginsOpt; - inherit (typesLanguage) diagnostics; + inherit (typesLanguage) diagnostics mkGrammarOption; } diff --git a/lib/types/languages.nix b/lib/types/languages.nix index 7dc57af..577db50 100644 --- a/lib/types/languages.nix +++ b/lib/types/languages.nix @@ -23,4 +23,9 @@ in { type = with types; listOf (either (enum (attrNames diagnostics)) (submodule diagnosticSubmodule)); default = defaultDiagnostics; }; + + mkGrammarOption = pkgs: grammar: + mkPackageOption pkgs ["${grammar} treesitter"] { + default = ["vimPlugins" "nvim-treesitter" "builtGrammars" grammar]; + }; } diff --git a/modules/languages/clang.nix b/modules/languages/clang.nix index 4514329..a9d1191 100644 --- a/modules/languages/clang.nix +++ b/modules/languages/clang.nix @@ -41,16 +41,8 @@ in { type = types.bool; default = config.vim.languages.enableTreesitter; }; - cPackage = mkOption { - description = "C treesitter grammar to use"; - type = types.package; - default = pkgs.vimPlugins.nvim-treesitter.builtGrammars.c; - }; - cppPackage = mkOption { - description = "C++ treesitter grammar to use"; - type = types.package; - default = pkgs.vimPlugins.nvim-treesitter.builtGrammars.cpp; - }; + cPackage = nvim.types.mkGrammarOption pkgs "c"; + cppPackage = nvim.types.mkGrammarOption pkgs "cpp"; }; lsp = { diff --git a/modules/languages/default.nix b/modules/languages/default.nix index 5e370cc..ee7cb4c 100644 --- a/modules/languages/default.nix +++ b/modules/languages/default.nix @@ -8,7 +8,7 @@ with lib; let }; in { imports = [ - ./markdown + ./markdown ./tidal ./clang.nix diff --git a/modules/languages/go.nix b/modules/languages/go.nix index 0ceb111..f63a6f4 100644 --- a/modules/languages/go.nix +++ b/modules/languages/go.nix @@ -31,11 +31,7 @@ in { type = types.bool; default = config.vim.languages.enableTreesitter; }; - package = mkOption { - description = "Go treesitter grammar to use"; - type = types.package; - default = pkgs.vimPlugins.nvim-treesitter.builtGrammars.go; - }; + package = nvim.types.mkGrammarOption pkgs "go"; }; lsp = { diff --git a/modules/languages/markdown/config.nix b/modules/languages/markdown/config.nix index 8f6e626..bf0ef5a 100644 --- a/modules/languages/markdown/config.nix +++ b/modules/languages/markdown/config.nix @@ -9,6 +9,11 @@ with builtins; let cfg = config.vim.languages.markdown; in { config = mkIf cfg.enable (mkMerge [ + (mkIf cfg.treesitter.enable { + vim.treesitter.enable = true; + vim.treesitter.grammars = [cfg.treesitter.package]; + }) + (mkIf cfg.glow.enable { vim.startPlugins = ["glow-nvim"]; diff --git a/modules/languages/markdown/markdown.nix b/modules/languages/markdown/markdown.nix index 706bf5d..41ab653 100644 --- a/modules/languages/markdown/markdown.nix +++ b/modules/languages/markdown/markdown.nix @@ -16,5 +16,14 @@ in { default = true; description = "Enable markdown preview in neovim with glow"; }; + + treesitter = { + enable = mkOption { + description = "Enable Markdown treesitter"; + type = types.bool; + default = config.vim.languages.enableTreesitter; + }; + package = nvim.types.mkGrammarOption pkgs "markdown"; + }; }; } diff --git a/modules/languages/nix.nix b/modules/languages/nix.nix index f7273ac..3313c34 100644 --- a/modules/languages/nix.nix +++ b/modules/languages/nix.nix @@ -92,11 +92,7 @@ in { type = types.bool; default = config.vim.languages.enableTreesitter; }; - package = mkOption { - description = "Nix treesitter grammar to use"; - type = types.package; - default = pkgs.vimPlugins.nvim-treesitter.builtGrammars.nix; - }; + package = nvim.types.mkGrammarOption pkgs "nix"; }; lsp = { diff --git a/modules/languages/python.nix b/modules/languages/python.nix index c2cabda..ab80ca6 100644 --- a/modules/languages/python.nix +++ b/modules/languages/python.nix @@ -64,11 +64,7 @@ in { type = with types; enum (attrNames servers); default = defaultServer; }; - package = mkOption { - description = "Python LSP server package"; - type = types.package; - default = servers.${cfg.lsp.server}.package; - }; + package = nvim.types.mkGrammarOption pkgs "python"; }; format = { diff --git a/modules/languages/rust.nix b/modules/languages/rust.nix index b58d885..8c330b3 100644 --- a/modules/languages/rust.nix +++ b/modules/languages/rust.nix @@ -17,11 +17,7 @@ in { type = types.bool; default = config.vim.languages.enableTreesitter; }; - package = mkOption { - description = "Rust treesitter grammar to use"; - type = types.package; - default = pkgs.vimPlugins.nvim-treesitter.builtGrammars.rust; - }; + package = nvim.types.mkGrammarOption pkgs "rust"; }; crates = { diff --git a/modules/languages/ts.nix b/modules/languages/ts.nix index 318b623..d1c9796 100644 --- a/modules/languages/ts.nix +++ b/modules/languages/ts.nix @@ -63,16 +63,8 @@ in { type = types.bool; default = config.vim.languages.enableTreesitter; }; - tsPackage = mkOption { - description = "Typescript treesitter grammar to use"; - type = types.package; - default = pkgs.vimPlugins.nvim-treesitter.builtGrammars.tsx; - }; - jsPackage = mkOption { - description = "Javascript treesitter grammar to use"; - type = types.package; - default = pkgs.vimPlugins.nvim-treesitter.builtGrammars.javascript; - }; + tsPackage = nvim.types.mkGrammarOption pkgs "tsx"; + jsPackage = nvim.types.mkGrammarOption pkgs "javascript"; }; lsp = { diff --git a/modules/languages/zig.nix b/modules/languages/zig.nix index 8dbcb7f..0ce85db 100644 --- a/modules/languages/zig.nix +++ b/modules/languages/zig.nix @@ -17,11 +17,7 @@ in { type = types.bool; default = config.vim.languages.enableTreesitter; }; - package = mkOption { - description = "Zig treesitter grammar to use"; - type = types.package; - default = pkgs.vimPlugins.nvim-treesitter.builtGrammars.zig; - }; + package = nvim.types.mkGrammarOption pkgs "zig"; }; lsp = { enable = mkOption {