From 332b60f058466135ec04955a73c81b96bbc1d0cc Mon Sep 17 00:00:00 2001 From: emo-mruczek Date: Sat, 16 May 2026 19:09:54 +0200 Subject: [PATCH] languages/vhdl: init --- docs/manual/release-notes/rl-0.9.md | 6 +++ modules/plugins/languages/default.nix | 1 + modules/plugins/languages/vhdl.nix | 65 +++++++++++++++++++++++++ modules/plugins/lsp/presets/default.nix | 1 + modules/plugins/lsp/presets/vhdl-ls.nix | 24 +++++++++ 5 files changed, 97 insertions(+) create mode 100644 modules/plugins/languages/vhdl.nix create mode 100644 modules/plugins/lsp/presets/vhdl-ls.nix diff --git a/docs/manual/release-notes/rl-0.9.md b/docs/manual/release-notes/rl-0.9.md index e18af42d..a36a19c0 100644 --- a/docs/manual/release-notes/rl-0.9.md +++ b/docs/manual/release-notes/rl-0.9.md @@ -495,6 +495,12 @@ https://github.com/gorbit99/codewindow.nvim [poseidon-rises](https://github.com/poseidon-rises) in [!1107](https://github.com/NotAShelf/nvf/pull/1107). +[emo-mruczek](https://emo-mruczek.pet): + +[vhdl-ls]: https://github.com/VHDL-LS/rust_hdl + +- Add VHDL support with [vhdl-ls]. + [itscrystalline](https://github.com/itscrystalline): [img-clip.nvim]: https://github.com/hakonharnes/img-clip.nvim diff --git a/modules/plugins/languages/default.nix b/modules/plugins/languages/default.nix index abe89f41..1be4b25f 100644 --- a/modules/plugins/languages/default.nix +++ b/modules/plugins/languages/default.nix @@ -48,6 +48,7 @@ in { ./scala.nix ./sql.nix ./svelte.nix + ./vhdl.nix ./vue.nix ./terraform.nix ./toml.nix diff --git a/modules/plugins/languages/vhdl.nix b/modules/plugins/languages/vhdl.nix new file mode 100644 index 00000000..2db3e125 --- /dev/null +++ b/modules/plugins/languages/vhdl.nix @@ -0,0 +1,65 @@ +{ + config, + pkgs, + lib, + ... +}: let + inherit (builtins) attrNames; + inherit (lib.options) mkOption mkEnableOption literalExpression; + inherit (lib.modules) mkIf mkMerge; + inherit (lib.types) enum bool listOf; + inherit (lib) genAttrs; + inherit (lib.nvim.types) mkGrammarOption; + inherit (lib.nvim.attrsets) mapListToAttrs; + + cfg = config.vim.languages.vhdl; + + defaultServers = ["vhdl-ls"]; + servers = ["vhdl-ls"]; +in { + options.vim.languages.vhdl = { + enable = mkEnableOption "VHDL language support"; + + treesitter = { + enable = + mkEnableOption "VHDL treesitter" + // { + default = config.vim.languages.enableTreesitter; + defaultText = literalExpression "config.vim.languages.enableTreesitter"; + }; + package = mkGrammarOption pkgs "vhdl"; + }; + + lsp = { + enable = + mkEnableOption "VHDL LSP support" + // { + default = config.vim.lsp.enable; + defaultText = literalExpression "config.vim.lsp.enable"; + }; + servers = mkOption { + type = listOf (enum servers); + default = defaultServers; + description = "VHDL LSP server to use"; + }; + }; + }; + + config = mkIf cfg.enable (mkMerge [ + (mkIf cfg.treesitter.enable { + vim.treesitter = { + enable = true; + grammars = [cfg.treesitter.package]; + }; + }) + + (mkIf cfg.lsp.enable { + vim.lsp = { + presets = genAttrs cfg.lsp.servers (_: {enable = true;}); + servers = genAttrs cfg.lsp.servers (_: { + filetypes = ["vhdl"]; + }); + }; + }) + ]); +} diff --git a/modules/plugins/lsp/presets/default.nix b/modules/plugins/lsp/presets/default.nix index 58040ee7..d8bde108 100644 --- a/modules/plugins/lsp/presets/default.nix +++ b/modules/plugins/lsp/presets/default.nix @@ -72,6 +72,7 @@ ./typescript-go.nix ./typescript-language-server.nix ./vala-language-server.nix + ./vhdl-ls.nix ./vscode-css-language-server.nix ./vscode-json-language-server.nix ./vtsls.nix diff --git a/modules/plugins/lsp/presets/vhdl-ls.nix b/modules/plugins/lsp/presets/vhdl-ls.nix new file mode 100644 index 00000000..f00c4578 --- /dev/null +++ b/modules/plugins/lsp/presets/vhdl-ls.nix @@ -0,0 +1,24 @@ +{ + config, + lib, + pkgs, + ... +}: let + inherit (lib.meta) getExe; + inherit (lib.modules) mkIf; + inherit (lib.nvim.types) mkLspPresetEnableOption; + + cfg = config.vim.lsp.presets.vhdl-ls; +in { + options.vim.lsp.presets.vhdl-ls = { + enable = mkLspPresetEnableOption "vhdl-ls" "VHDL" []; + }; + + config = mkIf cfg.enable { + vim.lsp.servers.vhdl-ls = { + enable = true; + cmd = [(getExe pkgs.vhdl-ls)]; + root_markers = [".git" "vhdl_ls.toml"]; + }; + }; +}