diff --git a/.gitignore b/.gitignore
index cf3b5457..066e7d5b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -84,3 +84,6 @@ js/chibi.*
 
 build-lib/chibi/char-set/derived.scm
 build-lib/chibi/char-set/width.scm
+
+# vim swapfiles
+*.swp
diff --git a/Makefile b/Makefile
index 65c3e8cb..e7822d97 100644
--- a/Makefile
+++ b/Makefile
@@ -415,7 +415,12 @@ install-base: all
 	$(INSTALL) -m0644 doc/chibi-doc.1 $(DESTDIR)$(MANDIR)/
 	-if type $(LDCONFIG) >/dev/null 2>/dev/null; then $(LDCONFIG) >/dev/null 2>/dev/null; fi
 
-install: install-base
+install-bash-completion:
+	if [ -d "/etc/bash_completion.d" ]; then \
+			cp tools/snow-chibi-completion.bash /etc/bash_completion.d/snow-chibi; \
+		fi
+
+install: install-base install-bash-completion
 ifneq "$(IMAGE_FILES)" ""
 	echo "Generating images"
 	-[ -z "$(DESTDIR)" ] && LD_LIBRARY_PATH="$(SOLIBDIR):$(LD_LIBRARY_PATH)" DYLD_LIBRARY_PATH="$(SOLIBDIR):$(DYLD_LIBRARY_PATH)" CHIBI_MODULE_PATH="$(MODDIR):$(BINMODDIR)" $(BINDIR)/chibi-scheme$(EXE) -mchibi.repl -d $(MODDIR)/chibi.img
@@ -497,6 +502,7 @@ uninstall:
 	-$(RMDIR) $(DESTDIR)$(MODDIR) $(DESTDIR)$(BINMODDIR)
 	-$(RM) $(DESTDIR)$(MANDIR)/chibi-scheme.1 $(DESTDIR)$(MANDIR)/chibi-ffi.1 $(DESTDIR)$(MANDIR)/chibi-doc.1
 	-$(RM) $(DESTDIR)$(PKGCONFDIR)/chibi-scheme.pc
+	-$(RM) /etc/bash_completion.d/snow-chibi
 
 dist: distclean
 	$(RM) chibi-scheme-$(CHIBI_VERSION).tgz
diff --git a/tools/snow-chibi-completion.bash b/tools/snow-chibi-completion.bash
new file mode 100644
index 00000000..b49b16b6
--- /dev/null
+++ b/tools/snow-chibi-completion.bash
@@ -0,0 +1,12 @@
+#/usr/bin/env bash
+
+_snow_chibi_completions() {
+    if [ "${#COMP_WORDS[@]}" -gt "2" ]
+    then
+        COMPREPLY=($(compgen -f -- "${COMP_WORDS[COMP_CWORD]}"))
+    else
+        COMPREPLY=($(compgen -W "search show install upgrade remove status package gen-key reg-key sign verify upload index update implementations help" "${COMP_WORDS[COMP_CWORD]}"))
+    fi
+}
+
+complete -o bashdefault -F _snow_chibi_completions snow-chibi