Arch image with turnstone (venv), dev toolkit, rootless podman; boots via boco (virtiofs shares, direct UID mapping for nested virtiofs). sshd ops channel + turnstone-server as guest marvin; state (SQLite db, config, work) on host shares; LLM via the TensorX OpenAI-compatible gateway (https://api.tensorx.ai/v1), reachable from the guest through both slirp layers with no relay.
34 lines
1.1 KiB
TOML
34 lines
1.1 KiB
TOML
# turnstone config — mounted into the VM at ~/.config/turnstone/config.toml
|
|
# Reference: turnstone.example.toml in the upstream repo.
|
|
|
|
[auth]
|
|
# JWT signing secret. Auth is always enabled; generate once:
|
|
# python -c 'import secrets; print(secrets.token_hex(32))'
|
|
jwt_secret = "CHANGE_ME_JWT_SECRET"
|
|
|
|
# Models are defined here or via the admin console Models tab.
|
|
[models.tensorx]
|
|
# TensorX — OpenAI-compatible gateway (same backend this opencode uses).
|
|
model = "z-ai/glm-5.3-flash"
|
|
provider = "openai"
|
|
base_url = "https://api.tensorx.ai/v1"
|
|
api_key = "CHANGE_ME_TENSORX_API_KEY"
|
|
context_window = 1000000
|
|
|
|
# Self-hosted provider later? Any OpenAI-compatible endpoint reachable
|
|
# from the guest works, e.g. llama.cpp on the LAN:
|
|
# [models.local]
|
|
# model = "..."
|
|
# provider = "openai"
|
|
# base_url = "http://<host>:<port>/v1"
|
|
# max_concurrency = 1
|
|
|
|
[database]
|
|
# SQLite file on the host-mounted data/ share; survives VM reboots.
|
|
# (NOTE: for SQLite this is `path` — `url` is only used by PostgreSQL.)
|
|
path = "/var/lib/turnstone/turnstone.db"
|
|
|
|
[tools]
|
|
# Workspace surfaced to the model (mounted from ./work on the host).
|
|
workspace_dir = "/home/marvin/work"
|