#!/bin/zsh setopt no_unset extended_glob warn_create_global die() { printf >&2 '%s\n' "$@" exit 1 } direct-urxvt() { local container cmd sockd display container=$1 cmd=$2 sock=/run/inbox/$container/run/exec/exec display=${DISPLAY#:} #s6-sudo /run/cmd.s up $container || # die "Failed to start container ${(qqq)container}" s6-sudo /run/cmd.s link $container xsession.$display.$USER run/exec/exec || die "Failed to link ${(qqq)container} exec socket." [[ -S $sock ]] || die "Failed to link ${(qqq)container} exec socket." s6-sudo /run/cmd.s link xsession.$display.$USER $container run/exec/urxvt || die "Failed to link urxvt socket." local -a el_env=( EXEC_PATH=$sock URXVT_PATH=/run/inbox/xsession.$display.$USER/run/exec/urxvt ) local -a el_cmd=( 'multisubstitute {' ' importas -i -u EXEC_PATH EXEC_PATH' ' importas -i -u URXVT_PATH URXVT_PATH' '}' 's6-sudo $EXEC_PATH' '/mnt/ns/bin/spawn-pty rxvt-unicode-256color {' " $cmd" '} s6-sudo $URXVT_PATH '${(qqq)${container//./:}} ) exec env $el_env execlineb -c "${(F)el_cmd}" } main() { local container sock arg local -a quoted [[ $1 == */* ]] && die "Invalid container name: ${(qqq)1}" container=$1 shift 1 || exit $? sock=/run/inbox/$container/run/exec/exec for arg in "$@"; do quoted+=( "$(s6-quote -- "$arg")" ) done # if [[ -S $sock ]]; then # #exec s6-sudo $sock "$@" direct-urxvt $container "${(j: :)quoted}" # else # powerbox-plumb "container-urxvt/$container/${(j: :)quoted}" # fi } typeset -f -t main main "$@"