# Core Development Environment Template
# A full-featured development environment with multiple runtimes
#
# Variables:
#   ${SSH_KEY}           - SSH public key for access (required)
#   ${MEMORY:-2048}      - Memory in MB (default: 2048)
#   ${CPUS:-2}           - Number of CPUs (default: 2)
#   ${HOSTNAME:-core-dev} - Hostname for the VM
#   ${DATA_SIZE:-10G}    - Size of persistent /data volume

kernel:
  image: linuxkit/kernel:6.6.13
  cmdline: "console=tty0 console=ttyS0"

init:
  - linuxkit/init:v1.2.0
  - linuxkit/runc:v1.1.12
  - linuxkit/containerd:v1.7.13
  - linuxkit/ca-certificates:v1.0.0

onboot:
  - name: sysctl
    image: linuxkit/sysctl:v1.0.0
  - name: format
    image: linuxkit/format:v1.0.0
  - name: mount
    image: linuxkit/mount:v1.0.0
    command: ["/usr/bin/mountie", "/dev/sda1", "/data"]
  - name: dhcpcd
    image: linuxkit/dhcpcd:v1.0.0
    command: ["/sbin/dhcpcd", "--nobackground", "-f", "/dhcpcd.conf", "-1"]

onshutdown:
  - name: shutdown
    image: busybox:latest
    command: ["/bin/echo", "Shutting down..."]

services:
  - name: getty
    image: linuxkit/getty:v1.0.0
    env:
      - INSECURE=true

  - name: sshd
    image: linuxkit/sshd:v1.2.0
    binds:
      - /etc/ssh/authorized_keys:/root/.ssh/authorized_keys

  - name: docker
    image: docker:24.0-dind
    capabilities:
      - all
    net: host
    pid: host
    binds:
      - /var/run:/var/run
      - /data/docker:/var/lib/docker
    rootfsPropagation: shared

  - name: dev-tools
    image: alpine:3.19
    capabilities:
      - all
    net: host
    binds:
      - /data:/data
    command:
      - /bin/sh
      - -c
      - |
        # Install development tools
        apk add --no-cache \
          git curl wget vim nano htop tmux \
          build-base gcc musl-dev linux-headers \
          openssh-client jq yq

        # Install Go 1.22.0
        wget -q https://go.dev/dl/go1.22.0.linux-amd64.tar.gz
        tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz
        rm go1.22.0.linux-amd64.tar.gz
        echo 'export PATH=/usr/local/go/bin:$PATH' >> /etc/profile

        # Install Node.js
        apk add --no-cache nodejs npm

        # Install PHP
        apk add --no-cache php82 php82-cli php82-curl php82-json php82-mbstring \
          php82-openssl php82-pdo php82-pdo_mysql php82-pdo_pgsql php82-phar \
          php82-session php82-tokenizer php82-xml php82-zip composer

        # Keep container running
        tail -f /dev/null

files:
  - path: /etc/hostname
    contents: "${HOSTNAME:-core-dev}"
  - path: /etc/ssh/authorized_keys
    contents: "${SSH_KEY}"
    mode: "0600"
  - path: /etc/profile.d/dev.sh
    contents: |
      export PATH=$PATH:/usr/local/go/bin
      export GOPATH=/data/go
      export PATH=$PATH:$GOPATH/bin
      cd /data
    mode: "0755"
  - path: /etc/motd
    contents: |
      ================================================
        Core Development Environment

        Runtimes: Go, Node.js, PHP
        Tools: git, curl, vim, docker

        Data directory: /data (persistent)
      ================================================

trust:
  org:
    - linuxkit
    - library
