You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -30,7 +30,7 @@ the workspace in Coder.
30
30
|`rtk`|[rtk](https://github.com/rtk-ai/rtk), token-reducing Claude proxy | Auto-patches Claude Code via a post-create hook at workspace start |
31
31
|`nvm`|[nvm](https://github.com/nvm-sh/nvm) at `/usr/local/share/nvm`| Default Node = LTS, `node`/`npm`/`npx` in `/usr/local/bin`|
32
32
|`web-shell`|[web-shell](https://github.com/SoureCode/web-shell), persistent browser terminal | systemd unit, registered as a Coder app |
33
-
|`jetbrains`| JetBrains Gateway remote backend persistence | Headless-only: Toolbox/Gateway runs on the user's local machine, opens a `jetbrains-gateway://` URL that SSHes in and runs `remote-dev-server.sh` here. Declares `~/.cache/JetBrains/`, `~/.config/JetBrains/`, `~/.local/share/JetBrains/`, `~/.java/.userPrefs/jetbrains/` to `home-persist` so the downloaded IDE backend, per-IDE settings, plugins, project indexes and JetProfile login survive workspace restarts. |
33
+
|`jetbrains`| JetBrains Toolbox workspace integration | Uses Coder's JetBrains Toolbox module (`registry.coder.com/coder/jetbrains/coder`). Persists `~/.config/JetBrains/`, `~/.local/share/JetBrains/`, and `~/.java/.userPrefs/jetbrains/`for settings/plugins and JetProfile/license state. On startup, writes Toolbox `environment.json` (`allowUpdate=false`) and pins backend install location to `/mnt/home-persist/.jetbrains-dist` to avoid per-restart re-downloads, enforces `idea.properties` path split (`config/plugins` persisted, `system/log` in `/tmp`), prunes persisted `Daemon`, Toolbox `download/backup`, and per-IDE `caches/logs`, and does not persist `~/.cache/JetBrains/`. |
34
34
|`home-persist`| Manifest-driven `$HOME` persistence | Reads `/etc/home-persist.d/*.json`, symlinks declared paths under `/mnt/home-persist` (per-owner volume). Add extra per-workspace paths via the `home_persist_paths` Coder parameter. See [`docs/persistence.md`](docs/persistence.md). |
35
35
|`llvm` (cpp) | Clang toolchain via [apt.llvm.org](https://apt.llvm.org/)|`CC=clang`, `CXX=clang++` via `/etc/profile.d/llvm-env.sh`|
36
36
|`cmake` (cpp) | CMake from [Kitware's GitHub releases](https://cmake.org/)| latest by default |
|`jetbrains`| owner |`.config/JetBrains/`, `.local/share/JetBrains/`, `.java/.userPrefs/jetbrains/`| Settings, plugins, and JetProfile state that should follow the user across workspaces. Keymaps, color schemes, installed plugins, license acceptance. |
140
-
|`jetbrains-local`| workspace |`.cache/JetBrains/`| Per-workspace runtime: the SSH-deployed Toolbox Agent (`Toolbox-CLI-dist/`), its IPC lock and unix socket under `Toolbox/ports/`, the downloaded IDE backend (`RemoteDev/dist/`), and per-IDE system caches and project indexes. Must be per-workspace — concurrent workspaces that share `.cache/JetBrains/` race on the Toolbox Agent's `UnixApplicationStartLock` and fail to connect ("main instance is alive, cannot bind twice"). |
130
+
|`jetbrains`| owner |`.config/JetBrains/`, `.local/share/JetBrains/`, `.java/.userPrefs/jetbrains/`| Settings, plugins, and JetProfile/license state that should follow the user across workspaces. |
141
131
142
132
Anything not declared is image-owned (or per-workspace-home-volume-owned)
143
133
and resets on image rebuild — git config, SSH keys, bash history, caches.
@@ -244,22 +234,44 @@ ls /mnt/home-persist/.workspaces/
244
234
rm -rf /mnt/home-persist/.workspaces/<stale-id>
245
235
```
246
236
247
-
## Migrating an owner-scoped path to workspace-scoped
237
+
## Migrating or Dropping a Persisted Path
248
238
249
-
Flipping a path from `scope: "owner"` to `scope: "workspace"` leaves the old
250
-
`/mnt/home-persist/<path>` dir behind — the resolver retargets the symlink
251
-
but doesn't touch the previous target. Tens to hundreds of MB can accumulate
252
-
(JetBrains caches, Docker-ish state, etc.).
239
+
Changing persistence scope or dropping persistence for a path leaves the old
240
+
`/mnt/home-persist/<path>` dir behind — the resolver retargets or removes
241
+
symlink ownership, but doesn't clean the previous target automatically.
253
242
254
243
Add a `migration_sweep` line to `coder_script.lifecycle_init` in `main.tf`,
0 commit comments