diff --git a/.devcontainer/devcontainer-lock.json b/.devcontainer/devcontainer-lock.json index 07c1644..1ecb7e0 100644 --- a/.devcontainer/devcontainer-lock.json +++ b/.devcontainer/devcontainer-lock.json @@ -25,6 +25,11 @@ "resolved": "ghcr.io/synergy-shock/devcontainer-features/node@sha256:bcc652d2dd44d71e63a665e419369ad017d936f023fa41f35d7fe3d2a4fb9a48", "integrity": "sha256:bcc652d2dd44d71e63a665e419369ad017d936f023fa41f35d7fe3d2a4fb9a48" }, + "ghcr.io/synergy-shock/devcontainer-features/opencode:1": { + "version": "1.0.0", + "resolved": "ghcr.io/synergy-shock/devcontainer-features/opencode@sha256:603e8087344006d0055152e7d70a7dcfcc6f610b011da87723c71763867fea2b", + "integrity": "sha256:603e8087344006d0055152e7d70a7dcfcc6f610b011da87723c71763867fea2b" + }, "ghcr.io/synergy-shock/devcontainer-features/rtk:0": { "version": "0.1.0", "resolved": "ghcr.io/synergy-shock/devcontainer-features/rtk@sha256:69779045064cdc8a6d92461949d15974d0e19bc78d0f2b791969d5d719f392d4", diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 1382c44..667c26d 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -10,17 +10,20 @@ "pnpmVersion": "latest", }, "ghcr.io/synergy-shock/devcontainer-features/claude:2": {}, + "ghcr.io/synergy-shock/devcontainer-features/opencode:1": {}, "ghcr.io/synergy-shock/devcontainer-features/rtk:0": {}, "ghcr.io/synergy-shock/devcontainer-features/gitbutler:0": {}, }, "mounts": [ "source=${localEnv:HOME}/.claude,target=/home/node/.claude,type=bind", "source=${localEnv:HOME}/.claude.json,target=/home/node/.claude.json,type=bind", + "source=${localEnv:HOME}/.config/opencode,target=/home/node/.config/opencode,type=bind", + "source=${localEnv:HOME}/.local/share/opencode,target=/home/node/.local/share/opencode,type=bind", "source=/Applications/1Password.app/Contents/MacOS/op-ssh-sign,target=/op-ssh-sign,type=bind,readonly", "source=/run/host-services/ssh-auth.sock,target=/agent.sock,type=bind", ], "customizations": {}, - "runArgs": [], + "runArgs": ["--name", "devcontainer"], "containerEnv": { "SSH_AUTH_SOCK": "/agent.sock", }, diff --git a/src/opencode/devcontainer-feature.json b/src/opencode/devcontainer-feature.json index ab29d10..e586710 100644 --- a/src/opencode/devcontainer-feature.json +++ b/src/opencode/devcontainer-feature.json @@ -1,6 +1,6 @@ { "id": "opencode", - "version": "1.0.0", + "version": "1.0.1", "name": "OpenCode", "description": "Installs the OpenCode AI CLI.", "documentationURL": "https://github.com/Synergy-Shock/devcontainer-features/tree/main/src/opencode", diff --git a/src/opencode/install.sh b/src/opencode/install.sh index 0198025..5e5395a 100755 --- a/src/opencode/install.sh +++ b/src/opencode/install.sh @@ -14,6 +14,24 @@ fi OPENCODE_VERSION="${VERSION:-latest}" +# ------------------------------------------------------------------ +# Resolve the target user and home directory. +# The dev container CLI normally injects _REMOTE_USER / _REMOTE_USER_HOME, +# but they can be empty depending on the build context — derive sane +# fallbacks so chown/mkdir never run against an empty path. +# ------------------------------------------------------------------ +if [ -z "${_REMOTE_USER}" ]; then + _REMOTE_USER="$(id -un 1000 2>/dev/null || echo root)" +fi + +if [ -z "${_REMOTE_USER_HOME}" ]; then + _REMOTE_USER_HOME="$(getent passwd "${_REMOTE_USER}" | cut -d: -f6)" +fi + +if [ -z "${_REMOTE_USER_HOME}" ]; then + _REMOTE_USER_HOME="$([ "${_REMOTE_USER}" = "root" ] && echo /root || echo "/home/${_REMOTE_USER}")" +fi + export DEBIAN_FRONTEND=noninteractive apt-get update @@ -34,8 +52,8 @@ opencode --version echo "==> Adjusting permissions for ${_REMOTE_USER} user..." chown -R "${_REMOTE_USER}:${_REMOTE_USER}" "${OPENCODE_INSTALL_HOME}" 2>/dev/null || true -echo "==> Pre-creating XDG directories for ${_REMOTE_USER} user..." +echo "==> Pre-creating XDG directories for ${_REMOTE_USER} user (home: ${_REMOTE_USER_HOME})..." mkdir -p "${_REMOTE_USER_HOME}/.config" "${_REMOTE_USER_HOME}/.local" -chown -R "${_REMOTE_USER}:${_REMOTE_USER}" "${_REMOTE_USER_HOME}" +chown "${_REMOTE_USER}:${_REMOTE_USER}" "${_REMOTE_USER_HOME}" "${_REMOTE_USER_HOME}/.config" "${_REMOTE_USER_HOME}/.local" 2>/dev/null || true echo "==> OpenCode feature installation complete!"