diff --git a/lisp/backpack.el b/lisp/backpack.el index 23f75b2..004c85e 100644 --- a/lisp/backpack.el +++ b/lisp/backpack.el @@ -968,6 +968,7 @@ The behavior depends on `backpack-mode': (load (expand-file-name "gears/editing/python" backpack-core-dir)) (load (expand-file-name "gears/editing/rst" backpack-core-dir)) (load (expand-file-name "gears/editing/rust" backpack-core-dir)) + (load (expand-file-name "gears/editing/terraform" backpack-core-dir)) (load (expand-file-name "gears/editing/toml" backpack-core-dir))) ;;; Garbage Collection (orphaned packages cleanup) diff --git a/lisp/gears/editing/terraform.el b/lisp/gears/editing/terraform.el new file mode 100644 index 0000000..53768db --- /dev/null +++ b/lisp/gears/editing/terraform.el @@ -0,0 +1,43 @@ +;; Declare tree-sitter languages needed by this gear +(when (and (gearp! :editing terraform) + (not (gearp! :editing terraform -treesit)) + ;; NOTE(shackra): disabled until I can figure out the reason for this error: Ignoring unknown mode ‘terraform-mode’ (remapped to `terraform-ts-mode') + nil) + (backpack-treesit-langs! terraform) + + (with-eval-after-load 'treesit-auto + (add-to-list 'treesit-auto-recipe-list + (make-treesit-auto-recipe + :lang 'terraform + :ts-mode 'terraform-ts-mode + :url "https://github.com/tree-sitter-grammars/tree-sitter-hcl" + :source-dir "dialects/terraform/src"))) + + (add-to-list 'major-mode-remap-alist '(terraform-mode . terraform-ts-mode))) + +(leaf terraform-mode + :doc "A major-mode for editing Terraform configuration files" + :ensure (terraform-mode :ref "01635df3625c0cec2bb4613a6f920b8569d41009") + :when (gearp! :editing terraform) + :hook + ((terraform-mode-hook terraform-ts-mode-hook) . electric-pair-local-mode) + ((terraform-mode-hook terraform-ts-mode-hook) . + (lambda () + (toggle-truncate-lines +1) + (unless (gearp! :editing terraform -display-line-numbers) + (display-line-numbers-mode +1)))) + :config + (leaf eglot + :doc "Language Server Protocol support for terraform-mode" + :when (gearp! :editing terraform lsp) + :doctor + ("terraform-ls" . "the official Terraform Language Server by HashiCorp") + :hook ((terraform-mode-hook terraform-ts-mode-hook) . eglot-ensure) + :config + (add-to-list 'eglot-server-programs '(terraform-mode . ("terraform-ls" "serve"))) + (add-to-list 'eglot-server-programs '(terraform-ts-mode . ("terraform-ls" "serve"))))) + +(leaf terraform-doc + :doc "Look up Terraform documentation from Emacs" + :when (gearp! :editing terraform doc) + :ensure (terraform-doc :ref "31f1c47453ad14181883f78258a72c02b95d9783"))