diff --git a/modules/osx/functions/trash b/modules/osx/functions/trash
new file mode 100644
index 00000000..0efa2154
--- /dev/null
+++ b/modules/osx/functions/trash
@@ -0,0 +1,31 @@
+#
+# Moves files to the macOS trash.
+#
+
+# function trash {
+
+emulate -L zsh
+setopt LOCAL_OPTIONS EXTENDED_GLOB
+
+local file
+local -a files=()
+for file in $@; do
+  if [[ -e $file ]]; then
+    # ':a' gets the full path (do not use ':A', which would resolve symlinks)
+    files+=("the POSIX file \"${file:a}\"")
+  else
+    print "trash: No such file or directory '$file'." >&2
+    return 1
+  fi
+done
+
+if (( $#files == 0 )); then
+  print 'usage: trash <files...>' >&2
+  return 64  # Match rm's return code.
+fi
+
+# Join file list with commas, and tell Finder to trash that list.
+local file_list="${(pj., .)files}"
+osascript 2>&1 > /dev/null -e "tell app \"Finder\" to move { "${file_list}" } to trash"
+
+# }