locals { core_scripts = { workspace = { display = "Setup Development Workspace" icon = "/icon/container.svg" path = "${path.module}/scripts/workspace-setup.sh" order = 1 blocks_login = true } dev_tools = { display = "Install Development Tools" icon = "/icon/code.svg" path = "${path.module}/scripts/dev-tools.sh" order = 2 blocks_login = true } terminal_tools = { display = "Install Terminal Tools" icon = "/icon/terminal.svg" path = "${path.module}/scripts/terminal-tools.sh" order = 3 blocks_login = false } git_hooks = { display = "Configure Git Hooks" icon = "/icon/git.svg" path = "${path.module}/scripts/git-hooks.sh" order = 4 blocks_login = false } } ai_scripts = { claude = { enabled = data.coder_parameter.enable_ai_tools.value && var.install_claude_code display = "Install Claude CLI" icon = "/icon/claude.svg" path = "${path.module}/scripts/claude-install.sh" blocks_login = false } codex = { enabled = data.coder_parameter.enable_ai_tools.value && var.install_codex_support display = "Install Codex CLI" icon = "/icon/openai.svg" path = "${path.module}/scripts/codex-setup.sh" blocks_login = false } gemini = { enabled = data.coder_parameter.enable_ai_tools.value && var.install_gemini_support display = "Install Gemini CLI" icon = "/icon/google.svg" path = "${path.module}/scripts/gemini-setup.sh" blocks_login = false } cursor = { enabled = data.coder_parameter.enable_ai_tools.value && var.install_cursor_support display = "Configure Cursor" icon = "/icon/cursor.svg" path = "${path.module}/scripts/cursor-setup.sh" blocks_login = false } windsurf = { enabled = data.coder_parameter.enable_ai_tools.value && var.install_windsurf_support display = "Configure Windsurf" icon = "/icon/windsurf.svg" path = "${path.module}/scripts/windsurf-setup.sh" blocks_login = false } } } resource "coder_script" "core" { for_each = local.core_scripts agent_id = coder_agent.main.id display_name = each.value.display icon = each.value.icon run_on_start = true start_blocks_login = each.value.blocks_login script = <<-EOT set -euo pipefail script_file=$(mktemp) echo '${base64encode(file(each.value.path))}' | base64 -d | tr -d '\r' > "$script_file" chmod +x "$script_file" export PATH="/home/coder/.venv/bin:/home/coder/.local/bin:/home/coder/bin:/home/coder/.cargo/bin:/usr/local/go/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:$PATH" current_nvm=$(printenv NVM_DIR 2>/dev/null || true) if [ -z "$current_nvm" ]; then NVM_DIR=/usr/local/share/nvm else NVM_DIR="$current_nvm" fi export NVM_DIR if [ -d "$NVM_DIR" ]; then if [ -s "$NVM_DIR/nvm.sh" ]; then # shellcheck disable=SC1090,SC1091 . "$NVM_DIR/nvm.sh" >/dev/null 2>&1 || true fi shopt -s nullglob for node_bin in "$NVM_DIR"/versions/node/*/bin; do PATH="$node_bin:$PATH" done shopt -u nullglob fi "$script_file" EOT } resource "coder_script" "ai" { for_each = { for key, value in local.ai_scripts : key => value if value.enabled } agent_id = coder_agent.main.id display_name = each.value.display icon = each.value.icon run_on_start = true start_blocks_login = each.value.blocks_login script = <<-EOT set -euo pipefail script_file=$(mktemp) echo '${base64encode(file(each.value.path))}' | base64 -d | tr -d '\r' > "$script_file" chmod +x "$script_file" export PATH="/home/coder/.venv/bin:/home/coder/.local/bin:/home/coder/bin:/home/coder/.cargo/bin:/usr/local/go/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:$PATH" current_nvm=$(printenv NVM_DIR 2>/dev/null || true) if [ -z "$current_nvm" ]; then NVM_DIR=/usr/local/share/nvm else NVM_DIR="$current_nvm" fi export NVM_DIR if [ -d "$NVM_DIR" ]; then if [ -s "$NVM_DIR/nvm.sh" ]; then # shellcheck disable=SC1090,SC1091 . "$NVM_DIR/nvm.sh" >/dev/null 2>&1 || true fi shopt -s nullglob for node_bin in "$NVM_DIR"/versions/node/*/bin; do PATH="$node_bin:$PATH" done shopt -u nullglob fi "$script_file" EOT }