This commit is contained in:
ppenguin 2026-02-03 17:46:18 -05:00 committed by GitHub
commit 873210a87a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 98 additions and 30 deletions

View file

@ -19,10 +19,13 @@
]; ];
} }
``` ```
- `languages.{terraform,hcl}`: LSP servers now default to `tofu-ls`. While this
is unlikely to cause any noticeable change in behavior or breakage, it's
mentioned just in case.
Some other settings and commands are now deprecated but are still supported. Some other settings and commands are now deprecated but are still supported.
- The `setupOpts.mappings` options were also removed. Use the built-in Neovim - The `setupOpts.mappings` options were also removed. Use the built-in Neovim
settings (nvf's {option}`vim.keymaps`) settings (nvf's {option}`vim.keymaps`)
[Snoweuph](https://github.com/snoweuph) [Snoweuph](https://github.com/snoweuph)
@ -73,6 +76,14 @@
- `toggleterm` open map now also works when in terminal mode - `toggleterm` open map now also works when in terminal mode
[ppenguin](https://github.com/ppenguin):
- Improved/harmonized for `terraform` and `hcl`:
- formatting (use `terraform fmt` or `tofu fmt` for `tf` files)
- LSP config
- Added `tofu` and `tofu-ls` as (free) alternative to `terrraform` and
`terraform-ls`
[jtliang24](https://github.com/jtliang24): [jtliang24](https://github.com/jtliang24):
- Updated nix language plugin to use pkgs.nixfmt instead of - Updated nix language plugin to use pkgs.nixfmt instead of

View file

@ -8,20 +8,27 @@
inherit (lib.options) mkEnableOption mkOption; inherit (lib.options) mkEnableOption mkOption;
inherit (lib.meta) getExe; inherit (lib.meta) getExe;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.types) bool enum listOf; inherit (lib.types) enum listOf;
inherit (lib.nvim.types) mkGrammarOption deprecatedSingleOrListOf; inherit (lib.nvim.types) mkGrammarOption deprecatedSingleOrListOf;
inherit (lib.nvim.attrsets) mapListToAttrs; inherit (lib.nvim.attrsets) mapListToAttrs;
cfg = config.vim.languages.hcl; cfg = config.vim.languages.hcl;
defaultServers = ["terraform-ls"]; defaultServers = ["tofuls-hcl"];
servers = { servers = {
terraform-ls = { terraformls-hcl = {
enable = true; enable = true;
cmd = [(getExe pkgs.terraform-ls) "serve"]; cmd = [(getExe pkgs.terraform-ls) "serve"];
filetypes = ["terraform" "terraform-vars"]; filetypes = ["hcl"];
root_markers = [".git"];
};
tofuls-hcl = {
enable = true;
cmd = [(getExe pkgs.tofu-ls) "serve"];
filetypes = ["hcl"];
root_markers = [".terraform" ".git"]; root_markers = [".terraform" ".git"];
}; };
# TODO: package nomad-lsp and offer as an option here too
}; };
defaultFormat = ["hclfmt"]; defaultFormat = ["hclfmt"];
@ -29,6 +36,11 @@
hclfmt = { hclfmt = {
command = getExe pkgs.hclfmt; command = getExe pkgs.hclfmt;
}; };
nomad-fmt = {
command = getExe pkgs.nomad;
args = ["fmt" "$FILENAME"];
stdin = false;
};
}; };
in { in {
options.vim.languages.hcl = { options.vim.languages.hcl = {
@ -49,11 +61,7 @@ in {
}; };
format = { format = {
enable = mkOption { enable = mkEnableOption "Enable HCL formatting" // {default = config.vim.languages.enableFormat;};
type = bool;
default = config.vim.languages.enableFormat;
description = "Enable HCL formatting";
};
type = mkOption { type = mkOption {
type = deprecatedSingleOrListOf "vim.language.hcl.format.type" (enum (attrNames formats)); type = deprecatedSingleOrListOf "vim.language.hcl.format.type" (enum (attrNames formats));
default = defaultFormat; default = defaultFormat;
@ -81,18 +89,21 @@ in {
.set('hcl', '#%s') .set('hcl', '#%s')
''; '';
} }
(mkIf cfg.treesitter.enable { (mkIf cfg.treesitter.enable {
vim.treesitter.enable = true; vim.treesitter.enable = true;
vim.treesitter.grammars = [cfg.treesitter.package]; vim.treesitter.grammars = [cfg.treesitter.package];
}) })
(mkIf cfg.lsp.enable { (mkIf cfg.lsp.enable {
vim.lsp.servers = vim = {
lsp.servers =
mapListToAttrs (n: { mapListToAttrs (n: {
name = n; name = n;
value = servers.${n}; value = servers.${n};
}) })
cfg.lsp.servers; cfg.lsp.servers;
};
}) })
(mkIf cfg.format.enable { (mkIf cfg.format.enable {

View file

@ -9,23 +9,43 @@
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.meta) getExe; inherit (lib.meta) getExe;
inherit (lib.types) enum listOf; inherit (lib.types) enum listOf;
inherit (lib.nvim.types) mkGrammarOption; inherit (lib.nvim.types) mkGrammarOption deprecatedSingleOrListOf;
inherit (lib.nvim.attrsets) mapListToAttrs; inherit (lib.nvim.attrsets) mapListToAttrs;
cfg = config.vim.languages.terraform; cfg = config.vim.languages.terraform;
defaultServers = ["terraformls"]; defaultServers = ["tofuls-tf"];
servers = { servers = {
terraformls = { terraformls-tf = {
enable = true; enable = true;
cmd = [(getExe pkgs.terraform-ls) "serve"]; cmd = [(getExe pkgs.terraform-ls) "serve"];
filetypes = ["terraform" "terraform-vars"]; filetypes = ["terraform" "terraform-vars" "tf"];
root_markers = [".terraform" ".git"]; root_markers = [".terraform" ".git"];
}; };
tofuls-tf = {
enable = true;
cmd = [(getExe pkgs.tofu-ls) "serve"];
filetypes = ["terraform" "terraform-vars" "tf"];
root_markers = [".terraform" ".git"];
};
};
defaultFormat = ["tofu-fmt"];
formats = {
tofu-fmt = {
command = "${getExe pkgs.opentofu}";
args = ["fmt" "$FILENAME"];
stdin = false;
};
terraform-fmt = {
command = "${getExe pkgs.terraform}";
args = ["fmt" "$FILENAME"];
stdin = false;
};
}; };
in { in {
options.vim.languages.terraform = { options.vim.languages.terraform = {
enable = mkEnableOption "Terraform/HCL support"; enable = mkEnableOption "Terraform support";
treesitter = { treesitter = {
enable = mkEnableOption "Terraform treesitter" // {default = config.vim.languages.enableTreesitter;}; enable = mkEnableOption "Terraform treesitter" // {default = config.vim.languages.enableTreesitter;};
@ -34,14 +54,23 @@ in {
lsp = { lsp = {
enable = mkEnableOption "Terraform LSP support (terraform-ls)" // {default = config.vim.lsp.enable;}; enable = mkEnableOption "Terraform LSP support (terraform-ls)" // {default = config.vim.lsp.enable;};
servers = mkOption { servers = mkOption {
type = listOf (enum (attrNames servers)); type = listOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Terraform LSP server to use"; description = "Terraform LSP server to use";
}; };
}; };
format = {
enable = mkEnableOption "Enable Terraform formatting" // {default = config.vim.languages.enableFormat;};
type = mkOption {
type = deprecatedSingleOrListOf "vim.language.terraform.format.type" (enum (attrNames formats));
default = defaultFormat;
description = "Terraform formatter to use";
}; };
};
};
config = mkIf cfg.enable (mkMerge [ config = mkIf cfg.enable (mkMerge [
(mkIf cfg.treesitter.enable { (mkIf cfg.treesitter.enable {
vim.treesitter.enable = true; vim.treesitter.enable = true;
@ -49,12 +78,29 @@ in {
}) })
(mkIf cfg.lsp.enable { (mkIf cfg.lsp.enable {
vim.lsp.servers = vim = {
lsp.servers =
mapListToAttrs (n: { mapListToAttrs (n: {
name = n; name = n;
value = servers.${n}; value = servers.${n};
}) })
cfg.lsp.servers; cfg.lsp.servers;
};
})
(mkIf cfg.format.enable {
vim.formatter.conform-nvim = {
enable = true;
setupOpts = {
formatters_by_ft.terraform = cfg.format.type;
formatters =
mapListToAttrs (name: {
inherit name;
value = formats.${name};
})
cfg.format.type;
};
};
}) })
]); ]);
} }