@@ -81,16 +81,16 @@ For more advanced use cases, consult the [advanced dev containers doc](./advance
8181Add apps to the dev container workspace resource for one-click access.
8282
8383``` terraform
84- "coder": {
85- "apps": [
86- {
87- "slug": "cursor",
88- "displayName": "Cursor",
89- "url": "cursor://coder.coder-remote/openDevContainer?owner=${localEnv:CODER_WORKSPACE_OWNER_NAME}&workspace=${localEnv:CODER_WORKSPACE_NAME}&agent=${localEnv:CODER_WORKSPACE_PARENT_AGENT_NAME}&url=${localEnv:CODER_URL}&token=$SESSION_TOKEN&devContainerName=${localEnv:CONTAINER_ID}&devContainerFolder=${containerWorkspaceFolder}&localWorkspaceFolder=${localWorkspaceFolder}",
90- "external": true,
91- "icon": "/icon/cursor.svg",
92- "order": 1
93- },
84+ "coder": {
85+ "apps": [
86+ {
87+ "slug": "cursor",
88+ "displayName": "Cursor",
89+ "url": "cursor://coder.coder-remote/openDevContainer?owner=${localEnv:CODER_WORKSPACE_OWNER_NAME}&workspace=${localEnv:CODER_WORKSPACE_NAME}&agent=${localEnv:CODER_WORKSPACE_PARENT_AGENT_NAME}&url=${localEnv:CODER_URL}&token=$SESSION_TOKEN&devContainerName=${localEnv:CONTAINER_ID}&devContainerFolder=${containerWorkspaceFolder}&localWorkspaceFolder=${localWorkspaceFolder}",
90+ "external": true,
91+ "icon": "/icon/cursor.svg",
92+ "order": 1
93+ },
9494```
9595
9696<details ><summary >Expand for a full example:</summary >
@@ -102,57 +102,57 @@ resource "coder_devcontainer" "my-repository" {
102102...
103103{
104104 "customizations": {
105- ...
106- "coder": {
107- "apps": [
108- {
109- "slug": "cursor",
110- "displayName": "Cursor",
111- "url": "cursor://coder.coder-remote/openDevContainer?owner=${localEnv:CODER_WORKSPACE_OWNER_NAME}&workspace=${localEnv:CODER_WORKSPACE_NAME}&agent=${localEnv:CODER_WORKSPACE_PARENT_AGENT_NAME}&url=${localEnv:CODER_URL}&token=$SESSION_TOKEN&devContainerName=${localEnv:CONTAINER_ID}&devContainerFolder=${containerWorkspaceFolder}&localWorkspaceFolder=${localWorkspaceFolder}",
112- "external": true,
113- "icon": "/icon/cursor.svg",
114- "order": 1
115- },
116- // Reproduce `code-server` app here from the code-server
117- // feature so that we can set the correct folder and order.
118- // Currently, the order cannot be specified via option because
119- // we parse it as a number whereas variable interpolation
120- // results in a string. Additionally we set health check which
121- // is not yet set in the feature.
122- {
123- "slug": "code-server",
124- "displayName": "code-server",
125- "url": "http://${localEnv:FEATURE_CODE_SERVER_OPTION_HOST:127.0.0.1}:${localEnv:FEATURE_CODE_SERVER_OPTION_PORT:8080}/?folder=${containerWorkspaceFolder}",
126- "openIn": "${localEnv:FEATURE_CODE_SERVER_OPTION_APPOPENIN:slim-window}",
127- "share": "${localEnv:FEATURE_CODE_SERVER_OPTION_APPSHARE:owner}",
128- "icon": "/icon/code.svg",
129- "group": "${localEnv:FEATURE_CODE_SERVER_OPTION_APPGROUP:Web Editors}",
130- "order": 3,
131- "healthCheck": {
132- "url": "http://${localEnv:FEATURE_CODE_SERVER_OPTION_HOST:127.0.0.1}:${localEnv:FEATURE_CODE_SERVER_OPTION_PORT:8080}/healthz",
133- "interval": 5,
134- "threshold": 2
135- },
136- {
137- "slug": "windsurf",
138- "displayName": "Windsurf Editor",
139- "url": "windsurf://coder.coder-remote/openDevContainer?owner=${localEnv:CODER_WORKSPACE_OWNER_NAME}&workspace=${localEnv:CODER_WORKSPACE_NAME}&agent=${localEnv:CODER_WORKSPACE_PARENT_AGENT_NAME}&url=${localEnv:CODER_URL}&token=$SESSION_TOKEN&devContainerName=${localEnv:CONTAINER_ID}&devContainerFolder=${containerWorkspaceFolder}&localWorkspaceFolder=${localWorkspaceFolder}",
140- "external": true,
141- "icon": "/icon/windsurf.svg",
142- "order": 3
143- },
144- {
145- "slug": "zed",
146- "displayName": "Zed Editor",
147- "url": "zed://ssh/${localEnv:CODER_WORKSPACE_AGENT_NAME}.${localEnv:CODER_WORKSPACE_NAME}.${localEnv:CODER_WORKSPACE_OWNER_NAME}.coder${containerWorkspaceFolder}",
148- "external": true,
149- "icon": "/icon/zed.svg",
150- "order": 4
151- },
152- }
153- ]
154- }
155- },
105+ ...
106+ "coder": {
107+ "apps": [
108+ {
109+ "slug": "cursor",
110+ "displayName": "Cursor",
111+ "url": "cursor://coder.coder-remote/openDevContainer?owner=${localEnv:CODER_WORKSPACE_OWNER_NAME}&workspace=${localEnv:CODER_WORKSPACE_NAME}&agent=${localEnv:CODER_WORKSPACE_PARENT_AGENT_NAME}&url=${localEnv:CODER_URL}&token=$SESSION_TOKEN&devContainerName=${localEnv:CONTAINER_ID}&devContainerFolder=${containerWorkspaceFolder}&localWorkspaceFolder=${localWorkspaceFolder}",
112+ "external": true,
113+ "icon": "/icon/cursor.svg",
114+ "order": 1
115+ },
116+ // Reproduce `code-server` app here from the code-server
117+ // feature so that we can set the correct folder and order.
118+ // Currently, the order cannot be specified via option because
119+ // we parse it as a number whereas variable interpolation
120+ // results in a string. Additionally we set health check which
121+ // is not yet set in the feature.
122+ {
123+ "slug": "code-server",
124+ "displayName": "code-server",
125+ "url": "http://${localEnv:FEATURE_CODE_SERVER_OPTION_HOST:127.0.0.1}:${localEnv:FEATURE_CODE_SERVER_OPTION_PORT:8080}/?folder=${containerWorkspaceFolder}",
126+ "openIn": "${localEnv:FEATURE_CODE_SERVER_OPTION_APPOPENIN:slim-window}",
127+ "share": "${localEnv:FEATURE_CODE_SERVER_OPTION_APPSHARE:owner}",
128+ "icon": "/icon/code.svg",
129+ "group": "${localEnv:FEATURE_CODE_SERVER_OPTION_APPGROUP:Web Editors}",
130+ "order": 3,
131+ "healthCheck": {
132+ "url": "http://${localEnv:FEATURE_CODE_SERVER_OPTION_HOST:127.0.0.1}:${localEnv:FEATURE_CODE_SERVER_OPTION_PORT:8080}/healthz",
133+ "interval": 5,
134+ "threshold": 2
135+ },
136+ {
137+ "slug": "windsurf",
138+ "displayName": "Windsurf Editor",
139+ "url": "windsurf://coder.coder-remote/openDevContainer?owner=${localEnv:CODER_WORKSPACE_OWNER_NAME}&workspace=${localEnv:CODER_WORKSPACE_NAME}&agent=${localEnv:CODER_WORKSPACE_PARENT_AGENT_NAME}&url=${localEnv:CODER_URL}&token=$SESSION_TOKEN&devContainerName=${localEnv:CONTAINER_ID}&devContainerFolder=${containerWorkspaceFolder}&localWorkspaceFolder=${localWorkspaceFolder}",
140+ "external": true,
141+ "icon": "/icon/windsurf.svg",
142+ "order": 3
143+ },
144+ {
145+ "slug": "zed",
146+ "displayName": "Zed Editor",
147+ "url": "zed://ssh/${localEnv:CODER_WORKSPACE_AGENT_NAME}.${localEnv:CODER_WORKSPACE_NAME}.${localEnv:CODER_WORKSPACE_OWNER_NAME}.coder${containerWorkspaceFolder}",
148+ "external": true,
149+ "icon": "/icon/zed.svg",
150+ "order": 4
151+ },
152+ }
153+ ]
154+ }
155+ },
156156}
157157```
158158
@@ -235,7 +235,7 @@ resource "docker_container" "workspace" {
235235 env = [
236236 "CODER_AGENT_TOKEN=${coder_agent.main.token}",
237237 "CODER_AGENT_URL=${data.coder_workspace.me.access_url}"
238- ]
238+ ]
239239}
240240```
241241
@@ -251,9 +251,9 @@ environment variable before starting the agent.
2512511 . Confirm that the Docker daemon is running inside the workspace:
252252
253253 ``` shell
254- sudo service docker start && \
255- docker ps
256- ```
254+ sudo service docker start && \
255+ docker ps
256+ ```
257257
2582581. Confirm the location of ` devcontainer.json` .
259259
0 commit comments