aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorToby Vincent <tobyv@tobyvin.dev>2023-10-08 23:39:58 -0500
committerToby Vincent <tobyv@tobyvin.dev>2023-10-08 23:39:58 -0500
commit5997f74da8b76f54005522d44902b240504f48da (patch)
treedfa0ca6eaa70cb1d47f8dd2378e004f19f1a4223
parentf97da8f36bc036155875409067599b472fe8c70b (diff)
fix(tmux): improve remote xdg-open command
-rw-r--r--ssh/.config/systemd/user/xdg-open.service8
-rwxr-xr-xssh/.local/bin/ssh-open17
-rwxr-xr-xtmux/.local/bin/tmux-sshr1
3 files changed, 21 insertions, 5 deletions
diff --git a/ssh/.config/systemd/user/xdg-open.service b/ssh/.config/systemd/user/xdg-open.service
new file mode 100644
index 0000000..7113f44
--- /dev/null
+++ b/ssh/.config/systemd/user/xdg-open.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=xdg-open socket listener
+
+[Service]
+ExecStart=/usr/bin/socat UNIX-LISTEN:%t/xdg-open.socket,fork,umask=007 EXEC:"xargs xdg-open",nofork
+
+[Install]
+WantedBy=default.target
diff --git a/ssh/.local/bin/ssh-open b/ssh/.local/bin/ssh-open
index 276360c..01b650c 100755
--- a/ssh/.local/bin/ssh-open
+++ b/ssh/.local/bin/ssh-open
@@ -1,8 +1,15 @@
#!/usr/bin/sh
-HOSTNAME=$(uname -n)
+if [ -n "$SSH_CLIENT" ]; then
+ HOSTNAME=$(uname -n)
-printf '%s' "$1" | sed \
- -e "s/localhost/$HOSTNAME/" \
- -e "s/127\(\.[0-9]\{1,3\}\)\{3\}/$HOSTNAME/" |
- xargs -I{} ssh -l "$USER" -p 2222 localhost "xdg-open '{}'"
+ printf '%s' "$@" |
+ sed -e "s/localhost/$HOSTNAME/" -e "s/127\(\.[0-9]\{1,3\}\)\{3\}/$HOSTNAME/" |
+ if [ -S "$XDG_RUNTIME_DIR"/xdg-open.socket ] && command -v nc >/dev/null; then
+ nc -UN "$XDG_RUNTIME_DIR"/xdg-open.socket
+ else
+ xargs -I{} ssh -l "$USER" -p 2222 localhost "xdg-open '{}'"
+ fi
+else
+ $(command -vp xdg-open) "$@"
+fi
diff --git a/tmux/.local/bin/tmux-sshr b/tmux/.local/bin/tmux-sshr
index 3c75b8c..11186ff 100755
--- a/tmux/.local/bin/tmux-sshr
+++ b/tmux/.local/bin/tmux-sshr
@@ -44,6 +44,7 @@ else
-o "ControlMaster=auto" \
-o "ControlPath=${XDG_RUNTIME_DIR}/ssh.%C" \
-R "2222:localhost:22" \
+ -R "${XDG_RUNTIME_DIR}/xdg-open.socket:${XDG_RUNTIME_DIR}/xdg-open.socket" \
-R "$tmux_remote_sock:$tmux_local_sock" \
"$target" "zsh -l -c 'tmux new -A'"
fi