diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..b61b3b1
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,46 @@
+PREFIX ?= /usr/local
+BINDIR ?= $(PREFIX)/bin
+MANDIR ?= $(PREFIX)/share/man
+
+# Attempt to find bash completion dir in order of preference
+ifneq ($(wildcard /etc/bash_completion.d/.),)
+  CPLDIR ?= /etc/bash_completion.d
+endif
+
+HAS_BREW := $(shell command -v brew 2> /dev/null)
+ifdef HAS_BREW
+  CPLDIR ?= $$(brew --prefix)/etc/bash_completion.d
+endif
+
+HAS_PKGCONFIG := $(shell command -v pkg-config 2> /dev/null)
+ifdef HAS_PKGCONFIG
+  CPLDIR ?= $$(pkg-config --variable=completionsdir bash-completion 2> /dev/null)
+endif
+
+install:
+	@echo Installing the executable to $(BINDIR)
+	@mkdir -p $(BINDIR)
+	@cp -f pb $(BINDIR)/pb
+	@chmod 755 $(BINDIR)/pb
+	@echo Installing the manual page to $(MANDIR)/man1
+	@mkdir -p $(MANDIR)
+	@cp -f pb.1 $(MANDIR)/man1/pb.1
+	@chmod 644 $(MANDIR)/man1/pb.1
+ifdef CPLDIR
+	@echo Installing the command completion to $(CPLDIR)
+	@mkdir -p $(CPLDIR)
+	@cp -f pb.d $(CPLDIR)/pb
+	@chmod 644 $(CPLDIR)/pb
+endif
+
+uninstall:
+	@echo Removing the executable from $(BINDIR)
+	@rm -f $(BINDIR)/pb
+	@echo Removing the manual page from $(MANDIR)/man1
+	@rm -f $(BINDIR)/man1/pb.1
+ifdef CPLDIR
+	@echo Removing the command completion from $(CPLDIR)
+	@rm -f $(CPLDIR)/pb
+endif
+
+.PHONY: install uninstall
diff --git a/pb b/pb
index f20dd0f..b42e651 100755
--- a/pb
+++ b/pb
@@ -2,10 +2,11 @@
 
 version="v.2018.08.14"
 ENDPOINT="https://0x0.tilde.team"
-flag_options="hvfs::"
+flag_options="hvfs::x"
 flag_version=0
 flag_help=0
 flag_file=0
+flag_shortlist=0
 data=""
 
 SUCCESS=$(tput setaf 190)
@@ -77,6 +78,10 @@ while true; do
       shift
       break
       ;;
+    -x)
+      flag_shortlist=1
+      shift
+      ;;
     --)
       shift
       break
@@ -102,6 +107,11 @@ if [ ${flag_help} -gt 0 ]; then
   die "" 0
 fi
 
+if [ ${flag_shortlist} -gt 0 ]; then
+  out="-f -v -h -s"
+  die "${out}" 0
+fi
+
 if [ ${flag_file} -gt 0 ]; then
   if [ -z "${data}" ]; then
     printf "%sProvide data to upload%s\\n" "$ERROR" "$RESET"
diff --git a/pb.1 b/pb.1
new file mode 100644
index 0000000..2c9170c
--- /dev/null
+++ b/pb.1
@@ -0,0 +1,43 @@
+.TH PB 1 "14 August 2018" "v2018.08.14"
+.SH NAME
+pb \- a helper utility for using 0x0 pastebin services
+.SH SYNOPSIS
+.B pb [options] (filename)
+.P
+.SH DESRIPTION
+.B pb
+provides an easy-to-use interface for uploading images
+or piping output to a 0x0 pastebin service. While it
+comes pre-configured with a specific pastebin, the
+service endpoint can be overridden.
+.SH USAGE
+.TP
+.B pb scores.txt
+Upload "scores.txt" to the pastebin
+.TP
+.B echo "Secret info" | pb
+Upload piped output to the pastebin
+.TP
+.B find . -type f -name "*.js" -print | pb -f
+Upload a list of files to the pastebin individually
+.B pb -s http://0x0.st scores.txt
+Upload a file to a different pastebin endpoint
+.SH DEPENDENCIES
+None.
+.SH OPTIONS
+.TP
+.B -f
+Explicitly interpret stdin as filename or names
+.TP
+.B -s <server_address>
+Use alternative pastebin server address
+.TP
+.B -v
+Display current version information.
+.TP 
+.B -h
+Show the help.
+.SH BUGS
+None known.
+.SH AUTHOR
+James Tomasino <tomasino (at) lavabit (dot) com>
diff --git a/pb.d b/pb.d
new file mode 100644
index 0000000..c15622b
--- /dev/null
+++ b/pb.d
@@ -0,0 +1,28 @@
+#!/usr/bin/env bash
+
+_pb() {
+# Get basic autocomplete commands from the function itself
+  local helplist
+  helplist=$(pb -x)
+
+# Combine all the lists for autocomplete
+  local cur
+  cur=${COMP_WORDS[COMP_CWORD]}
+  COMPREPLY=( $( compgen -W "$helplist" -- "$cur" ) )
+}
+
+# Detect if current shell is ZSH, and if so, load this file in bash
+# compatibility mode.
+if [ -n "$ZSH_VERSION" ]; then
+  autoload bashcompinit
+  bashcompinit
+fi
+
+complete -o default -o nospace -F _pb pb
+
+# The following are necessary only for Cygwin, and only are needed
+# when the user has tab-completed the executable name and consequently
+# included the '.exe' suffix.
+if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
+  complete -o default -o nospace -F _pb pb.exe
+fi