2026-05-23 23:24:56 +03:00
|
|
|
#!/bin/sh
|
|
|
|
|
set -e
|
|
|
|
|
|
|
|
|
|
IMAGE="${DNC_IMAGE:-ghcr.io/lstmnemodel/dnc:latest}"
|
|
|
|
|
|
2026-05-25 03:01:46 +03:00
|
|
|
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
|
|
|
|
|
|
2026-05-23 23:24:56 +03:00
|
|
|
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"
|
|
|
|
|
|
2026-05-25 03:01:46 +03:00
|
|
|
DNC_CONFIG="${XDG_CONFIG_HOME:-$HOME/.config}/dnc"
|
|
|
|
|
mkdir -p "$DNC_CONFIG"
|
|
|
|
|
|
|
|
|
|
printenv > "$DNC_CACHE/host.env"
|
|
|
|
|
|
2026-05-23 23:24:56 +03:00
|
|
|
TTY_FLAG=""
|
|
|
|
|
[ -t 0 ] && TTY_FLAG="-t"
|
|
|
|
|
|
2026-05-25 03:01:46 +03:00
|
|
|
# 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
|
|
|
|
|
|
2026-05-23 23:24:56 +03:00
|
|
|
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" \
|
2026-05-25 03:01:46 +03:00
|
|
|
-v "$DNC_CACHE/host.env:/run/host/env:ro" \
|
2026-05-23 23:24:56 +03:00
|
|
|
-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" \
|
2026-05-25 03:01:46 +03:00
|
|
|
-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 \
|
2026-05-23 23:24:56 +03:00
|
|
|
"$IMAGE" "$@"
|