diff --git a/Makefile b/Makefile
index 17f1aa68772923042516ad7d64e6d868cc027fc1..0db3008a1baad0df924cde926c258441d0e11a7e 100644
--- a/Makefile
+++ b/Makefile
@@ -59,6 +59,7 @@ install:
 	for l in ${COMMITPKG_LINKS}; do ln -sf commitpkg $(DESTDIR)$(PREFIX)/bin/$$l; done
 	for l in ${ARCHBUILD_LINKS}; do ln -sf archbuild $(DESTDIR)$(PREFIX)/bin/$$l; done
 	install -Dm0644 bash_completion $(DESTDIR)/etc/bash_completion.d/devtools
+	install -Dm0644 zsh_completion $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_devtools
 	ln -sf archco $(DESTDIR)$(PREFIX)/bin/communityco
 
 uninstall:
@@ -68,6 +69,7 @@ uninstall:
 	for l in ${COMMITPKG_LINKS}; do rm -f $(DESTDIR)$(PREFIX)/bin/$$l; done
 	for l in ${ARCHBUILD_LINKS}; do rm -f $(DESTDIR)$(PREFIX)/bin/$$l; done
 	rm $(DESTDIR)/etc/bash_completion.d/devtools
+	rm $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_devtools
 	rm -f $(DESTDIR)$(PREFIX)/bin/communityco
 
 dist:
diff --git a/zsh_completion b/zsh_completion
new file mode 100644
index 0000000000000000000000000000000000000000..b1d7d0538f0252a0384eed8f22dd7b191a17925d
--- /dev/null
+++ b/zsh_completion
@@ -0,0 +1,81 @@
+#compdef archbuild archco archrelease archrm commitpkg finddeps makechrootpkg mkarchroot rebuildpkgs extrapkg=commitpkg corepkg=commitpkg testingpkg=commitpkg stagingpkg=commitpkg communitypkg=commitpkg community-testingpkg=commitpkg community-stagingpkg=commitpkg multilibpkg=commitpkg multilib-testingpkg=commitpkg extra-i686-build=archbuild extra-x86_64-build=archbuild testing-i686-build=archbuild testing-x86_64-build=archbuild staging-i686-build=archbuild staging-x86_64-build=archbuild multilib-build=archbuild multilib-testing-build=archbuild communityco=archco
+
+_arch=(i686 x86_64 any)
+
+_tags=(
+	core-i686 core-x86_64 core-any
+	extra-i686 extra-x86_64 extra-any
+	multilib-i686 multilib-x86_64 multilib-any
+	staging-i686 staging-x86_64 staging-any
+	testing-i686 testing-x86_64 testing-any
+	multilib-testing-i686 multilib-testing-x86_64 multilib-testing-any
+	community-i686 community-x86_64 community-any
+	community-staging-i686 community-staging-x86_64 community-staging-any
+	community-testing-i686 community-testing-x86_64 community-testing-any
+)
+
+_archbuild_args=(
+	'-c[Recreate the chroot before building]'
+	'-r[Create chroots in this directory]:base_dir:_files -/'
+)
+
+_archco_args=(
+	'*:packages:_devtools_completions_all_packages'
+)
+
+_archrelease_args=(
+	"*:arch:($_tags[*])"
+)
+
+_archrm_args=(
+	'1:path:_files -/'
+)
+
+_commitpkg_args=(
+	"-a[Release to a specific architecture only]:arch:($_arch[*])"
+	'-l[Set bandwidth limit]:limit'
+	'1:commit_msg'
+)
+
+_finddeps_args=(
+	'1:packages:_devtools_completions_installed_packages'
+)
+
+_makechrootpkg_args=(
+	'-I[Install a package into the working copy]:target:_files -g "*.pkg.tar.*(.)"'
+	'-c[Clean the chroot before building]'
+	'-d[Add the package to a local db at /repo after building]'
+	'-h[Display usage]'
+	'-l[The directory to use as the working copy]:copy_dir:_files -/'
+	'-r[The chroot dir to use]:chroot_dir:_files -/'
+	'-u[Update the working copy of the chroot before building]'
+)
+
+_mkarchroot_args=(
+	'-r[Run a program within the context of the chroot]:app'
+	'-u[Update the chroot via pacman]'
+	'-f[Force overwrite of files in the working-dir]'
+	'-C[Location of a pacman config file]:pacman_config:_files'
+	'-M[Location of a makepkg config file]:makepkg_config:_files'
+	'-n[Do not copy config files into the chroot]'
+	'-c[Set pacman cache]:pacman_cache:_files -/'
+	'-h[Display usage]'
+)
+
+_rebuildpkgs_args=(
+	'1:chroot_dir:_files -/'
+	'*:packages:_devtools_completions_installed_packages'
+)
+
+_devtools_completions_all_packages() {
+	typeset -U packages
+	packages=($(_call_program packages pacman -Sql))
+	compadd - "${(@)packages}"
+}
+
+_devtools() {
+	local argname="_${service}_args[@]"
+	_arguments -s "${(P)argname}"
+}
+
+_devtools