e4063b5559
Two changes that address a longstanding frustration: bash history is lost on every container recreate, and the container's ~/.bashrc and ~/.inputrc are stock Debian (no history tuning, no prefix search on arrow keys, no integrations). Added a named volume 'devbox-shell-history' mounted at ~/.cache/bash with HISTFILE pointing there; history now survives 'docker compose up --force-recreate'. The volume is added to both docker-compose.yml and docker-compose.shared.yml, and ~/.cache/bash is registered in the entrypoint ownership-fix loop per the AGENTS.md convention. Baked rootfs/home/developer/.bash_aliases (sourced automatically by Debian's default ~/.bashrc) and rootfs/home/developer/.inputrc into the image. They give new containers: 100k-entry timestamped dedup history with per-prompt flush, Up/Down arrow prefix history search, case-insensitive coloured completion, aliases that prefer eza and bat when present, git shortcuts, interactive rm/mv/cp, zoxide and fzf (via 'fzf --bash') integration, and a [devbox] prompt marker. The fzf integration uses 'fzf --bash' because we install fzf from GitHub releases, not apt — the apt-path key-bindings aren't present. Users who prefer their host's own shell config can uncomment two commented bind-mount lines in docker-compose.yml to shadow the baked defaults.
55 lines
1.8 KiB
YAML
55 lines
1.8 KiB
YAML
# opencode-devbox docker-compose for shared machines
|
|
#
|
|
# For machines where multiple users share one OS account (e.g. 'garage').
|
|
# Each user gets isolated config, data, and named volumes by setting
|
|
# SIGNUM in their .env file.
|
|
#
|
|
# Setup per user:
|
|
# 1. mkdir -p ~/<signum>/opencode-devbox && cd ~/<signum>/opencode-devbox
|
|
# 2. cp docker-compose.shared.yml docker-compose.yml
|
|
# 3. cp .env.shared.example .env
|
|
# 4. Edit .env with your signum, provider, keys, etc.
|
|
# 5. mkdir -p ~/<signum>/.config/opencode
|
|
# 6. docker compose up -d
|
|
#
|
|
# Named volumes are automatically isolated per user because Docker Compose
|
|
# prefixes them with the project directory name (e.g. opencode-devbox_devbox-data).
|
|
# Since each user runs from ~/<signum>/opencode-devbox/, volumes don't collide.
|
|
|
|
services:
|
|
devbox:
|
|
image: joakimp/opencode-devbox:latest
|
|
container_name: devbox-${SIGNUM:?Set SIGNUM in .env}
|
|
stdin_open: true
|
|
tty: true
|
|
env_file:
|
|
- .env
|
|
environment:
|
|
- TERM=xterm-256color
|
|
volumes:
|
|
# Host workspace — user's project directory
|
|
- ${WORKSPACE_PATH:-~/src}:/workspace
|
|
|
|
# SSH keys — user-specific if available, else shared
|
|
- ${SSH_KEY_PATH:-~/.ssh}:/home/developer/.ssh:ro
|
|
|
|
# Opencode config — per-user (persists settings across restarts)
|
|
- ${HOME}/${SIGNUM}/.config/opencode:/home/developer/.config/opencode
|
|
|
|
# Persist opencode data (auth, memory, session history)
|
|
- devbox-data:/home/developer/.local/share/opencode
|
|
|
|
# Persist bash history across container recreations
|
|
- devbox-shell-history:/home/developer/.cache/bash
|
|
|
|
# Persist uv data (Python installs)
|
|
- devbox-uv:/home/developer/.local/share/uv
|
|
|
|
# Optional: AWS credentials (per-user if available)
|
|
# - ${HOME}/${SIGNUM}/.aws:/home/developer/.aws
|
|
|
|
volumes:
|
|
devbox-data:
|
|
devbox-shell-history:
|
|
devbox-uv:
|