diff --git a/utilities/utilities.plugin.zsh b/utilities/utilities.plugin.zsh
new file mode 100644
index 0000000..72fb3f2
--- /dev/null
+++ b/utilities/utilities.plugin.zsh
@@ -0,0 +1,24 @@
+# A collection of various shell utilities.
+
+# Detect the type and extract an archive file.
+extract() {
+  if [ -f $1 ]; then
+    case $1 in
+      *.tar.bz2)   tar xvjf $1    ;;
+      *.tar.gz)    tar xvzf $1    ;;
+      *.tar.xz)    gunzip $1      ;;
+      *.bz2)       bunzip2 $1     ;;
+      *.rar)       unrar x $1     ;;
+      *.gz)        gunzip $1      ;;
+      *.tar)       tar xvf $1     ;;
+      *.tbz2)      tar xvjf $1    ;;
+      *.tgz)       tar xvzf $1    ;;
+      *.zip)       unzip $1       ;;
+      *.Z)         uncompress $1  ;;
+      *.7z)        7zr x $1       ;;
+      *)           echo "error: unable to extract '$1'" ;;
+    esac
+  else
+    echo "error: file not found '$1'"
+  fi
+}
diff --git a/zshrc b/zshrc
index 216a016..dca4bbf 100644
--- a/zshrc
+++ b/zshrc
@@ -31,6 +31,9 @@ source-plugin build
 # Project sandboxing commands
 source-plugin sandbox
 
+# Various shell utilities
+source-plugin utilities
+
 # Layout tmux window commands
 [ "$TMUX" != "" ] && source-plugin layout