@@ -130,6 +130,25 @@ data "coder_parameter" "install_profile" {
130130 }
131131}
132132
133+ data "coder_parameter" "vscode_extensions" {
134+ name = " vscode_extensions"
135+ display_name = " VS Code Extensions"
136+ description = " Select extensions to enable in VS Code for Web"
137+ type = " list(string)"
138+ form_type = " multi-select"
139+ default = jsonencode ([for e in var . vscode_extensions : e . id if e . default ])
140+ mutable = true
141+ order = 100
142+
143+ dynamic "option" {
144+ for_each = var. vscode_extensions
145+ content {
146+ name = option. value . name
147+ value = option. value . id
148+ }
149+ }
150+ }
151+
133152
134153
135154# Workspace data source
@@ -148,6 +167,7 @@ locals {
148167 # Determine workspace home path
149168 # Sysbox Strategy: Use standard /home/coder
150169 workspace_home = " /home/coder"
170+ selected_extensions = jsondecode (data. coder_parameter . vscode_extensions . value )
151171 issue_fork_clean = trimprefix (data. coder_parameter . issue_fork . value , " drupal-" )
152172 issue_url = local. issue_fork_clean != " " ? " https://www.drupal.org/project/drupal/issues/${ local . issue_fork_clean } " : " "
153173}
@@ -165,6 +185,31 @@ locals {
165185 workspace_image_registry_base = replace (local. registry_without_version , " :latest" , " " )
166186}
167187
188+ variable "vscode_extensions" {
189+ description = " List of VS Code extensions to offer in the workspace creation UI"
190+ type = list (object ({
191+ id = string
192+ name = string
193+ default = bool
194+ }))
195+ default = [
196+ { id = " xdebug.php-debug" , name = " PHP Debug" , default = true },
197+ { id = " bmewburn.vscode-intelephense-client" , name = " Intelephense" , default = true },
198+ { id = " dbaeumer.vscode-eslint" , name = " ESLint" , default = true },
199+ { id = " esbenp.prettier-vscode" , name = " Prettier" , default = true },
200+ { id = " sanderronde.phpstan-vscode" , name = " PHPStan" , default = true },
201+ { id = " streetsidesoftware.code-spell-checker" , name = " Code Spell Checker" , default = true },
202+ { id = " stylelint.vscode-stylelint" , name = " Stylelint" , default = true },
203+ { id = " valeryanm.vscode-phpsab" , name = " PHPSAB" , default = true },
204+ { id = " biati.ddev-manager" , name = " DDEV Manager" , default = true },
205+ { id = " deque-systems.vscode-axe-linter" , name = " Axe Linter" , default = false },
206+ { id = " andrewdavidblum.drupal-smart-snippets" , name = " Drupal Smart Snippets" , default = false },
207+ { id = " redhat.vscode-yaml" , name = " YAML" , default = false },
208+ { id = " sleistner.vscode-fileutils" , name = " File Utils" , default = false },
209+ { id = " GitHub.vscode-pull-request-github" , name = " GitHub Pull Requests" , default = false },
210+ ]
211+ }
212+
168213variable "workspace_image_registry" {
169214 description = " Docker registry URL for the workspace base image (without tag, version is added automatically)"
170215 type = string
@@ -1445,17 +1490,7 @@ module "vscode-web" {
14451490 folder = " /home/coder/drupal-core"
14461491 accept_license = true
14471492 order = 2
1448- extensions = [
1449- " xdebug.php-debug" ,
1450- " bmewburn.vscode-intelephense-client" ,
1451- " dbaeumer.vscode-eslint" ,
1452- " esbenp.prettier-vscode" ,
1453- " sanderronde.phpstan-vscode" ,
1454- " streetsidesoftware.code-spell-checker" ,
1455- " stylelint.vscode-stylelint" ,
1456- " valeryanm.vscode-phpsab" ,
1457- " biati.ddev-manager" ,
1458- ]
1493+ extensions = local. selected_extensions
14591494}
14601495
14611496# DDEV Web Server (HTTP) - appears when DDEV project is running
0 commit comments