the universal sandbox runtime for agents and humans. pocketenv.io
sandbox openclaw agent claude-code vercel-sandbox deno-sandbox cloudflare-sandbox atproto sprites daytona
7
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add modal sandbox images and publish workflow

Add Dockerfiles for multiple modal sandboxes and a GitHub Actions
workflow to build and push them to GHCR. Update the sandbox provider to
use ghcr.io/pocketenv-io/daytona-openclaw:0.1.0 as the default image.

+1416 -1
+71
.github/workflows/publish-modal.yml
··· 1 + name: Publish 2 + on: 3 + push: 4 + branches: 5 + - main 6 + paths: 7 + - "modal/**" 8 + - ".github/workflows/publish.yml" 9 + 10 + jobs: 11 + deploy: 12 + runs-on: ubuntu-latest 13 + strategy: 14 + matrix: 15 + sandbox: 16 + [ 17 + amp, 18 + claude, 19 + codex, 20 + copilot, 21 + crush, 22 + cursor, 23 + gemini, 24 + mise, 25 + kilo, 26 + kiro, 27 + nix, 28 + nullclaw, 29 + pkgx, 30 + openclaw, 31 + opencode, 32 + opencrust, 33 + picoclaw, 34 + zeroclaw, 35 + ] 36 + permissions: 37 + contents: read 38 + packages: write 39 + 40 + steps: 41 + - name: Checkout repository 42 + uses: actions/checkout@v4 43 + 44 + - name: Set up Docker Buildx 45 + uses: docker/setup-buildx-action@v3 46 + 47 + - name: Log in to GitHub Container Registry 48 + uses: docker/login-action@v3 49 + with: 50 + registry: ghcr.io 51 + username: ${{ github.actor }} 52 + password: ${{ secrets.GITHUB_TOKEN }} 53 + 54 + - name: Extract Docker metadata 55 + id: meta 56 + uses: docker/metadata-action@v5 57 + with: 58 + images: ghcr.io/pocketenv-io/modal-${{ matrix.sandbox }} 59 + tags: | 60 + type=raw,value=0.1.0 61 + 62 + - name: Build and push Docker image 63 + uses: docker/build-push-action@v6 64 + with: 65 + context: modal/${{ matrix.sandbox }} 66 + file: modal/${{ matrix.sandbox }}/Dockerfile 67 + push: true 68 + tags: ${{ steps.meta.outputs.tags }} 69 + labels: ${{ steps.meta.outputs.labels }} 70 + cache-from: type=gha,scope=${{ matrix.sandbox }} 71 + cache-to: type=gha,mode=max,scope=${{ matrix.sandbox }}
+1 -1
apps/sandbox/src/providers/modal/mod.ts
··· 159 159 }, 160 160 ); 161 161 const image = modal.images.fromRegistry( 162 - options.image || "node:lts-trixie-slim", 162 + options.image || "ghcr.io/pocketenv-io/daytona-openclaw:0.1.0", 163 163 ); 164 164 const sandbox = await modal.sandboxes.create(app, image); 165 165
+69
modal/amp/Dockerfile
··· 1 + FROM node:lts-trixie-slim 2 + 3 + RUN apt-get update && apt-get install -y --no-install-recommends \ 4 + openssh-client \ 5 + git \ 6 + curl \ 7 + ca-certificates \ 8 + gnupg \ 9 + unzip \ 10 + python3 \ 11 + build-essential \ 12 + tmux \ 13 + gawk \ 14 + sed \ 15 + procps \ 16 + wget \ 17 + locales-all \ 18 + s3fs \ 19 + fontconfig \ 20 + sudo \ 21 + squashfs-tools \ 22 + squashfuse \ 23 + fuse \ 24 + fuse-overlayfs \ 25 + && useradd -m -s /bin/bash modal \ 26 + && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 + 28 + USER root 29 + RUN ARCH=$(uname -m) && \ 30 + if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 31 + if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \ 32 + VERSION=$(curl -s https://api.github.com/repos/tigrisdata/tigrisfs/releases/latest | grep -o '"tag_name": "[^"]*' | cut -d'"' -f4) && \ 33 + curl -L "https://github.com/tigrisdata/tigrisfs/releases/download/${VERSION}/tigrisfs_${VERSION#v}_linux_${ARCH}.tar.gz" -o /tmp/tigrisfs.tar.gz && \ 34 + tar -xzf /tmp/tigrisfs.tar.gz -C /usr/local/bin/ && \ 35 + rm /tmp/tigrisfs.tar.gz && \ 36 + chmod +x /usr/local/bin/tigrisfs 37 + USER modal 38 + 39 + RUN mkdir -p /home/modal/.npm-global && npm config set prefix "/home/modal/.npm-global" 40 + 41 + RUN curl -fsSL https://tailscale.com/install.sh | sh 42 + 43 + ENV PATH="/home/modal/.local/bin:/home/modal/.npm-global/bin:${PATH}" 44 + 45 + RUN npm install -g \ 46 + @sourcegraph/amp \ 47 + pm2 48 + 49 + USER root 50 + RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 51 + 52 + USER modal 53 + 54 + RUN curl -fsSL https://code-server.dev/install.sh | sh && \ 55 + code-server --install-extension bastndev.lynx-theme --force && \ 56 + curl -fsSL https://github.com/ryanoasis/nerd-fonts/releases/download/v3.4.0/CascadiaMono.zip -o /tmp/CascadiaMono.zip && \ 57 + unzip -o /tmp/CascadiaMono.zip -d /home/modal/.local/share/fonts/CascadiaMono && \ 58 + fc-cache -fv && \ 59 + touch /home/modal/.vscode-setup-done 60 + 61 + RUN curl -fsSL https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.9/zoxide-0.9.9-x86_64-unknown-linux-musl.tar.gz -o /tmp/zoxide.tar.gz && \ 62 + mkdir -p ~/.local/bin && \ 63 + tar -xzf /tmp/zoxide.tar.gz -C ~/.local/bin zoxide && \ 64 + chmod +x ~/.local/bin/zoxide && \ 65 + rm /tmp/zoxide.tar.gz && \ 66 + echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && \ 67 + echo 'eval "$(zoxide init bash)"' >> ~/.bashrc 68 + 69 + RUN curl -fsSL https://zerobrew.rs/install | bash
+68
modal/claude/Dockerfile
··· 1 + FROM node:lts-trixie-slim 2 + 3 + RUN apt-get update && apt-get install -y --no-install-recommends \ 4 + openssh-client \ 5 + git \ 6 + curl \ 7 + ca-certificates \ 8 + gnupg \ 9 + unzip \ 10 + python3 \ 11 + build-essential \ 12 + tmux \ 13 + gawk \ 14 + sed \ 15 + procps \ 16 + wget \ 17 + locales-all \ 18 + s3fs \ 19 + fontconfig \ 20 + sudo \ 21 + squashfs-tools \ 22 + squashfuse \ 23 + fuse \ 24 + fuse-overlayfs \ 25 + && useradd -m -s /bin/bash modal \ 26 + && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 + 28 + USER root 29 + RUN ARCH=$(uname -m) && \ 30 + if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 31 + if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \ 32 + VERSION=$(curl -s https://api.github.com/repos/tigrisdata/tigrisfs/releases/latest | grep -o '"tag_name": "[^"]*' | cut -d'"' -f4) && \ 33 + curl -L "https://github.com/tigrisdata/tigrisfs/releases/download/${VERSION}/tigrisfs_${VERSION#v}_linux_${ARCH}.tar.gz" -o /tmp/tigrisfs.tar.gz && \ 34 + tar -xzf /tmp/tigrisfs.tar.gz -C /usr/local/bin/ && \ 35 + rm /tmp/tigrisfs.tar.gz && \ 36 + chmod +x /usr/local/bin/tigrisfs 37 + USER modal 38 + 39 + RUN mkdir -p /home/modal/.npm-global && npm config set prefix "/home/modal/.npm-global" 40 + 41 + RUN curl -fsSL https://tailscale.com/install.sh | sh 42 + 43 + ENV PATH="/home/modal/.local/bin:/home/modal/.npm-global/bin:${PATH}" 44 + 45 + RUN npm install -g \ 46 + @anthropic-ai/claude-code \ 47 + pm2 48 + 49 + USER root 50 + RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 51 + USER modal 52 + 53 + RUN curl -fsSL https://code-server.dev/install.sh | sh && \ 54 + code-server --install-extension bastndev.lynx-theme --force && \ 55 + curl -fsSL https://github.com/ryanoasis/nerd-fonts/releases/download/v3.4.0/CascadiaMono.zip -o /tmp/CascadiaMono.zip && \ 56 + unzip -o /tmp/CascadiaMono.zip -d /home/modal/.local/share/fonts/CascadiaMono && \ 57 + fc-cache -fv && \ 58 + touch /home/modal/.vscode-setup-done 59 + 60 + RUN curl -fsSL https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.9/zoxide-0.9.9-x86_64-unknown-linux-musl.tar.gz -o /tmp/zoxide.tar.gz && \ 61 + mkdir -p ~/.local/bin && \ 62 + tar -xzf /tmp/zoxide.tar.gz -C ~/.local/bin zoxide && \ 63 + chmod +x ~/.local/bin/zoxide && \ 64 + rm /tmp/zoxide.tar.gz && \ 65 + echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && \ 66 + echo 'eval "$(zoxide init bash)"' >> ~/.bashrc 67 + 68 + RUN curl -fsSL https://zerobrew.rs/install | bash
+68
modal/codex/Dockerfile
··· 1 + FROM node:lts-trixie-slim 2 + 3 + RUN apt-get update && apt-get install -y --no-install-recommends \ 4 + openssh-client \ 5 + git \ 6 + curl \ 7 + ca-certificates \ 8 + gnupg \ 9 + unzip \ 10 + python3 \ 11 + build-essential \ 12 + tmux \ 13 + gawk \ 14 + sed \ 15 + procps \ 16 + wget \ 17 + locales-all \ 18 + s3fs \ 19 + fontconfig \ 20 + sudo \ 21 + squashfs-tools \ 22 + squashfuse \ 23 + fuse \ 24 + fuse-overlayfs \ 25 + && useradd -m -s /bin/bash modal \ 26 + && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 + 28 + USER root 29 + RUN ARCH=$(uname -m) && \ 30 + if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 31 + if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \ 32 + VERSION=$(curl -s https://api.github.com/repos/tigrisdata/tigrisfs/releases/latest | grep -o '"tag_name": "[^"]*' | cut -d'"' -f4) && \ 33 + curl -L "https://github.com/tigrisdata/tigrisfs/releases/download/${VERSION}/tigrisfs_${VERSION#v}_linux_${ARCH}.tar.gz" -o /tmp/tigrisfs.tar.gz && \ 34 + tar -xzf /tmp/tigrisfs.tar.gz -C /usr/local/bin/ && \ 35 + rm /tmp/tigrisfs.tar.gz && \ 36 + chmod +x /usr/local/bin/tigrisfs 37 + USER modal 38 + 39 + RUN mkdir -p /home/modal/.npm-global && npm config set prefix "/home/modal/.npm-global" 40 + 41 + RUN curl -fsSL https://tailscale.com/install.sh | sh 42 + 43 + ENV PATH="/home/modal/.local/bin:/home/modal/.npm-global/bin:${PATH}" 44 + 45 + RUN npm install -g \ 46 + @openai/codex \ 47 + pm2 48 + 49 + USER root 50 + RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 51 + USER modal 52 + 53 + RUN curl -fsSL https://code-server.dev/install.sh | sh && \ 54 + code-server --install-extension bastndev.lynx-theme --force && \ 55 + curl -fsSL https://github.com/ryanoasis/nerd-fonts/releases/download/v3.4.0/CascadiaMono.zip -o /tmp/CascadiaMono.zip && \ 56 + unzip -o /tmp/CascadiaMono.zip -d /home/modal/.local/share/fonts/CascadiaMono && \ 57 + fc-cache -fv && \ 58 + touch /home/modal/.vscode-setup-done 59 + 60 + RUN curl -fsSL https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.9/zoxide-0.9.9-x86_64-unknown-linux-musl.tar.gz -o /tmp/zoxide.tar.gz && \ 61 + mkdir -p ~/.local/bin && \ 62 + tar -xzf /tmp/zoxide.tar.gz -C ~/.local/bin zoxide && \ 63 + chmod +x ~/.local/bin/zoxide && \ 64 + rm /tmp/zoxide.tar.gz && \ 65 + echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && \ 66 + echo 'eval "$(zoxide init bash)"' >> ~/.bashrc 67 + 68 + RUN curl -fsSL https://zerobrew.rs/install | bash
+69
modal/copilot/Dockerfile
··· 1 + FROM node:lts-trixie-slim 2 + 3 + RUN apt-get update && apt-get install -y --no-install-recommends \ 4 + openssh-client \ 5 + git \ 6 + curl \ 7 + ca-certificates \ 8 + gnupg \ 9 + unzip \ 10 + python3 \ 11 + build-essential \ 12 + tmux \ 13 + gawk \ 14 + sed \ 15 + procps \ 16 + wget \ 17 + locales-all \ 18 + s3fs \ 19 + fontconfig \ 20 + sudo \ 21 + squashfs-tools \ 22 + squashfuse \ 23 + fuse \ 24 + fuse-overlayfs \ 25 + && useradd -m -s /bin/bash modal \ 26 + && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 + 28 + USER root 29 + RUN ARCH=$(uname -m) && \ 30 + if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 31 + if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \ 32 + VERSION=$(curl -s https://api.github.com/repos/tigrisdata/tigrisfs/releases/latest | grep -o '"tag_name": "[^"]*' | cut -d'"' -f4) && \ 33 + curl -L "https://github.com/tigrisdata/tigrisfs/releases/download/${VERSION}/tigrisfs_${VERSION#v}_linux_${ARCH}.tar.gz" -o /tmp/tigrisfs.tar.gz && \ 34 + tar -xzf /tmp/tigrisfs.tar.gz -C /usr/local/bin/ && \ 35 + rm /tmp/tigrisfs.tar.gz && \ 36 + chmod +x /usr/local/bin/tigrisfs 37 + USER modal 38 + 39 + RUN curl -fsSL https://tailscale.com/install.sh | sh 40 + 41 + RUN mkdir -p /home/modal/.npm-global && npm config set prefix "/home/modal/.npm-global" 42 + 43 + ENV PATH="/home/modal/.local/bin:/home/modal/.npm-global/bin:${PATH}" 44 + 45 + RUN npm install -g \ 46 + @github/copilot \ 47 + pm2 48 + 49 + USER root 50 + RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 51 + USER modal 52 + 53 + 54 + RUN curl -fsSL https://code-server.dev/install.sh | sh && \ 55 + code-server --install-extension bastndev.lynx-theme --force && \ 56 + curl -fsSL https://github.com/ryanoasis/nerd-fonts/releases/download/v3.4.0/CascadiaMono.zip -o /tmp/CascadiaMono.zip && \ 57 + unzip -o /tmp/CascadiaMono.zip -d /home/modal/.local/share/fonts/CascadiaMono && \ 58 + fc-cache -fv && \ 59 + touch /home/modal/.vscode-setup-done 60 + 61 + RUN curl -fsSL https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.9/zoxide-0.9.9-x86_64-unknown-linux-musl.tar.gz -o /tmp/zoxide.tar.gz && \ 62 + mkdir -p ~/.local/bin && \ 63 + tar -xzf /tmp/zoxide.tar.gz -C ~/.local/bin zoxide && \ 64 + chmod +x ~/.local/bin/zoxide && \ 65 + rm /tmp/zoxide.tar.gz && \ 66 + echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && \ 67 + echo 'eval "$(zoxide init bash)"' >> ~/.bashrc 68 + 69 + RUN curl -fsSL https://zerobrew.rs/install | bash
+68
modal/crush/Dockerfile
··· 1 + FROM node:lts-trixie-slim 2 + 3 + RUN apt-get update && apt-get install -y --no-install-recommends \ 4 + openssh-client \ 5 + git \ 6 + curl \ 7 + ca-certificates \ 8 + gnupg \ 9 + unzip \ 10 + python3 \ 11 + build-essential \ 12 + tmux \ 13 + gawk \ 14 + sed \ 15 + procps \ 16 + wget \ 17 + locales-all \ 18 + s3fs \ 19 + fontconfig \ 20 + sudo \ 21 + squashfs-tools \ 22 + squashfuse \ 23 + fuse \ 24 + fuse-overlayfs \ 25 + && useradd -m -s /bin/bash modal \ 26 + && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 + 28 + USER root 29 + RUN ARCH=$(uname -m) && \ 30 + if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 31 + if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \ 32 + VERSION=$(curl -s https://api.github.com/repos/tigrisdata/tigrisfs/releases/latest | grep -o '"tag_name": "[^"]*' | cut -d'"' -f4) && \ 33 + curl -L "https://github.com/tigrisdata/tigrisfs/releases/download/${VERSION}/tigrisfs_${VERSION#v}_linux_${ARCH}.tar.gz" -o /tmp/tigrisfs.tar.gz && \ 34 + tar -xzf /tmp/tigrisfs.tar.gz -C /usr/local/bin/ && \ 35 + rm /tmp/tigrisfs.tar.gz && \ 36 + chmod +x /usr/local/bin/tigrisfs 37 + USER modal 38 + 39 + RUN curl -fsSL https://tailscale.com/install.sh | sh 40 + 41 + RUN mkdir -p /home/modal/.npm-global && npm config set prefix "/home/modal/.npm-global" 42 + 43 + ENV PATH="/home/modal/.local/bin:/home/modal/.npm-global/bin:${PATH}" 44 + 45 + RUN npm install -g \ 46 + @charmland/crush \ 47 + pm2 48 + 49 + USER root 50 + RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 51 + USER modal 52 + 53 + RUN curl -fsSL https://code-server.dev/install.sh | sh && \ 54 + code-server --install-extension bastndev.lynx-theme --force && \ 55 + curl -fsSL https://github.com/ryanoasis/nerd-fonts/releases/download/v3.4.0/CascadiaMono.zip -o /tmp/CascadiaMono.zip && \ 56 + unzip -o /tmp/CascadiaMono.zip -d /home/modal/.local/share/fonts/CascadiaMono && \ 57 + fc-cache -fv && \ 58 + touch /home/modal/.vscode-setup-done 59 + 60 + RUN curl -fsSL https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.9/zoxide-0.9.9-x86_64-unknown-linux-musl.tar.gz -o /tmp/zoxide.tar.gz && \ 61 + mkdir -p ~/.local/bin && \ 62 + tar -xzf /tmp/zoxide.tar.gz -C ~/.local/bin zoxide && \ 63 + chmod +x ~/.local/bin/zoxide && \ 64 + rm /tmp/zoxide.tar.gz && \ 65 + echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && \ 66 + echo 'eval "$(zoxide init bash)"' >> ~/.bashrc 67 + 68 + RUN curl -fsSL https://zerobrew.rs/install | bash
+68
modal/cursor/Dockerfile
··· 1 + FROM node:lts-trixie-slim 2 + 3 + RUN apt-get update && apt-get install -y --no-install-recommends \ 4 + openssh-client \ 5 + git \ 6 + curl \ 7 + ca-certificates \ 8 + gnupg \ 9 + unzip \ 10 + python3 \ 11 + build-essential \ 12 + tmux \ 13 + gawk \ 14 + sed \ 15 + procps \ 16 + wget \ 17 + locales-all \ 18 + s3fs \ 19 + fontconfig \ 20 + sudo \ 21 + squashfs-tools \ 22 + squashfuse \ 23 + fuse \ 24 + fuse-overlayfs \ 25 + && useradd -m -s /bin/bash modal \ 26 + && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 + 28 + USER root 29 + RUN ARCH=$(uname -m) && \ 30 + if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 31 + if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \ 32 + VERSION=$(curl -s https://api.github.com/repos/tigrisdata/tigrisfs/releases/latest | grep -o '"tag_name": "[^"]*' | cut -d'"' -f4) && \ 33 + curl -L "https://github.com/tigrisdata/tigrisfs/releases/download/${VERSION}/tigrisfs_${VERSION#v}_linux_${ARCH}.tar.gz" -o /tmp/tigrisfs.tar.gz && \ 34 + tar -xzf /tmp/tigrisfs.tar.gz -C /usr/local/bin/ && \ 35 + rm /tmp/tigrisfs.tar.gz && \ 36 + chmod +x /usr/local/bin/tigrisfs 37 + USER modal 38 + 39 + RUN mkdir -p /home/modal/.npm-global && npm config set prefix "/home/modal/.npm-global" 40 + 41 + RUN curl -fsSL https://tailscale.com/install.sh | sh 42 + 43 + ENV PATH="/home/modal/.local/bin:/home/modal/.npm-global/bin:${PATH}" 44 + 45 + RUN npm install -g pm2 46 + 47 + USER root 48 + RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 49 + USER modal 50 + 51 + RUN curl -fsSL https://code-server.dev/install.sh | sh && \ 52 + code-server --install-extension bastndev.lynx-theme --force && \ 53 + curl -fsSL https://github.com/ryanoasis/nerd-fonts/releases/download/v3.4.0/CascadiaMono.zip -o /tmp/CascadiaMono.zip && \ 54 + unzip -o /tmp/CascadiaMono.zip -d /home/modal/.local/share/fonts/CascadiaMono && \ 55 + fc-cache -fv && \ 56 + touch /home/modal/.vscode-setup-done 57 + 58 + RUN curl -fsSL https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.9/zoxide-0.9.9-x86_64-unknown-linux-musl.tar.gz -o /tmp/zoxide.tar.gz && \ 59 + mkdir -p ~/.local/bin && \ 60 + tar -xzf /tmp/zoxide.tar.gz -C ~/.local/bin zoxide && \ 61 + chmod +x ~/.local/bin/zoxide && \ 62 + rm /tmp/zoxide.tar.gz && \ 63 + echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && \ 64 + echo 'eval "$(zoxide init bash)"' >> ~/.bashrc 65 + 66 + RUN curl -fsSL https://zerobrew.rs/install | bash 67 + 68 + RUN curl https://cursor.com/install -fsS | bash
+68
modal/gemini/Dockerfile
··· 1 + FROM node:lts-trixie-slim 2 + 3 + RUN apt-get update && apt-get install -y --no-install-recommends \ 4 + openssh-client \ 5 + git \ 6 + curl \ 7 + ca-certificates \ 8 + gnupg \ 9 + unzip \ 10 + python3 \ 11 + build-essential \ 12 + tmux \ 13 + gawk \ 14 + sed \ 15 + procps \ 16 + wget \ 17 + locales-all \ 18 + s3fs \ 19 + fontconfig \ 20 + sudo \ 21 + squashfs-tools \ 22 + squashfuse \ 23 + fuse \ 24 + fuse-overlayfs \ 25 + && useradd -m -s /bin/bash modal \ 26 + && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 + 28 + USER root 29 + RUN ARCH=$(uname -m) && \ 30 + if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 31 + if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \ 32 + VERSION=$(curl -s https://api.github.com/repos/tigrisdata/tigrisfs/releases/latest | grep -o '"tag_name": "[^"]*' | cut -d'"' -f4) && \ 33 + curl -L "https://github.com/tigrisdata/tigrisfs/releases/download/${VERSION}/tigrisfs_${VERSION#v}_linux_${ARCH}.tar.gz" -o /tmp/tigrisfs.tar.gz && \ 34 + tar -xzf /tmp/tigrisfs.tar.gz -C /usr/local/bin/ && \ 35 + rm /tmp/tigrisfs.tar.gz && \ 36 + chmod +x /usr/local/bin/tigrisfs 37 + USER modal 38 + 39 + RUN curl -fsSL https://tailscale.com/install.sh | sh 40 + 41 + RUN mkdir -p /home/modal/.npm-global && npm config set prefix "/home/modal/.npm-global" 42 + 43 + ENV PATH="/home/modal/.local/bin:/home/modal/.npm-global/bin:${PATH}" 44 + 45 + RUN npm install -g \ 46 + @google/gemini-cli \ 47 + pm2 48 + 49 + USER root 50 + RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 51 + USER modal 52 + 53 + RUN curl -fsSL https://code-server.dev/install.sh | sh && \ 54 + code-server --install-extension bastndev.lynx-theme --force && \ 55 + curl -fsSL https://github.com/ryanoasis/nerd-fonts/releases/download/v3.4.0/CascadiaMono.zip -o /tmp/CascadiaMono.zip && \ 56 + unzip -o /tmp/CascadiaMono.zip -d /home/modal/.local/share/fonts/CascadiaMono && \ 57 + fc-cache -fv && \ 58 + touch /home/modal/.vscode-setup-done 59 + 60 + RUN curl -fsSL https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.9/zoxide-0.9.9-x86_64-unknown-linux-musl.tar.gz -o /tmp/zoxide.tar.gz && \ 61 + mkdir -p ~/.local/bin && \ 62 + tar -xzf /tmp/zoxide.tar.gz -C ~/.local/bin zoxide && \ 63 + chmod +x ~/.local/bin/zoxide && \ 64 + rm /tmp/zoxide.tar.gz && \ 65 + echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && \ 66 + echo 'eval "$(zoxide init bash)"' >> ~/.bashrc 67 + 68 + RUN curl -fsSL https://zerobrew.rs/install | bash
+68
modal/kilo/Dockerfile
··· 1 + FROM node:lts-trixie-slim 2 + 3 + RUN apt-get update && apt-get install -y --no-install-recommends \ 4 + openssh-client \ 5 + git \ 6 + curl \ 7 + ca-certificates \ 8 + gnupg \ 9 + unzip \ 10 + python3 \ 11 + build-essential \ 12 + tmux \ 13 + gawk \ 14 + sed \ 15 + procps \ 16 + wget \ 17 + locales-all \ 18 + s3fs \ 19 + fontconfig \ 20 + sudo \ 21 + squashfs-tools \ 22 + squashfuse \ 23 + fuse \ 24 + fuse-overlayfs \ 25 + && useradd -m -s /bin/bash modal \ 26 + && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 + 28 + USER root 29 + RUN ARCH=$(uname -m) && \ 30 + if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 31 + if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \ 32 + VERSION=$(curl -s https://api.github.com/repos/tigrisdata/tigrisfs/releases/latest | grep -o '"tag_name": "[^"]*' | cut -d'"' -f4) && \ 33 + curl -L "https://github.com/tigrisdata/tigrisfs/releases/download/${VERSION}/tigrisfs_${VERSION#v}_linux_${ARCH}.tar.gz" -o /tmp/tigrisfs.tar.gz && \ 34 + tar -xzf /tmp/tigrisfs.tar.gz -C /usr/local/bin/ && \ 35 + rm /tmp/tigrisfs.tar.gz && \ 36 + chmod +x /usr/local/bin/tigrisfs 37 + USER modal 38 + 39 + RUN curl -fsSL https://tailscale.com/install.sh | sh 40 + 41 + RUN mkdir -p /home/modal/.npm-global && npm config set prefix "/home/modal/.npm-global" 42 + 43 + ENV PATH="/home/modal/.local/bin:/home/modal/.npm-global/bin:${PATH}" 44 + 45 + RUN npm install -g \ 46 + @kilocode/cli \ 47 + pm2 48 + 49 + USER root 50 + RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 51 + USER modal 52 + 53 + RUN curl -fsSL https://code-server.dev/install.sh | sh && \ 54 + code-server --install-extension bastndev.lynx-theme --force && \ 55 + curl -fsSL https://github.com/ryanoasis/nerd-fonts/releases/download/v3.4.0/CascadiaMono.zip -o /tmp/CascadiaMono.zip && \ 56 + unzip -o /tmp/CascadiaMono.zip -d /home/modal/.local/share/fonts/CascadiaMono && \ 57 + fc-cache -fv && \ 58 + touch /home/modal/.vscode-setup-done 59 + 60 + RUN curl -fsSL https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.9/zoxide-0.9.9-x86_64-unknown-linux-musl.tar.gz -o /tmp/zoxide.tar.gz && \ 61 + mkdir -p ~/.local/bin && \ 62 + tar -xzf /tmp/zoxide.tar.gz -C ~/.local/bin zoxide && \ 63 + chmod +x ~/.local/bin/zoxide && \ 64 + rm /tmp/zoxide.tar.gz && \ 65 + echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && \ 66 + echo 'eval "$(zoxide init bash)"' >> ~/.bashrc 67 + 68 + RUN curl -fsSL https://zerobrew.rs/install | bash
+67
modal/kiro/Dockerfile
··· 1 + FROM node:lts-trixie-slim 2 + 3 + RUN apt-get update && apt-get install -y --no-install-recommends \ 4 + openssh-client \ 5 + git \ 6 + curl \ 7 + ca-certificates \ 8 + gnupg \ 9 + unzip \ 10 + python3 \ 11 + build-essential \ 12 + tmux \ 13 + gawk \ 14 + sed \ 15 + procps \ 16 + wget \ 17 + locales-all \ 18 + s3fs \ 19 + fontconfig \ 20 + sudo \ 21 + squashfs-tools \ 22 + squashfuse \ 23 + fuse \ 24 + fuse-overlayfs \ 25 + && useradd -m -s /bin/bash modal \ 26 + && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 + 28 + USER root 29 + RUN ARCH=$(uname -m) && \ 30 + if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 31 + if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \ 32 + VERSION=$(curl -s https://api.github.com/repos/tigrisdata/tigrisfs/releases/latest | grep -o '"tag_name": "[^"]*' | cut -d'"' -f4) && \ 33 + curl -L "https://github.com/tigrisdata/tigrisfs/releases/download/${VERSION}/tigrisfs_${VERSION#v}_linux_${ARCH}.tar.gz" -o /tmp/tigrisfs.tar.gz && \ 34 + tar -xzf /tmp/tigrisfs.tar.gz -C /usr/local/bin/ && \ 35 + rm /tmp/tigrisfs.tar.gz && \ 36 + chmod +x /usr/local/bin/tigrisfs 37 + USER modal 38 + 39 + RUN curl -fsSL https://tailscale.com/install.sh | sh 40 + 41 + RUN mkdir -p /home/modal/.local/bin && \ 42 + curl -fsSL https://cli.kiro.dev/install | bash 43 + 44 + ENV PATH="/home/modal/.local/bin:/home/modal/.npm-global/bin:${PATH}" 45 + 46 + RUN npm install -g pm2 47 + 48 + USER root 49 + RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 50 + USER modal 51 + 52 + RUN curl -fsSL https://code-server.dev/install.sh | sh && \ 53 + code-server --install-extension bastndev.lynx-theme --force && \ 54 + curl -fsSL https://github.com/ryanoasis/nerd-fonts/releases/download/v3.4.0/CascadiaMono.zip -o /tmp/CascadiaMono.zip && \ 55 + unzip -o /tmp/CascadiaMono.zip -d /home/modal/.local/share/fonts/CascadiaMono && \ 56 + fc-cache -fv && \ 57 + touch /home/modal/.vscode-setup-done 58 + 59 + RUN curl -fsSL https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.9/zoxide-0.9.9-x86_64-unknown-linux-musl.tar.gz -o /tmp/zoxide.tar.gz && \ 60 + mkdir -p ~/.local/bin && \ 61 + tar -xzf /tmp/zoxide.tar.gz -C ~/.local/bin zoxide && \ 62 + chmod +x ~/.local/bin/zoxide && \ 63 + rm /tmp/zoxide.tar.gz && \ 64 + echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && \ 65 + echo 'eval "$(zoxide init bash)"' >> ~/.bashrc 66 + 67 + RUN curl -fsSL https://zerobrew.rs/install | bash
+66
modal/mise/Dockerfile
··· 1 + FROM node:lts-trixie-slim 2 + 3 + RUN apt-get update && apt-get install -y --no-install-recommends \ 4 + openssh-client \ 5 + git \ 6 + curl \ 7 + ca-certificates \ 8 + gnupg \ 9 + unzip \ 10 + python3 \ 11 + build-essential \ 12 + tmux \ 13 + gawk \ 14 + sed \ 15 + procps \ 16 + wget \ 17 + locales-all \ 18 + s3fs \ 19 + fontconfig \ 20 + sudo \ 21 + squashfs-tools \ 22 + squashfuse \ 23 + fuse \ 24 + fuse-overlayfs \ 25 + && useradd -m -s /bin/bash modal \ 26 + && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 + 28 + USER root 29 + RUN ARCH=$(uname -m) && \ 30 + if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 31 + if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \ 32 + VERSION=$(curl -s https://api.github.com/repos/tigrisdata/tigrisfs/releases/latest | grep -o '"tag_name": "[^"]*' | cut -d'"' -f4) && \ 33 + curl -L "https://github.com/tigrisdata/tigrisfs/releases/download/${VERSION}/tigrisfs_${VERSION#v}_linux_${ARCH}.tar.gz" -o /tmp/tigrisfs.tar.gz && \ 34 + tar -xzf /tmp/tigrisfs.tar.gz -C /usr/local/bin/ && \ 35 + rm /tmp/tigrisfs.tar.gz && \ 36 + chmod +x /usr/local/bin/tigrisfs 37 + USER modal 38 + 39 + RUN curl -fsSL https://tailscale.com/install.sh | sh 40 + 41 + RUN curl https://mise.run | sh 42 + 43 + ENV PATH="/home/modal/.local/bin:/home/modal/.npm-global/bin:${PATH}" 44 + 45 + RUN npm install -g pm2 46 + 47 + USER root 48 + RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 49 + USER modal 50 + 51 + RUN curl -fsSL https://code-server.dev/install.sh | sh && \ 52 + code-server --install-extension bastndev.lynx-theme --force && \ 53 + curl -fsSL https://github.com/ryanoasis/nerd-fonts/releases/download/v3.4.0/CascadiaMono.zip -o /tmp/CascadiaMono.zip && \ 54 + unzip -o /tmp/CascadiaMono.zip -d /home/modal/.local/share/fonts/CascadiaMono && \ 55 + fc-cache -fv && \ 56 + touch /home/modal/.vscode-setup-done 57 + 58 + RUN curl -fsSL https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.9/zoxide-0.9.9-x86_64-unknown-linux-musl.tar.gz -o /tmp/zoxide.tar.gz && \ 59 + mkdir -p ~/.local/bin && \ 60 + tar -xzf /tmp/zoxide.tar.gz -C ~/.local/bin zoxide && \ 61 + chmod +x ~/.local/bin/zoxide && \ 62 + rm /tmp/zoxide.tar.gz && \ 63 + echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && \ 64 + echo 'eval "$(zoxide init bash)"' >> ~/.bashrc 65 + 66 + RUN curl -fsSL https://zerobrew.rs/install | bash
+69
modal/nix/Dockerfile
··· 1 + FROM node:lts-trixie-slim 2 + 3 + RUN apt-get update && apt-get install -y --no-install-recommends \ 4 + openssh-client \ 5 + git \ 6 + curl \ 7 + ca-certificates \ 8 + gnupg \ 9 + unzip \ 10 + python3 \ 11 + build-essential \ 12 + tmux \ 13 + gawk \ 14 + sed \ 15 + procps \ 16 + wget \ 17 + locales-all \ 18 + s3fs \ 19 + fontconfig \ 20 + sudo \ 21 + squashfs-tools \ 22 + squashfuse \ 23 + fuse \ 24 + fuse-overlayfs \ 25 + && useradd -m -s /bin/bash modal \ 26 + && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 + 28 + USER root 29 + RUN ARCH=$(uname -m) && \ 30 + if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 31 + if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \ 32 + VERSION=$(curl -s https://api.github.com/repos/tigrisdata/tigrisfs/releases/latest | grep -o '"tag_name": "[^"]*' | cut -d'"' -f4) && \ 33 + curl -L "https://github.com/tigrisdata/tigrisfs/releases/download/${VERSION}/tigrisfs_${VERSION#v}_linux_${ARCH}.tar.gz" -o /tmp/tigrisfs.tar.gz && \ 34 + tar -xzf /tmp/tigrisfs.tar.gz -C /usr/local/bin/ && \ 35 + rm /tmp/tigrisfs.tar.gz && \ 36 + chmod +x /usr/local/bin/tigrisfs 37 + USER modal 38 + 39 + RUN curl -fsSL https://tailscale.com/install.sh | sh 40 + 41 + RUN curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install linux \ 42 + --extra-conf "sandbox = false" \ 43 + --init none \ 44 + --no-confirm 45 + 46 + ENV PATH="/home/modal/.local/bin:/home/modal/.npm-global/bin:${PATH}" 47 + 48 + RUN npm install -g pm2 49 + 50 + USER root 51 + RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 52 + USER modal 53 + 54 + RUN curl -fsSL https://code-server.dev/install.sh | sh && \ 55 + code-server --install-extension bastndev.lynx-theme --force && \ 56 + curl -fsSL https://github.com/ryanoasis/nerd-fonts/releases/download/v3.4.0/CascadiaMono.zip -o /tmp/CascadiaMono.zip && \ 57 + unzip -o /tmp/CascadiaMono.zip -d /home/modal/.local/share/fonts/CascadiaMono && \ 58 + fc-cache -fv && \ 59 + touch /home/modal/.vscode-setup-done 60 + 61 + RUN curl -fsSL https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.9/zoxide-0.9.9-x86_64-unknown-linux-musl.tar.gz -o /tmp/zoxide.tar.gz && \ 62 + mkdir -p ~/.local/bin && \ 63 + tar -xzf /tmp/zoxide.tar.gz -C ~/.local/bin zoxide && \ 64 + chmod +x ~/.local/bin/zoxide && \ 65 + rm /tmp/zoxide.tar.gz && \ 66 + echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && \ 67 + echo 'eval "$(zoxide init bash)"' >> ~/.bashrc 68 + 69 + RUN curl -fsSL https://zerobrew.rs/install | bash
+78
modal/nullclaw/Dockerfile
··· 1 + FROM node:lts-trixie-slim 2 + 3 + RUN apt-get update && apt-get install -y --no-install-recommends \ 4 + openssh-client \ 5 + git \ 6 + curl \ 7 + ca-certificates \ 8 + gnupg \ 9 + unzip \ 10 + python3 \ 11 + build-essential \ 12 + tmux \ 13 + gawk \ 14 + sed \ 15 + procps \ 16 + wget \ 17 + locales-all \ 18 + s3fs \ 19 + fontconfig \ 20 + sudo \ 21 + squashfs-tools \ 22 + squashfuse \ 23 + fuse \ 24 + fuse-overlayfs \ 25 + && useradd -m -s /bin/bash modal \ 26 + && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 + 28 + USER root 29 + RUN ARCH=$(uname -m) && \ 30 + if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 31 + if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \ 32 + VERSION=$(curl -s https://api.github.com/repos/tigrisdata/tigrisfs/releases/latest | grep -o '"tag_name": "[^"]*' | cut -d'"' -f4) && \ 33 + curl -L "https://github.com/tigrisdata/tigrisfs/releases/download/${VERSION}/tigrisfs_${VERSION#v}_linux_${ARCH}.tar.gz" -o /tmp/tigrisfs.tar.gz && \ 34 + tar -xzf /tmp/tigrisfs.tar.gz -C /usr/local/bin/ && \ 35 + rm /tmp/tigrisfs.tar.gz && \ 36 + chmod +x /usr/local/bin/tigrisfs 37 + USER modal 38 + 39 + ARG TARGETARCH 40 + 41 + RUN sudo apt-get update && sudo apt-get install -y wget 42 + 43 + RUN curl -fsSL https://tailscale.com/install.sh | sh 44 + 45 + RUN case "${TARGETARCH}" in \ 46 + amd64) NULLCLAW_ARCH="x86_64" ;; \ 47 + arm64) NULLCLAW_ARCH="aarch64" ;; \ 48 + *) echo "Unsupported arch: ${TARGETARCH}" && exit 1 ;; \ 49 + esac && \ 50 + sudo wget -qO nullclaw "https://github.com/nullclaw/nullclaw/releases/latest/download/nullclaw-linux-${NULLCLAW_ARCH}.bin" && \ 51 + sudo mkdir -p /home/modal/.local/bin && \ 52 + sudo mv nullclaw /home/modal/.local/bin && \ 53 + sudo chmod +x /home/modal/.local/bin/nullclaw 54 + 55 + ENV PATH="/home/modal/.local/bin:/home/modal/.npm-global/bin:${PATH}" 56 + 57 + RUN npm install -g pm2 58 + 59 + USER root 60 + RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 61 + USER modal 62 + 63 + RUN curl -fsSL https://code-server.dev/install.sh | sh && \ 64 + code-server --install-extension bastndev.lynx-theme --force && \ 65 + curl -fsSL https://github.com/ryanoasis/nerd-fonts/releases/download/v3.4.0/CascadiaMono.zip -o /tmp/CascadiaMono.zip && \ 66 + unzip -o /tmp/CascadiaMono.zip -d /home/modal/.local/share/fonts/CascadiaMono && \ 67 + fc-cache -fv && \ 68 + touch /home/modal/.vscode-setup-done 69 + 70 + RUN curl -fsSL https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.9/zoxide-0.9.9-x86_64-unknown-linux-musl.tar.gz -o /tmp/zoxide.tar.gz && \ 71 + mkdir -p ~/.local/bin && \ 72 + tar -xzf /tmp/zoxide.tar.gz -C ~/.local/bin zoxide && \ 73 + chmod +x ~/.local/bin/zoxide && \ 74 + rm /tmp/zoxide.tar.gz && \ 75 + echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && \ 76 + echo 'eval "$(zoxide init bash)"' >> ~/.bashrc 77 + 78 + RUN curl -fsSL https://zerobrew.rs/install | bash
+76
modal/openclaw/Dockerfile
··· 1 + FROM node:lts-trixie-slim 2 + 3 + RUN apt-get update && apt-get install -y --no-install-recommends \ 4 + openssh-client \ 5 + git \ 6 + curl \ 7 + ca-certificates \ 8 + gnupg \ 9 + unzip \ 10 + python3 \ 11 + build-essential \ 12 + tmux \ 13 + gawk \ 14 + sed \ 15 + procps \ 16 + wget \ 17 + locales-all \ 18 + s3fs \ 19 + fontconfig \ 20 + sudo \ 21 + squashfs-tools \ 22 + squashfuse \ 23 + fuse \ 24 + fuse-overlayfs \ 25 + && useradd -m -s /bin/bash modal \ 26 + && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 + 28 + USER root 29 + RUN ARCH=$(uname -m) && \ 30 + if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 31 + if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \ 32 + VERSION=$(curl -s https://api.github.com/repos/tigrisdata/tigrisfs/releases/latest | grep -o '"tag_name": "[^"]*' | cut -d'"' -f4) && \ 33 + curl -L "https://github.com/tigrisdata/tigrisfs/releases/download/${VERSION}/tigrisfs_${VERSION#v}_linux_${ARCH}.tar.gz" -o /tmp/tigrisfs.tar.gz && \ 34 + tar -xzf /tmp/tigrisfs.tar.gz -C /usr/local/bin/ && \ 35 + rm /tmp/tigrisfs.tar.gz && \ 36 + chmod +x /usr/local/bin/tigrisfs 37 + USER modal 38 + 39 + RUN sudo apt-get update && sudo apt-get install -y --no-install-recommends \ 40 + openssh-client \ 41 + git \ 42 + curl \ 43 + ca-certificates \ 44 + gnupg \ 45 + unzip \ 46 + python3 \ 47 + build-essential 48 + 49 + RUN curl -fsSL https://tailscale.com/install.sh | sh 50 + 51 + RUN curl -fsSL https://openclaw.ai/install.sh | bash || true 52 + 53 + ENV PATH="/home/modal/.local/bin:/home/modal/.npm-global/bin:${PATH}" 54 + 55 + RUN npm install -g @chrysb/alphaclaw pm2 56 + 57 + USER root 58 + RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 59 + USER modal 60 + 61 + RUN curl -fsSL https://code-server.dev/install.sh | sh && \ 62 + code-server --install-extension bastndev.lynx-theme --force && \ 63 + curl -fsSL https://github.com/ryanoasis/nerd-fonts/releases/download/v3.4.0/CascadiaMono.zip -o /tmp/CascadiaMono.zip && \ 64 + unzip -o /tmp/CascadiaMono.zip -d /home/modal/.local/share/fonts/CascadiaMono && \ 65 + fc-cache -fv && \ 66 + touch /home/modal/.vscode-setup-done 67 + 68 + RUN curl -fsSL https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.9/zoxide-0.9.9-x86_64-unknown-linux-musl.tar.gz -o /tmp/zoxide.tar.gz && \ 69 + mkdir -p ~/.local/bin && \ 70 + tar -xzf /tmp/zoxide.tar.gz -C ~/.local/bin zoxide && \ 71 + chmod +x ~/.local/bin/zoxide && \ 72 + rm /tmp/zoxide.tar.gz && \ 73 + echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && \ 74 + echo 'eval "$(zoxide init bash)"' >> ~/.bashrc 75 + 76 + RUN curl -fsSL https://zerobrew.rs/install | bash
+68
modal/opencode/Dockerfile
··· 1 + FROM node:lts-trixie-slim 2 + 3 + RUN apt-get update && apt-get install -y --no-install-recommends \ 4 + openssh-client \ 5 + git \ 6 + curl \ 7 + ca-certificates \ 8 + gnupg \ 9 + unzip \ 10 + python3 \ 11 + build-essential \ 12 + tmux \ 13 + gawk \ 14 + sed \ 15 + procps \ 16 + wget \ 17 + locales-all \ 18 + s3fs \ 19 + fontconfig \ 20 + sudo \ 21 + squashfs-tools \ 22 + squashfuse \ 23 + fuse \ 24 + fuse-overlayfs \ 25 + && useradd -m -s /bin/bash modal \ 26 + && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 + 28 + USER root 29 + RUN ARCH=$(uname -m) && \ 30 + if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 31 + if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \ 32 + VERSION=$(curl -s https://api.github.com/repos/tigrisdata/tigrisfs/releases/latest | grep -o '"tag_name": "[^"]*' | cut -d'"' -f4) && \ 33 + curl -L "https://github.com/tigrisdata/tigrisfs/releases/download/${VERSION}/tigrisfs_${VERSION#v}_linux_${ARCH}.tar.gz" -o /tmp/tigrisfs.tar.gz && \ 34 + tar -xzf /tmp/tigrisfs.tar.gz -C /usr/local/bin/ && \ 35 + rm /tmp/tigrisfs.tar.gz && \ 36 + chmod +x /usr/local/bin/tigrisfs 37 + USER modal 38 + 39 + RUN curl -fsSL https://tailscale.com/install.sh | sh 40 + 41 + RUN mkdir -p /home/modal/.npm-global && npm config set prefix "/home/modal/.npm-global" 42 + 43 + ENV PATH="/home/modal/.local/bin:/home/modal/.npm-global/bin:${PATH}" 44 + 45 + RUN npm install -g \ 46 + opencode-ai \ 47 + pm2 48 + 49 + USER root 50 + RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 51 + USER modal 52 + 53 + RUN curl -fsSL https://code-server.dev/install.sh | sh && \ 54 + code-server --install-extension bastndev.lynx-theme --force && \ 55 + curl -fsSL https://github.com/ryanoasis/nerd-fonts/releases/download/v3.4.0/CascadiaMono.zip -o /tmp/CascadiaMono.zip && \ 56 + unzip -o /tmp/CascadiaMono.zip -d /home/modal/.local/share/fonts/CascadiaMono && \ 57 + fc-cache -fv && \ 58 + touch /home/modal/.vscode-setup-done 59 + 60 + RUN curl -fsSL https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.9/zoxide-0.9.9-x86_64-unknown-linux-musl.tar.gz -o /tmp/zoxide.tar.gz && \ 61 + mkdir -p ~/.local/bin && \ 62 + tar -xzf /tmp/zoxide.tar.gz -C ~/.local/bin zoxide && \ 63 + chmod +x ~/.local/bin/zoxide && \ 64 + rm /tmp/zoxide.tar.gz && \ 65 + echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && \ 66 + echo 'eval "$(zoxide init bash)"' >> ~/.bashrc 67 + 68 + RUN curl -fsSL https://zerobrew.rs/install | bash
+80
modal/opencrust/Dockerfile
··· 1 + FROM node:lts-trixie-slim 2 + 3 + RUN apt-get update && apt-get install -y --no-install-recommends \ 4 + openssh-client \ 5 + git \ 6 + curl \ 7 + ca-certificates \ 8 + gnupg \ 9 + unzip \ 10 + python3 \ 11 + build-essential \ 12 + tmux \ 13 + gawk \ 14 + sed \ 15 + procps \ 16 + wget \ 17 + locales-all \ 18 + s3fs \ 19 + fontconfig \ 20 + sudo \ 21 + squashfs-tools \ 22 + squashfuse \ 23 + fuse \ 24 + fuse-overlayfs \ 25 + && useradd -m -s /bin/bash modal \ 26 + && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 + 28 + ARG TARGETARCH 29 + 30 + USER root 31 + RUN ARCH=$(uname -m) && \ 32 + if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 33 + if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \ 34 + VERSION=$(curl -s https://api.github.com/repos/tigrisdata/tigrisfs/releases/latest | grep -o '"tag_name": "[^"]*' | cut -d'"' -f4) && \ 35 + curl -L "https://github.com/tigrisdata/tigrisfs/releases/download/${VERSION}/tigrisfs_${VERSION#v}_linux_${ARCH}.tar.gz" -o /tmp/tigrisfs.tar.gz && \ 36 + tar -xzf /tmp/tigrisfs.tar.gz -C /usr/local/bin/ && \ 37 + rm /tmp/tigrisfs.tar.gz && \ 38 + chmod +x /usr/local/bin/tigrisfs 39 + USER modal 40 + 41 + RUN sudo apt-get update && sudo apt-get install -y wget 42 + 43 + RUN curl -fsSL https://tailscale.com/install.sh | sh 44 + 45 + ENV OPENCRUST_VERSION=v0.1.21 46 + 47 + RUN case "${TARGETARCH}" in \ 48 + amd64) OPENCRUST_ARCH="x86_64" ;; \ 49 + arm64) OPENCRUST_ARCH="aarch64" ;; \ 50 + *) echo "Unsupported arch: ${TARGETARCH}" && exit 1 ;; \ 51 + esac && \ 52 + sudo wget -qO opencrust "https://github.com/opencrust-org/opencrust/releases/download/${OPENCRUST_VERSION}/opencrust-linux-${OPENCRUST_ARCH}" && \ 53 + sudo mkdir -p /home/modal/.local/bin && \ 54 + sudo mv opencrust /home/modal/.local/bin && \ 55 + sudo chmod +x /home/modal/.local/bin/opencrust 56 + 57 + ENV PATH="/home/modal/.local/bin:/home/modal/.npm-global/bin:${PATH}" 58 + 59 + RUN npm install -g pm2 60 + 61 + USER root 62 + RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 63 + USER modal 64 + 65 + RUN curl -fsSL https://code-server.dev/install.sh | sh && \ 66 + code-server --install-extension bastndev.lynx-theme --force && \ 67 + curl -fsSL https://github.com/ryanoasis/nerd-fonts/releases/download/v3.4.0/CascadiaMono.zip -o /tmp/CascadiaMono.zip && \ 68 + unzip -o /tmp/CascadiaMono.zip -d /home/modal/.local/share/fonts/CascadiaMono && \ 69 + fc-cache -fv && \ 70 + touch /home/modal/.vscode-setup-done 71 + 72 + RUN curl -fsSL https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.9/zoxide-0.9.9-x86_64-unknown-linux-musl.tar.gz -o /tmp/zoxide.tar.gz && \ 73 + mkdir -p ~/.local/bin && \ 74 + tar -xzf /tmp/zoxide.tar.gz -C ~/.local/bin zoxide && \ 75 + chmod +x ~/.local/bin/zoxide && \ 76 + rm /tmp/zoxide.tar.gz && \ 77 + echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && \ 78 + echo 'eval "$(zoxide init bash)"' >> ~/.bashrc 79 + 80 + RUN curl -fsSL https://zerobrew.rs/install | bash
+80
modal/picoclaw/Dockerfile
··· 1 + FROM node:lts-trixie-slim 2 + 3 + RUN apt-get update && apt-get install -y --no-install-recommends \ 4 + openssh-client \ 5 + git \ 6 + curl \ 7 + ca-certificates \ 8 + gnupg \ 9 + unzip \ 10 + python3 \ 11 + build-essential \ 12 + tmux \ 13 + gawk \ 14 + sed \ 15 + procps \ 16 + wget \ 17 + locales-all \ 18 + s3fs \ 19 + fontconfig \ 20 + sudo \ 21 + squashfs-tools \ 22 + squashfuse \ 23 + fuse \ 24 + fuse-overlayfs \ 25 + && useradd -m -s /bin/bash modal \ 26 + && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 + 28 + ARG TARGETARCH 29 + 30 + USER root 31 + RUN ARCH=$(uname -m) && \ 32 + if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 33 + if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \ 34 + VERSION=$(curl -s https://api.github.com/repos/tigrisdata/tigrisfs/releases/latest | grep -o '"tag_name": "[^"]*' | cut -d'"' -f4) && \ 35 + curl -L "https://github.com/tigrisdata/tigrisfs/releases/download/${VERSION}/tigrisfs_${VERSION#v}_linux_${ARCH}.tar.gz" -o /tmp/tigrisfs.tar.gz && \ 36 + tar -xzf /tmp/tigrisfs.tar.gz -C /usr/local/bin/ && \ 37 + rm /tmp/tigrisfs.tar.gz && \ 38 + chmod +x /usr/local/bin/tigrisfs 39 + USER modal 40 + 41 + RUN sudo apt-get update && sudo apt-get install -y wget 42 + 43 + RUN curl -fsSL https://tailscale.com/install.sh | sh 44 + 45 + ENV PICOCLAW_VERSION=v0.2.2 46 + 47 + RUN case "${TARGETARCH}" in \ 48 + amd64) PICOCLAW_ARCH="x86_64" ;; \ 49 + arm64) PICOCLAW_ARCH="arm64" ;; \ 50 + *) echo "Unsupported arch: ${TARGETARCH}" && exit 1 ;; \ 51 + esac && \ 52 + sudo wget -qO /tmp/picoclaw.tar.gz "https://github.com/sipeed/picoclaw/releases/download/${PICOCLAW_VERSION}/picoclaw_Linux_${PICOCLAW_ARCH}.tar.gz" && \ 53 + sudo mkdir -p /home/modal/.local/bin && \ 54 + sudo tar -xzf /tmp/picoclaw.tar.gz -C /home/modal/.local/bin && \ 55 + sudo chmod +x /home/modal/.local/bin/picoclaw 56 + 57 + ENV PATH="/home/modal/.local/bin:/home/modal/.npm-global/bin:${PATH}" 58 + 59 + RUN npm install -g pm2 60 + 61 + USER root 62 + RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 63 + USER modal 64 + 65 + RUN curl -fsSL https://code-server.dev/install.sh | sh && \ 66 + code-server --install-extension bastndev.lynx-theme --force && \ 67 + curl -fsSL https://github.com/ryanoasis/nerd-fonts/releases/download/v3.4.0/CascadiaMono.zip -o /tmp/CascadiaMono.zip && \ 68 + unzip -o /tmp/CascadiaMono.zip -d /home/modal/.local/share/fonts/CascadiaMono && \ 69 + fc-cache -fv && \ 70 + touch /home/modal/.vscode-setup-done 71 + 72 + RUN curl -fsSL https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.9/zoxide-0.9.9-x86_64-unknown-linux-musl.tar.gz -o /tmp/zoxide.tar.gz && \ 73 + mkdir -p ~/.local/bin && \ 74 + tar -xzf /tmp/zoxide.tar.gz -C ~/.local/bin zoxide && \ 75 + chmod +x ~/.local/bin/zoxide && \ 76 + rm /tmp/zoxide.tar.gz && \ 77 + echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && \ 78 + echo 'eval "$(zoxide init bash)"' >> ~/.bashrc 79 + 80 + RUN curl -fsSL https://zerobrew.rs/install | bash
+67
modal/pkgx/Dockerfile
··· 1 + FROM node:lts-trixie-slim 2 + 3 + RUN apt-get update && apt-get install -y --no-install-recommends \ 4 + openssh-client \ 5 + git \ 6 + curl \ 7 + ca-certificates \ 8 + gnupg \ 9 + unzip \ 10 + python3 \ 11 + build-essential \ 12 + tmux \ 13 + gawk \ 14 + sed \ 15 + procps \ 16 + wget \ 17 + locales-all \ 18 + s3fs \ 19 + fontconfig \ 20 + sudo \ 21 + squashfs-tools \ 22 + squashfuse \ 23 + fuse \ 24 + fuse-overlayfs \ 25 + && useradd -m -s /bin/bash modal \ 26 + && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 + 28 + USER root 29 + RUN ARCH=$(uname -m) && \ 30 + if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 31 + if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \ 32 + VERSION=$(curl -s https://api.github.com/repos/tigrisdata/tigrisfs/releases/latest | grep -o '"tag_name": "[^"]*' | cut -d'"' -f4) && \ 33 + curl -L "https://github.com/tigrisdata/tigrisfs/releases/download/${VERSION}/tigrisfs_${VERSION#v}_linux_${ARCH}.tar.gz" -o /tmp/tigrisfs.tar.gz && \ 34 + tar -xzf /tmp/tigrisfs.tar.gz -C /usr/local/bin/ && \ 35 + rm /tmp/tigrisfs.tar.gz && \ 36 + chmod +x /usr/local/bin/tigrisfs 37 + USER modal 38 + 39 + RUN curl -fsSL https://tailscale.com/install.sh | sh 40 + 41 + RUN curl https://pkgx.sh | sh 42 + 43 + ENV PATH="/home/modal/.local/bin:/home/modal/.npm-global/bin:${PATH}" 44 + 45 + RUN npm install -g pm2 46 + 47 + USER root 48 + RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 49 + USER modal 50 + 51 + RUN curl -fsSL https://code-server.dev/install.sh | sh && \ 52 + code-server --install-extension bastndev.lynx-theme --force && \ 53 + curl -fsSL https://github.com/ryanoasis/nerd-fonts/releases/download/v3.4.0/CascadiaMono.zip -o /tmp/CascadiaMono.zip && \ 54 + unzip -o /tmp/CascadiaMono.zip -d /home/modal/.local/share/fonts/CascadiaMono && \ 55 + fc-cache -fv && \ 56 + touch /home/modal/.vscode-setup-done 57 + 58 + 59 + RUN curl -fsSL https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.9/zoxide-0.9.9-x86_64-unknown-linux-musl.tar.gz -o /tmp/zoxide.tar.gz && \ 60 + mkdir -p ~/.local/bin && \ 61 + tar -xzf /tmp/zoxide.tar.gz -C ~/.local/bin zoxide && \ 62 + chmod +x ~/.local/bin/zoxide && \ 63 + rm /tmp/zoxide.tar.gz && \ 64 + echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && \ 65 + echo 'eval "$(zoxide init bash)"' >> ~/.bashrc 66 + 67 + RUN curl -fsSL https://zerobrew.rs/install | bash
+67
modal/wasmer/Dockerfile
··· 1 + FROM node:lts-trixie-slim 2 + 3 + RUN apt-get update && apt-get install -y --no-install-recommends \ 4 + openssh-client \ 5 + git \ 6 + curl \ 7 + ca-certificates \ 8 + gnupg \ 9 + unzip \ 10 + python3 \ 11 + build-essential \ 12 + tmux \ 13 + gawk \ 14 + sed \ 15 + procps \ 16 + wget \ 17 + locales-all \ 18 + s3fs \ 19 + fontconfig \ 20 + sudo \ 21 + squashfs-tools \ 22 + squashfuse \ 23 + fuse \ 24 + fuse-overlayfs \ 25 + && useradd -m -s /bin/bash modal \ 26 + && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 + 28 + USER root 29 + RUN ARCH=$(uname -m) && \ 30 + if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 31 + if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \ 32 + VERSION=$(curl -s https://api.github.com/repos/tigrisdata/tigrisfs/releases/latest | grep -o '"tag_name": "[^"]*' | cut -d'"' -f4) && \ 33 + curl -L "https://github.com/tigrisdata/tigrisfs/releases/download/${VERSION}/tigrisfs_${VERSION#v}_linux_${ARCH}.tar.gz" -o /tmp/tigrisfs.tar.gz && \ 34 + tar -xzf /tmp/tigrisfs.tar.gz -C /usr/local/bin/ && \ 35 + rm /tmp/tigrisfs.tar.gz && \ 36 + chmod +x /usr/local/bin/tigrisfs 37 + USER modal 38 + 39 + RUN curl -fsSL https://tailscale.com/install.sh | sh 40 + 41 + RUN curl https://get.wasmer.io -sSfL | sh 42 + 43 + ENV PATH="/home/modal/.local/bin:/home/modal/.npm-global/bin:${PATH}" 44 + 45 + RUN npm install -g pm2 46 + 47 + USER root 48 + RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 49 + USER modal 50 + 51 + RUN curl -fsSL https://code-server.dev/install.sh | sh && \ 52 + code-server --install-extension bastndev.lynx-theme --force && \ 53 + curl -fsSL https://github.com/ryanoasis/nerd-fonts/releases/download/v3.4.0/CascadiaMono.zip -o /tmp/CascadiaMono.zip && \ 54 + unzip -o /tmp/CascadiaMono.zip -d /home/modal/.local/share/fonts/CascadiaMono && \ 55 + fc-cache -fv && \ 56 + touch /home/modal/.vscode-setup-done 57 + 58 + 59 + RUN curl -fsSL https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.9/zoxide-0.9.9-x86_64-unknown-linux-musl.tar.gz -o /tmp/zoxide.tar.gz && \ 60 + mkdir -p ~/.local/bin && \ 61 + tar -xzf /tmp/zoxide.tar.gz -C ~/.local/bin zoxide && \ 62 + chmod +x ~/.local/bin/zoxide && \ 63 + rm /tmp/zoxide.tar.gz && \ 64 + echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && \ 65 + echo 'eval "$(zoxide init bash)"' >> ~/.bashrc 66 + 67 + RUN curl -fsSL https://zerobrew.rs/install | bash
+80
modal/zeroclaw/Dockerfile
··· 1 + FROM node:lts-trixie-slim 2 + 3 + RUN apt-get update && apt-get install -y --no-install-recommends \ 4 + openssh-client \ 5 + git \ 6 + curl \ 7 + ca-certificates \ 8 + gnupg \ 9 + unzip \ 10 + python3 \ 11 + build-essential \ 12 + tmux \ 13 + gawk \ 14 + sed \ 15 + procps \ 16 + wget \ 17 + locales-all \ 18 + s3fs \ 19 + fontconfig \ 20 + sudo \ 21 + squashfs-tools \ 22 + squashfuse \ 23 + fuse \ 24 + fuse-overlayfs \ 25 + && useradd -m -s /bin/bash modal \ 26 + && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 + 28 + ARG TARGETARCH 29 + 30 + USER root 31 + RUN ARCH=$(uname -m) && \ 32 + if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 33 + if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \ 34 + VERSION=$(curl -s https://api.github.com/repos/tigrisdata/tigrisfs/releases/latest | grep -o '"tag_name": "[^"]*' | cut -d'"' -f4) && \ 35 + curl -L "https://github.com/tigrisdata/tigrisfs/releases/download/${VERSION}/tigrisfs_${VERSION#v}_linux_${ARCH}.tar.gz" -o /tmp/tigrisfs.tar.gz && \ 36 + tar -xzf /tmp/tigrisfs.tar.gz -C /usr/local/bin/ && \ 37 + rm /tmp/tigrisfs.tar.gz && \ 38 + chmod +x /usr/local/bin/tigrisfs 39 + USER modal 40 + 41 + RUN curl -fsSL https://tailscale.com/install.sh | sh 42 + 43 + RUN sudo apt-get update && sudo apt-get install -y wget 44 + 45 + ENV ZEROCLAW_VERSION=v0.1.7 46 + 47 + RUN case "${TARGETARCH}" in \ 48 + amd64) ZEROCLAW_ARCH="x86_64" ;; \ 49 + arm64) ZEROCLAW_ARCH="aarch64" ;; \ 50 + *) echo "Unsupported arch: ${TARGETARCH}" && exit 1 ;; \ 51 + esac && \ 52 + sudo wget -qO /tmp/zeroclaw.tar.gz "https://github.com/zeroclaw-labs/zeroclaw/releases/download/${ZEROCLAW_VERSION}/zeroclaw-${ZEROCLAW_ARCH}-unknown-linux-gnu.tar.gz" && \ 53 + sudo mkdir -p /home/modal/.local/bin && \ 54 + sudo tar -xzf /tmp/zeroclaw.tar.gz -C /home/modal/.local/bin && \ 55 + sudo chmod +x /home/modal/.local/bin/zeroclaw 56 + 57 + ENV PATH="/home/modal/.local/bin:/home/modal/.npm-global/bin:${PATH}" 58 + 59 + RUN npm install -g pm2 60 + 61 + USER root 62 + RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 63 + USER modal 64 + 65 + RUN curl -fsSL https://code-server.dev/install.sh | sh && \ 66 + code-server --install-extension bastndev.lynx-theme --force && \ 67 + curl -fsSL https://github.com/ryanoasis/nerd-fonts/releases/download/v3.4.0/CascadiaMono.zip -o /tmp/CascadiaMono.zip && \ 68 + sudo unzip -o /tmp/CascadiaMono.zip -d /home/modal/.local/share/fonts/CascadiaMono && \ 69 + fc-cache -fv && \ 70 + touch /home/modal/.vscode-setup-done 71 + 72 + RUN curl -fsSL https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.9/zoxide-0.9.9-x86_64-unknown-linux-musl.tar.gz -o /tmp/zoxide.tar.gz && \ 73 + mkdir -p ~/.local/bin && \ 74 + tar -xzf /tmp/zoxide.tar.gz -C ~/.local/bin zoxide && \ 75 + chmod +x ~/.local/bin/zoxide && \ 76 + rm /tmp/zoxide.tar.gz && \ 77 + echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && \ 78 + echo 'eval "$(zoxide init bash)"' >> ~/.bashrc 79 + 80 + RUN curl -fsSL https://zerobrew.rs/install | bash