datcode/README.md
2026-07-17 15:57:16 +02:00

66 lines
2 KiB
Markdown

# datcode
![Static Badge](https://img.shields.io/badge/SLOP%20LEVEL-PURE%20VIBES-red?style=for-the-badge)
> ⚠️ Note: this is not a reusable tool (yet) as it contains hard-coded paths and configuration.
Run OpenCode directly in an isolated Lima VM with a complete Docker Engine.
The VM starts when a session begins and stops when the tmux session ends.
## Prerequisites
- Lima 2.0 or newer
- QEMU with KVM access
- Projects stored under `/dat`
## Usage
Invoke the wrapper from the project OpenCode should work on:
```sh
/dat/datcode/bin/datcode
```
The first invocation creates an Ubuntu VM, installs Docker Engine as a system
service, and installs Bun and OpenCode directly in the guest. This can take
several minutes and is bounded by a ten-minute startup timeout. Later
invocations reuse the VM disk but stop the VM after each session.
Only the invocation's current working directory and `data` are mounted into the
VM. The mounts are replaced before each start, so only one datcode session may
run at a time.
Docker images, containers, and volumes persist on the VM disk while it is
stopped. OpenCode can use `docker` and `docker compose` normally from inside the
VM.
Update OpenCode with:
```sh
/dat/datcode/bin/datcode update
```
OpenCode data remains on the host:
| Host | VM |
| --- | --- |
| `data/config` | `~/.config/opencode` |
| `data/share` | `~/.local/share/opencode` |
| `data/state` | `~/.local/state/opencode` |
| `data/tmux` | `~/.config/tmux` |
Use `/connect` inside OpenCode to save provider credentials in these mounted
directories.
OpenCode runs in a tmux session named `dat`. The guest uses the tmux
configuration copied from the host into `data/tmux/tmux.conf`. Exiting OpenCode
returns to a guest shell; exit that shell or detach from tmux to stop the VM.
Remove the VM and all Docker data with:
```sh
limactl delete datcode
```
Delete and recreate the VM after changing `lima.yaml`; Lima stores the resolved
configuration when it creates the instance.