diff --git a/home/.local/bin/open b/home/.local/bin/open
new file mode 100755
index 00000000..256a62e2
--- /dev/null
+++ b/home/.local/bin/open
@@ -0,0 +1,18 @@
+#!/bin/sh
+set -eu
+
+if [ -n "${SSH_CLIENT:-}" ]; then
+ exec pbd -o "$@"
+fi
+
+case "$1" in
+ (*.gif|*.jpeg|*.jpg|*.png)
+ curl -LSs "$1" | imv -
+ ;;
+ (*.txt)
+ exec xterm -hold -e sh -c 'curl -LSs "$1" | $PAGER' - "$1"
+ ;;
+ (*)
+ printf '%s' "$1" | pbcopy
+ ;;
+esac
diff --git a/home/.local/bin/pbcopy b/home/.local/bin/pbcopy
new file mode 100755
index 00000000..a804f836
--- /dev/null
+++ b/home/.local/bin/pbcopy
@@ -0,0 +1,11 @@
+#!/bin/sh
+set -eu
+
+if [ -n "${SSH_CLIENT:-}" ]; then
+ exec pbd -c
+elif [ -n "${DISPLAY:-}" ]; then
+ exec xsel -bi
+else
+ echo "${0}: don't know what to do" >&2
+ exit 1
+fi
diff --git a/home/.local/bin/pbpaste b/home/.local/bin/pbpaste
new file mode 100755
index 00000000..2924f01e
--- /dev/null
+++ b/home/.local/bin/pbpaste
@@ -0,0 +1,11 @@
+#!/bin/sh
+set -eu
+
+if [ -n "${SSH_CLIENT:-}" ]; then
+ exec pbd -p
+elif [ -n "${DISPLAY:-}" ]; then
+ exec xsel -bo
+else
+ echo "${0}: don't know what to do" >&2
+ exit 1
+fi
|