terraform { required_providers { coder = { source = "coder/coder" } docker = { source = "kreuzwerker/docker" } } } data "coder_parameter" "php_version" { name = "PHP Version" description = "Select the PHP version for your workspace." type = "string" default = "82" option { name = "PHP 8.2" value = "82" } } data "coder_parameter" "node_version" { name = "Node.js Version" description = "Select the Node.js version for your workspace." type = "string" default = "22" option { name = "Node 22" value = "22" } option { name = "Node 20" value = "20" } option { name = "Node 18" value = "18" } } module "php_workspace" { source = "git::https://git.bobert.me/anthorob/coder-templates.git//base?ref=main" docker_image = "registry.bobert.me/anthorob/coder-images:php${data.coder_parameter.php_version.value}" language_metadata = [ { display_name = "PHP Version" key = "php_version" script = "php -v | head -n 1 | cut -d ' ' -f 2" interval = 60 timeout = 1 }, { display_name = "Node.js Version" key = "node_version" script = "[ -s $NVM_DIR/nvm.sh ] && . $NVM_DIR/nvm.sh && node -v 2>/dev/null || echo 'Node not installed'" interval = 60 timeout = 1 } ] language_startup_script = <<-EOT echo $(php -v) export NVM_DIR="/home/coder/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" nvm install ${data.coder_parameter.node_version.value} nvm alias default ${data.coder_parameter.node_version.value} # Ensure nvm loads and uses the correct version in future shells echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.bashrc echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> ~/.bashrc echo 'nvm use default &> /dev/null' >> ~/.bashrc echo "Node version set to $(node -v)" EOT vscode_extensions = [ "bmewburn.vscode-intelephense-client", "felixfbecker.php-debug", "mehedidracula.php-namespace-resolver", "dbaeumer.vscode-eslint", "mikestead.dotenv", "christian-kohler.path-intellisense", "ms-vscode.vscode-typescript-tslint-plugin", "laravel.vscode-laravel" ] vscode_settings = { "php.validate.executablePath" = "/usr/bin/php" } jetbrains_ides = ["PS"] jetbrains_default = "PS" }