From 33be0bbd0a61967cb4ae23ba9129fdca89d97ce1 Mon Sep 17 00:00:00 2001 From: anmiller Date: Fri, 21 Feb 2025 20:27:55 +0000 Subject: [PATCH] Add terraform LSP/config --- installers/install-nix-packages-flake.sh | 3 +++ vim/.config/nvim/init.vim | 1 + vim/.config/nvim/lua/user/terraform.lua | 24 ++++++++++++++++++++++++ 3 files changed, 28 insertions(+) create mode 100644 vim/.config/nvim/lua/user/terraform.lua diff --git a/installers/install-nix-packages-flake.sh b/installers/install-nix-packages-flake.sh index 37a2b00..822805c 100755 --- a/installers/install-nix-packages-flake.sh +++ b/installers/install-nix-packages-flake.sh @@ -23,6 +23,9 @@ nix_packages=( "yaml-language-server" # Yaml "lua-language-server" # Lua "solargraph" # Ruby + # Terraform + "terraform-ls" + "tflint" "python3Packages.python-lsp-server" # Python # ProgrammingLanguages diff --git a/vim/.config/nvim/init.vim b/vim/.config/nvim/init.vim index d4d57d1..af2683b 100644 --- a/vim/.config/nvim/init.vim +++ b/vim/.config/nvim/init.vim @@ -18,6 +18,7 @@ end require('user.lspconfig') require('user.indentblanklines') require('user.luasnip') +require('user.terraform') require('user.zk') EOF diff --git a/vim/.config/nvim/lua/user/terraform.lua b/vim/.config/nvim/lua/user/terraform.lua new file mode 100644 index 0000000..bc7e733 --- /dev/null +++ b/vim/.config/nvim/lua/user/terraform.lua @@ -0,0 +1,24 @@ +-- Enable terraform language server +local lsp = require('lspconfig') +lsp.tflint.setup{} +lsp.terraformls.setup{} + +-- Enable filetype detection for terraform related files +vim.cmd([[silent! autocmd! filetypedetect BufRead,BufNewFile *.tf]]) +vim.cmd([[autocmd BufRead,BufNewFile *.hcl set filetype=hcl]]) +vim.cmd([[autocmd BufRead,BufNewFile .terraformrc,terraform.rc set filetype=hcl]]) +vim.cmd([[autocmd BufRead,BufNewFile *.tf,*.tfvars set filetype=terraform]]) +vim.cmd([[autocmd BufRead,BufNewFile *.tfstate,*.tfstate.backup set filetype=json]]) + +-- Automatically format on save +vim.cmd([[let g:terraform_fmt_on_save=1]]) +vim.cmd([[let g:terraform_align=1]]) + +-- Shorten function name +local keymap = vim.api.nvim_set_keymap +local opts = { noremap = true, silent = true } +-- Open a terminal in a split to run commands rather than use ! +keymap("n", "ti", ":split term://terraform init", opts) +keymap("n", "tv", ":split term://terraform validate", opts) +keymap("n", "tp", ":split term://terraform plan", opts) +keymap("n", "taa", ":split term://terraform apply -auto-approve", opts)