feat(zed): settings input and MCP servers example (#317)
This PR adds an optional `settings` input to the Zed module and updates the README with an example for configuring MCP servers. Changes: - Add `settings` variable to modules/zed/main.tf - Add `coder_script` to write/merge `~/.config/zed/settings.json` (respects `$XDG_CONFIG_HOME` and merges with existing settings if `jq` is available) - Update README with a `settings` example configuring MCP context servers and clarify default settings path Test plan: - Syntax-only: `bun test --filter zed` fails in CI without Terraform; this change only adds inputs and a startup script. No behavior change to existing outputs. Co-authored-by: Atif Ali <10648092+matifali@users.noreply.github.com> --------- Co-authored-by: blink-so[bot] <211532188+blink-so[bot]@users.noreply.github.com> Co-authored-by: DevCats <christofer@coder.com>
This commit is contained in:
parent
1749f9ca05
commit
d9b223ac3c
@ -19,7 +19,7 @@ Zed is a high-performance, multiplayer code editor from the creators of Atom and
|
|||||||
module "zed" {
|
module "zed" {
|
||||||
count = data.coder_workspace.me.start_count
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/coder/zed/coder"
|
source = "registry.coder.com/coder/zed/coder"
|
||||||
version = "1.0.1"
|
version = "1.1.0"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@ -32,7 +32,7 @@ module "zed" {
|
|||||||
module "zed" {
|
module "zed" {
|
||||||
count = data.coder_workspace.me.start_count
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/coder/zed/coder"
|
source = "registry.coder.com/coder/zed/coder"
|
||||||
version = "1.0.1"
|
version = "1.1.0"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
folder = "/home/coder/project"
|
folder = "/home/coder/project"
|
||||||
}
|
}
|
||||||
@ -44,7 +44,7 @@ module "zed" {
|
|||||||
module "zed" {
|
module "zed" {
|
||||||
count = data.coder_workspace.me.start_count
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/coder/zed/coder"
|
source = "registry.coder.com/coder/zed/coder"
|
||||||
version = "1.0.1"
|
version = "1.1.0"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
display_name = "Zed Editor"
|
display_name = "Zed Editor"
|
||||||
order = 1
|
order = 1
|
||||||
@ -57,8 +57,36 @@ module "zed" {
|
|||||||
module "zed" {
|
module "zed" {
|
||||||
count = data.coder_workspace.me.start_count
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/coder/zed/coder"
|
source = "registry.coder.com/coder/zed/coder"
|
||||||
version = "1.0.1"
|
version = "1.1.0"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
agent_name = coder_agent.example.name
|
agent_name = coder_agent.example.name
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Configure Zed settings including MCP servers
|
||||||
|
|
||||||
|
Zed stores settings at `~/.config/zed/settings.json` by default. If `XDG_CONFIG_HOME` is set on Linux, settings will be at `$XDG_CONFIG_HOME/zed/settings.json`.
|
||||||
|
|
||||||
|
You can declaratively set/merge settings with the `settings` input. Provide a JSON string (e.g., via `jsonencode(...)`). For example, to configure MCP servers:
|
||||||
|
|
||||||
|
```tf
|
||||||
|
module "zed" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
|
source = "registry.coder.com/coder/zed/coder"
|
||||||
|
version = "1.1.0"
|
||||||
|
agent_id = coder_agent.example.id
|
||||||
|
|
||||||
|
settings = jsonencode({
|
||||||
|
context_servers = {
|
||||||
|
your-mcp-server = {
|
||||||
|
source = "custom"
|
||||||
|
command = "some-command"
|
||||||
|
args = ["arg-1", "arg-2"]
|
||||||
|
env = {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
See Zed’s settings files documentation: https://zed.dev/docs/configuring-zed#settings-files
|
||||||
|
|||||||
@ -50,7 +50,14 @@ variable "display_name" {
|
|||||||
default = "Zed"
|
default = "Zed"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
variable "settings" {
|
||||||
|
type = string
|
||||||
|
description = "JSON encoded settings.json"
|
||||||
|
default = ""
|
||||||
|
}
|
||||||
|
|
||||||
data "coder_workspace" "me" {}
|
data "coder_workspace" "me" {}
|
||||||
|
|
||||||
data "coder_workspace_owner" "me" {}
|
data "coder_workspace_owner" "me" {}
|
||||||
|
|
||||||
locals {
|
locals {
|
||||||
@ -60,6 +67,30 @@ locals {
|
|||||||
hostname = var.agent_name != "" ? "${local.agent_name}.${local.workspace_name}.${local.owner_name}.coder" : "${local.workspace_name}.coder"
|
hostname = var.agent_name != "" ? "${local.agent_name}.${local.workspace_name}.${local.owner_name}.coder" : "${local.workspace_name}.coder"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resource "coder_script" "zed_settings" {
|
||||||
|
agent_id = var.agent_id
|
||||||
|
display_name = "Configure Zed settings"
|
||||||
|
icon = "/icon/zed.svg"
|
||||||
|
run_on_start = true
|
||||||
|
script = <<-EOT
|
||||||
|
set -eu
|
||||||
|
SETTINGS_JSON='${replace(var.settings, "\"", "\\\"")}'
|
||||||
|
if [ -z "$${SETTINGS_JSON}" ] || [ "$${SETTINGS_JSON}" = "{}" ]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
CONFIG_HOME="$${XDG_CONFIG_HOME:-$HOME/.config}"
|
||||||
|
ZED_DIR="$${CONFIG_HOME}/zed"
|
||||||
|
mkdir -p "$${ZED_DIR}"
|
||||||
|
SETTINGS_FILE="$${ZED_DIR}/settings.json"
|
||||||
|
if command -v jq >/dev/null 2>&1 && [ -s "$${SETTINGS_FILE}" ]; then
|
||||||
|
tmpfile="$(mktemp)"
|
||||||
|
jq -s '.[0] * .[1]' "$${SETTINGS_FILE}" <(printf '%s\n' "$${SETTINGS_JSON}") > "$${tmpfile}" && mv "$${tmpfile}" "$${SETTINGS_FILE}"
|
||||||
|
else
|
||||||
|
printf '%s\n' "$${SETTINGS_JSON}" > "$${SETTINGS_FILE}"
|
||||||
|
fi
|
||||||
|
EOT
|
||||||
|
}
|
||||||
|
|
||||||
resource "coder_app" "zed" {
|
resource "coder_app" "zed" {
|
||||||
agent_id = var.agent_id
|
agent_id = var.agent_id
|
||||||
display_name = var.display_name
|
display_name = var.display_name
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user