From 82cdc4ca2d5b2c04c1a941b57a427a84e50d4025 Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Thu, 26 Jun 2025 13:06:26 +0000 Subject: [PATCH 1/4] feat(devcontainer): add cursor, filebrowser, windsurf and zed --- .devcontainer/devcontainer.json | 31 +++++++++- .../filebrowser/devcontainer-feature.json | 50 +++++++++++++++++ .devcontainer/filebrowser/install.sh | 56 +++++++++++++++++++ dogfood/coder/main.tf | 22 ++++---- 4 files changed, 148 insertions(+), 11 deletions(-) create mode 100644 .devcontainer/filebrowser/devcontainer-feature.json create mode 100644 .devcontainer/filebrowser/install.sh diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 8d16afcda362a..a37647fb1acee 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -9,7 +9,8 @@ "ghcr.io/coder/devcontainer-features/code-server:1": { "auth": "none", "port": 13337 - } + }, + "./filebrowser": {} }, // SYS_PTRACE to enable go debugging "runArgs": [ @@ -20,6 +21,34 @@ "extensions": [ "biomejs.biome" ] + }, + "coder": { + "apps": [ + { + "slug": "cursor", + "displayName": "Cursor Desktop", + "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}", + "external": true, + "icon": "/icon/cursor.svg", + "order": 1 + }, + { + "slug": "windsurf", + "displayName": "Windsurf Editor", + "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}", + "external": true, + "icon": "/icon/windsurf.svg", + "order": 4 + }, + { + "slug": "zed", + "displayName": "Zed Editor", + "url": "zed://ssh/${localEnv:CODER_WORKSPACE_AGENT_NAME}.${localEnv:CODER_WORKSPACE_NAME}.${localEnv:CODER_WORKSPACE_OWNER_NAME}/${containerWorkspaceFolder}", + "external": true, + "icon": "/icon/zed.svg", + "order": 5 + } + ] } }, "mounts": [ diff --git a/.devcontainer/filebrowser/devcontainer-feature.json b/.devcontainer/filebrowser/devcontainer-feature.json new file mode 100644 index 0000000000000..3829139cf3143 --- /dev/null +++ b/.devcontainer/filebrowser/devcontainer-feature.json @@ -0,0 +1,50 @@ +{ + "id": "filebrowser", + "version": "0.0.1", + "name": "File Browser", + "description": "A web-based file browser for your development container", + "options": { + "port": { + "type": "string", + "default": "13339", + "description": "The port to run filebrowser on" + }, + // "folder": { + // "type": "string", + // "default": "${containerWorkspaceFolder}", + // "description": "The root directory for filebrowser to serve" + // }, + "auth": { + "type": "string", + "enum": [ + "none", + "password" + ], + "default": "none", + "description": "Authentication method (none or password)" + } + }, + "entrypoint": "/usr/local/bin/filebrowser-entrypoint", + "dependsOn": { + "ghcr.io/devcontainers/features/common-utils:2": {} + }, + "customizations": { + "coder": { + "apps": [ + { + "slug": "filebrowser", + "displayName": "File Browser", + "url": "http://localhost:${localEnv:FEATURE_FILEBROWSER_OPTION_PORT:13339}", + "icon": "/icon/filebrowser.svg", + "order": 3, + "subdomain": true, + "healthcheck": { + "url": "http://localhost:${localEnv:FEATURE_FILEBROWSER_OPTION_PORT:13339}/health", + "interval": 5, + "threshold": 6 + } + } + ] + } + } +} diff --git a/.devcontainer/filebrowser/install.sh b/.devcontainer/filebrowser/install.sh new file mode 100644 index 0000000000000..1f8390f63864c --- /dev/null +++ b/.devcontainer/filebrowser/install.sh @@ -0,0 +1,56 @@ +#!/usr/bin/env bash + +set -euo pipefail + +BOLD='\033[0;1m' + +printf "%sInstalling filebrowser\n\n" "${BOLD}" + +# Check if filebrowser is installed. +if ! command -v filebrowser &>/dev/null; then + curl -fsSL https://raw.githubusercontent.com/filebrowser/get/master/get.sh | bash +fi + +printf "🥳 Installation complete!\n\n" + +# Create run script. +cat >/usr/local/bin/filebrowser-entrypoint <>\${LOG_PATH} 2>&1 & + +printf "📝 Logs at \${LOG_PATH}\n\n" +EOF + +chmod +x /usr/local/bin/filebrowser-entrypoint + +printf "✅ File Browser installed!\n\n" +printf "🚀 Run 'filebrowser-entrypoint' to start the service\n\n" diff --git a/dogfood/coder/main.tf b/dogfood/coder/main.tf index dfc1127ba387b..457d6d2532b4c 100644 --- a/dogfood/coder/main.tf +++ b/dogfood/coder/main.tf @@ -328,19 +328,21 @@ module "coder-login" { } module "cursor" { - count = data.coder_workspace.me.start_count - source = "dev.registry.coder.com/coder/cursor/coder" - version = "1.1.0" - agent_id = coder_agent.dev.id - folder = local.repo_dir + count = data.coder_workspace.me.start_count + source = "dev.registry.coder.com/coder/cursor/coder" + version = "1.1.0" + agent_id = coder_agent.dev.id + agent_name = "dev" + folder = local.repo_dir } module "windsurf" { - count = data.coder_workspace.me.start_count - source = "registry.coder.com/coder/windsurf/coder" - version = "1.0.0" - agent_id = coder_agent.dev.id - folder = local.repo_dir + count = data.coder_workspace.me.start_count + source = "registry.coder.com/coder/windsurf/coder" + version = "1.0.0" + agent_id = coder_agent.dev.id + agent_name = "dev" + folder = local.repo_dir } module "zed" { From d37391d29c2bc252ba3d2954fb5fe37b1314674c Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Thu, 26 Jun 2025 16:45:23 +0300 Subject: [PATCH 2/4] Update .devcontainer/devcontainer.json --- .devcontainer/devcontainer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index a37647fb1acee..826d3fd38e6c2 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -43,7 +43,7 @@ { "slug": "zed", "displayName": "Zed Editor", - "url": "zed://ssh/${localEnv:CODER_WORKSPACE_AGENT_NAME}.${localEnv:CODER_WORKSPACE_NAME}.${localEnv:CODER_WORKSPACE_OWNER_NAME}/${containerWorkspaceFolder}", + "url": "zed://ssh/${localEnv:CODER_WORKSPACE_AGENT_NAME}.${localEnv:CODER_WORKSPACE_NAME}.${localEnv:CODER_WORKSPACE_OWNER_NAME}.coder/${containerWorkspaceFolder}", "external": true, "icon": "/icon/zed.svg", "order": 5 From be093004883a407ad70a00f00d8cb84a29b7a960 Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Thu, 26 Jun 2025 13:49:09 +0000 Subject: [PATCH 3/4] not supported --- dogfood/coder/main.tf | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/dogfood/coder/main.tf b/dogfood/coder/main.tf index 457d6d2532b4c..aef4e19ef0718 100644 --- a/dogfood/coder/main.tf +++ b/dogfood/coder/main.tf @@ -328,21 +328,23 @@ module "coder-login" { } module "cursor" { - count = data.coder_workspace.me.start_count - source = "dev.registry.coder.com/coder/cursor/coder" - version = "1.1.0" - agent_id = coder_agent.dev.id - agent_name = "dev" - folder = local.repo_dir + count = data.coder_workspace.me.start_count + source = "dev.registry.coder.com/coder/cursor/coder" + version = "1.1.0" + agent_id = coder_agent.dev.id + # Not supported yet. + # agent_name = "dev" + folder = local.repo_dir } module "windsurf" { - count = data.coder_workspace.me.start_count - source = "registry.coder.com/coder/windsurf/coder" - version = "1.0.0" - agent_id = coder_agent.dev.id - agent_name = "dev" - folder = local.repo_dir + count = data.coder_workspace.me.start_count + source = "registry.coder.com/coder/windsurf/coder" + version = "1.0.0" + agent_id = coder_agent.dev.id + # Not supported yet. + # agent_name = "dev" + folder = local.repo_dir } module "zed" { From f8d2fd987636fd2301d5876b3ca8576dde3a1369 Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Thu, 26 Jun 2025 13:56:47 +0000 Subject: [PATCH 4/4] undo template changes --- dogfood/coder/main.tf | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/dogfood/coder/main.tf b/dogfood/coder/main.tf index aef4e19ef0718..dfc1127ba387b 100644 --- a/dogfood/coder/main.tf +++ b/dogfood/coder/main.tf @@ -332,9 +332,7 @@ module "cursor" { source = "dev.registry.coder.com/coder/cursor/coder" version = "1.1.0" agent_id = coder_agent.dev.id - # Not supported yet. - # agent_name = "dev" - folder = local.repo_dir + folder = local.repo_dir } module "windsurf" { @@ -342,9 +340,7 @@ module "windsurf" { source = "registry.coder.com/coder/windsurf/coder" version = "1.0.0" agent_id = coder_agent.dev.id - # Not supported yet. - # agent_name = "dev" - folder = local.repo_dir + folder = local.repo_dir } module "zed" {