Simplify state persistence

Use use local ./data directory instead of
XDG directories.
This commit is contained in:
Jeena 2026-01-13 14:47:56 +09:00
parent c3e9e2b40b
commit 39edc252f0
4 changed files with 3 additions and 21 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
data

View file

@ -9,7 +9,7 @@ the host.
- Arch Linuxbased image
- Runs as the host user (same username, UID, GID)
- Mounts only the current project directory (same absolute path inside container)
- Persists OpenCode state via XDG directories
- Persists OpenCode state in ./data directory
- No access to SSH keys, passwords, or full `$HOME`
- Simple shell function (`opencode`) to launch interactively

View file

@ -15,10 +15,7 @@ services:
tty: true
environment:
XDG_DATA_HOME: "${XDG_DATA_HOME}"
XDG_CONFIG_HOME: "${XDG_CONFIG_HOME}"
XDG_STATE_HOME: "${XDG_STATE_HOME}"
XDG_CACHE_HOME: "${XDG_CACHE_HOME}"
HOME: "${PWD}/data"
UID: "${UID}"
GID: "${GID}"
@ -26,12 +23,6 @@ services:
# Current project (readwrite)
- "${PWD}:${PWD}"
# OpenCode persistence (host directories, writable)
- "${XDG_DATA_HOME}/opencode:${XDG_DATA_HOME}/opencode"
- "${XDG_CONFIG_HOME}/opencode:${XDG_CONFIG_HOME}/opencode"
- "${XDG_STATE_HOME}/opencode:${XDG_STATE_HOME}/opencode"
- "${XDG_CACHE_HOME}/opencode:${XDG_CACHE_HOME}/opencode"
cap_drop:
- ALL
security_opt:

View file

@ -1,19 +1,9 @@
OPENCODE_CONTAINER_DIR="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && pwd)"
opencode() {
# Set defaults if not already defined
: "${XDG_DATA_HOME:=$HOME/.local/share}"
: "${XDG_CONFIG_HOME:=$HOME/.config}"
: "${XDG_STATE_HOME:=$HOME/.local/state}"
: "${XDG_CACHE_HOME:=$HOME/.cache}"
UID=$(id -u) \
GID=$(id -g) \
USER=$(whoami) \
XDG_DATA_HOME="$XDG_DATA_HOME" \
XDG_CONFIG_HOME="$XDG_CONFIG_HOME" \
XDG_STATE_HOME="$XDG_STATE_HOME" \
XDG_CACHE_HOME="$XDG_CACHE_HOME" \
docker compose \
-f "$OPENCODE_CONTAINER_DIR/docker-compose.yaml" \
run --rm \