#!/bin/sh set -e IMAGE="${DNC_IMAGE:-ghcr.io/lstmnemodel/dnc:latest}" if [ $# -eq 0 ]; then if [ -x "/opt/dnc/libexec/dnc-kitty-launcher" ]; then exec /opt/dnc/libexec/dnc-kitty-launcher else script_dir="$(cd "$(dirname "$0")" && pwd)" if [ -x "$script_dir/../libexec/dnc-kitty-launcher" ]; then exec "$script_dir/../libexec/dnc-kitty-launcher" elif command -v dnc-kitty-launcher >/dev/null 2>&1; then exec dnc-kitty-launcher else echo "Error: dnc-kitty-launcher not found" >&2 exit 1 fi fi fi GPU=none if command -v nvidia-smi >/dev/null 2>&1; then GPU=nvidia fi DRI="" [ -d /dev/dri ] && DRI=1 KFD="" [ -e /dev/kfd ] && KFD=1 DOCKER_SOCK="/var/run/docker.sock" ROOTLESS=$(docker info --format '{{.ClientInfo.Context}}' 2>/dev/null | grep -ci rootless || true) if [ "$ROOTLESS" -gt 0 ] 2>/dev/null ; then echo "ERROR: dnc requires rootful Docker. Rootless Docker is not supported." >&2 exit 1 fi DNC_CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/dnc" mkdir -p "$DNC_CACHE" DNC_CONFIG="${XDG_CONFIG_HOME:-$HOME/.config}/dnc" mkdir -p "$DNC_CONFIG" printenv > "$DNC_CACHE/host.env" TTY_FLAG="" [ -t 0 ] && TTY_FLAG="-t" # SSH agent socket forwarding SSH_SOCK="${SSH_AUTH_SOCK:-}" # Kitvy bundle path (for kitten run-shell inside containers) DNC_KITTY_PATH="" [ -d /opt/dnc/kitty ] && DNC_KITTY_PATH=/opt/dnc/kitty exec docker run --rm -i ${TTY_FLAG} \ -v "$DOCKER_SOCK:/var/run/docker.sock:ro" \ -v "$PWD:$PWD" -w "$PWD" \ -v "$DNC_CACHE:/opt/dnc/host:rw" \ -v "$DNC_CACHE/host.env:/run/host/env:ro" \ -e "DNC_HOST_GPU=$GPU" \ -e "DNC_HOST_DRI=$DRI" \ -e "DNC_HOST_KFD=$KFD" \ -e "DNC_HOST_UID=$(id -u)" \ -e "DNC_HOST_GID=$(id -g)" \ -e "DNC_HOST_USER=$USER" \ -e "DNC_HOST_HOME=$HOME" \ -e "DNC_HOST_SHELL=$SHELL" \ -e "DNC_HOST_GIDS=$(id -G)" \ -e "DNC_CACHE_HOST=$DNC_CACHE" \ -e "DNC_CONFIG_HOST=$DNC_CONFIG" \ -e "DNC_HOST_SSH=$HOME/.ssh" \ -e "DNC_HOST_GITCONFIG=$HOME/.gitconfig" \ -e "DNC_HOST_GITCRED=$HOME/.git-credentials" \ ${DNC_KITTY_PATH:+-e "DNC_KITTY_PATH=$DNC_KITTY_PATH"} \ ${SSH_SOCK:+-e "SSH_AUTH_SOCK=$SSH_SOCK"} \ -e TERM -e LANG \ "$IMAGE" "$@"