diff --git a/bash_completion.d/pre-commit b/bash_completion.d/pre-commit
new file mode 100644
index 0000000000000000000000000000000000000000..efae4b430fd86d1726e47c4350e6005c90460e05
--- /dev/null
+++ b/bash_completion.d/pre-commit
@@ -0,0 +1,17 @@
+# vim: ft=bash
+
+_pre_commit () {
+    local cur prev words cword opts
+    _init_completion || return
+    opts='-h --help -V --version'
+    commands='autoupdate clean gc init-templatedir install install-hooks migrate-config run sample-config try-repo uninstall validate-config validate-manifest help hook-impl'
+
+    if [[ $cur == -* ]]
+    then
+        COMPREPLY=($(compgen -W "$opts" -- "$cur"))
+    else
+        COMPREPLY=($(compgen -W "$commands" -- "$cur"))
+    fi
+}
+
+complete -F _pre_commit pre-commit