#!/usr/bin/env bash set -euo pipefail # ── Shell defaults: copy baked files from /etc/skel-devbox/ if absent # Respects host bind-mounts and user customizations — existing files # are never overwritten. To restore defaults: rm ~/.bash_aliases (or # .inputrc) and recreate the container, or cp from /etc/skel-devbox/ # directly. SKEL_DIR="/etc/skel-devbox" if [ -d "$SKEL_DIR" ]; then for f in .bash_aliases .inputrc; do if [ -f "$SKEL_DIR/$f" ] && [ ! -e "$HOME/$f" ]; then cp "$SKEL_DIR/$f" "$HOME/$f" fi done fi # ── MemPalace: initialize palace for the workspace if mempalace is installed # Creates the palace directory structure on first run. Idempotent — skips # if palace already exists. Uses the workspace path to derive the wing name. if command -v mempalace &>/dev/null && [ -d /workspace ]; then PALACE_DIR="${HOME}/.mempalace" if [ ! -d "$PALACE_DIR/palace" ]; then echo "Initializing MemPalace for workspace..." mempalace init /workspace 2>/dev/null || true fi fi # ── Git config defaults ────────────────────────────────────────────── if [ -n "${GIT_USER_NAME:-}" ] && ! git config --global user.name &>/dev/null; then git config --global user.name "$GIT_USER_NAME" fi if [ -n "${GIT_USER_EMAIL:-}" ] && ! git config --global user.email &>/dev/null; then git config --global user.email "$GIT_USER_EMAIL" fi # ── Generate opencode config from env vars if no config mounted ────── CONFIG_DIR="$HOME/.config/opencode" CONFIG_FILE="$CONFIG_DIR/opencode.json" if [ ! -f "$CONFIG_FILE" ] && [ -n "${OPENCODE_PROVIDER:-}" ]; then echo "Generating opencode config for provider: $OPENCODE_PROVIDER" mkdir -p "$CONFIG_DIR" case "$OPENCODE_PROVIDER" in anthropic) cat > "$CONFIG_FILE" < "$CONFIG_FILE" < "$CONFIG_FILE" < "$CONFIG_FILE" </dev/null; then echo "WARNING: ENABLE_OMOS=true but bun is not installed." echo "Rebuild with: docker compose build --build-arg INSTALL_OMOS=true" elif [ ! -f "$OMOS_CONFIG" ]; then echo "Setting up oh-my-opencode-slim agents..." # Determine installer flags OMOS_TMUX_FLAG="no" if [ "${OMOS_TMUX:-false}" = "true" ]; then OMOS_TMUX_FLAG="yes" fi OMOS_SKILLS_FLAG="yes" if [ "${OMOS_SKILLS:-true}" = "false" ]; then OMOS_SKILLS_FLAG="no" fi bunx oh-my-opencode-slim@latest install \ --no-tui \ --tmux="${OMOS_TMUX_FLAG}" \ --skills="${OMOS_SKILLS_FLAG}" echo "oh-my-opencode-slim configured successfully." else echo "oh-my-opencode-slim config found at $OMOS_CONFIG (use OMOS_RESET=true to overwrite)." # Allow reset via env var (creates backup automatically) if [ "${OMOS_RESET:-false}" = "true" ]; then echo "OMOS_RESET=true — regenerating oh-my-opencode-slim config..." OMOS_TMUX_FLAG="no" [ "${OMOS_TMUX:-false}" = "true" ] && OMOS_TMUX_FLAG="yes" OMOS_SKILLS_FLAG="yes" [ "${OMOS_SKILLS:-true}" = "false" ] && OMOS_SKILLS_FLAG="no" bunx oh-my-opencode-slim@latest install \ --no-tui \ --tmux="${OMOS_TMUX_FLAG}" \ --skills="${OMOS_SKILLS_FLAG}" \ --reset fi fi fi # ── Execute command ────────────────────────────────────────────────── exec "$@"