diff --git a/configuration.nix b/configuration.nix index 040a076e..7be2e5cb 100644 --- a/configuration.nix +++ b/configuration.nix @@ -93,7 +93,7 @@ isMaximal: { fsharp.enable = false; just.enable = false; qml.enable = false; - + jinja.enable = false; tailwind.enable = false; svelte.enable = false; diff --git a/docs/manual/release-notes/rl-0.9.md b/docs/manual/release-notes/rl-0.9.md index 61128366..476fce1b 100644 --- a/docs/manual/release-notes/rl-0.9.md +++ b/docs/manual/release-notes/rl-0.9.md @@ -142,6 +142,8 @@ [Tombi](https://tombi-toml.github.io/tombi/) language server, linter, and formatter. +- Added Jinja support via `languages.jinja` + - Added [hlargs.nvim](https://github.com/m-demare/hlargs.nvim) support as `visuals.hlargs-nvim`. diff --git a/modules/plugins/languages/default.nix b/modules/plugins/languages/default.nix index 8b550c39..1dad1434 100644 --- a/modules/plugins/languages/default.nix +++ b/modules/plugins/languages/default.nix @@ -21,6 +21,7 @@ in { ./html.nix ./haskell.nix ./java.nix + ./jinja.nix ./json.nix ./lua.nix ./markdown.nix diff --git a/modules/plugins/languages/jinja.nix b/modules/plugins/languages/jinja.nix new file mode 100644 index 00000000..a4635f58 --- /dev/null +++ b/modules/plugins/languages/jinja.nix @@ -0,0 +1,65 @@ +{ + config, + pkgs, + lib, + ... +}: let + inherit (builtins) attrNames; + inherit (lib.meta) getExe; + inherit (lib.modules) mkIf mkMerge; + inherit (lib.options) mkEnableOption mkOption; + inherit (lib.types) enum listOf; + inherit (lib.nvim.types) mkGrammarOption; + inherit (lib.nvim.attrsets) mapListToAttrs; + + cfg = config.vim.languages.jinja; + defaultServers = ["jinja-lsp"]; + servers = { + jinja-lsp = { + enable = true; + cmd = [(getExe pkgs.jinja-lsp)]; + filetypes = ["jinja"]; + root_markers = [ + ".git" + ]; + }; + }; +in { + options.vim.languages.jinja = { + enable = mkEnableOption "Jinja template language support"; + + treesitter = { + enable = mkEnableOption "Jinja treesitter" // {default = config.vim.languages.enableTreesitter;}; + package = mkGrammarOption pkgs "jinja"; + inlinePackage = mkGrammarOption pkgs "jinja_inline"; + }; + + lsp = { + enable = mkEnableOption "Jinja LSP support" // {default = config.vim.lsp.enable;}; + servers = mkOption { + description = "Jinja LSP server to use"; + type = listOf (enum (attrNames servers)); + default = defaultServers; + }; + }; + }; + + config = mkIf cfg.enable (mkMerge [ + (mkIf cfg.treesitter.enable { + vim.treesitter.enable = true; + vim.treesitter.grammars = [ + cfg.treesitter.package + cfg.treesitter.inlinePackage + ]; + }) + + (mkIf cfg.lsp.enable { + vim.lsp.servers = + mapListToAttrs (n: { + name = n; + value = servers.${n}; + }) + cfg.lsp.servers; + }) + ]); +}