#!/bin/bash # dnc-kitty-launcher - Launch kitty with container context find_dnc_file() { local dir="$PWD" while [ "$dir" != "/" ]; do if [ -f "$dir/.dnc" ]; then echo "$dir/.dnc" return fi dir="$(dirname "$dir")" done } dnc_file=$(find_dnc_file) if [ -z "$dnc_file" ]; then echo "Error: .dnc file not found. Run 'dnc setup' first." >&2 exit 1 fi container="" dnc_dir="$(dirname "$dnc_file")" while IFS= read -r line; do case "$line" in container*) container="$(echo "$line" | cut -d= -f2 | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')" ;; esac done < "$dnc_file" if [ -z "$container" ]; then echo "Error: container= not found in $dnc_file" >&2 exit 1 fi container_status=$(docker inspect --format='{{.State.Status}}' "$container" 2>/dev/null || true) if [ "$container_status" != "running" ]; then echo "Starting container $container..." >&2 docker start "$container" >/dev/null fi tmpdir=$(mktemp -d -t dnc-kitty-XXXXXX) cleanup() { rm -rf "$tmpdir"; } trap cleanup EXIT uid=$(id -u) container_home=$(docker exec "$container" sh -c " user_name=\$(getent passwd $uid | cut -d: -f1 2>/dev/null || echo '') if [ -z \"\$user_name\" ]; then echo /root else eval echo ~\$user_name fi ") config_src="$container_home/.config/kitty" docker cp "$container:$config_src/." "$tmpdir/" 2>/dev/null || true if [ -x "/opt/dnc/kitty/bin/kitty" ]; then kitty="/opt/dnc/kitty/bin/kitty" elif command -v kitty >/dev/null 2>&1; then kitty="kitty" else echo "Error: kitty not found (not installed and no system kitty)" >&2 exit 1 fi mkdir -p "$tmpdir" if [ -x "/opt/dnc/libexec/dnc-exec" ]; then dnc_exec="/opt/dnc/libexec/dnc-exec" else script_dir="$(cd "$(dirname "$0")" && pwd)" dnc_exec="$script_dir/dnc-exec" fi if [ -f "$tmpdir/kitty.conf" ]; then echo "" >> "$tmpdir/kitty.conf" echo "# dnc: all tabs go through docker exec" >> "$tmpdir/kitty.conf" else : fi echo "shell $dnc_exec" >> "$tmpdir/kitty.conf" export KITTY_CONFIG_DIRECTORY="$tmpdir" export DNC_CONTAINER="$container" cd "$dnc_dir" || exit 1 exec "$kitty" "$@"