diff --git a/doc/vcsh.1.ronn b/doc/vcsh.1.ronn
index 0fbead9a78c4f30ce0e1d02680a913249c49dbf7..88ebd9dd0633890cdd6b30d845bc934b3e803698 100644
--- a/doc/vcsh.1.ronn
+++ b/doc/vcsh.1.ronn
@@ -3,6 +3,8 @@ vcsh(1) - manage config files in $HOME via fake bare git repositories
 
 ## SYNOPSIS
 
+`vcsh` [<options>] <command>
+
 `vcsh` clone <url> [<repo>]
 
 `vcsh` delete <repo>
@@ -21,7 +23,7 @@ vcsh(1) - manage config files in $HOME via fake bare git repositories
 
 `vcsh` rename <repo> <newname>
 
-`vcsh` run <repo> <command>
+`vcsh` run <repo> <shell command>
 
 `vcsh` setup <repo>
 
@@ -29,7 +31,7 @@ vcsh(1) - manage config files in $HOME via fake bare git repositories
 
 `vcsh` write-gitignore <repo>
 
-`vcsh` <repo> <gitcommand>
+`vcsh` <repo> <git command>
 
 `vcsh` <repo>
 
@@ -59,6 +61,17 @@ an interactive user.
 
 ## OPTIONS
 
+* -c:
+  Source <file> prior to other configuration files
+
+* -d:
+  Enable debug mode
+
+* -v:
+  Enable verbose mode
+
+## COMMANDS
+
 * clone:
   Clone an existing repository.
 
diff --git a/vcsh b/vcsh
index 358135a48ed814b63218d0fef0b6a68023afae0e..9a4f4aae437597fad43cb959a9a0707faea7b99b 100755
--- a/vcsh
+++ b/vcsh
@@ -11,6 +11,35 @@
 # full compability with git. In case git ever changes its licensing terms,
 # this software will most likely follow suit.
 
+SELF=$(basename $0)
+
+fatal() {
+	echo "$SELF: fatal: $1" >&2
+	exit $2
+}
+
+# We need to run getops as soon as possible so we catch -d and other
+# options that will modify our behaviour.
+# Commands are handled at the end of this script.
+while getopts  "c:dv" flag; do
+	if [ "$1" = '-d' ] || [ "$1" = '--debug' ]; then
+		set -vx
+		VCSH_DEBUG=1
+		shift 1
+	elif [ "$1" = '-v' ];then
+		VCSH_VERBOSE=1
+	elif [ "$1" = '-c' ];then
+		# Source $OPTARG if it can be read and has an absolute or relative
+		# path or is in $PATH
+		if [ -r "$OPTARG" ]; then
+			. "$OPTARG"
+		else
+			fatal "Can not read configuration file '$OPTARG'" 1
+		fi
+	fi
+done
+
+
 [ -n "$VCSH_DEBUG" ]                  && set -vx
 [ -z "$XDG_CONFIG_HOME" ]             && XDG_CONFIG_HOME="$HOME/.config"
 [ -r "$XDG_CONFIG_HOME/vcsh/config" ] && . "$XDG_CONFIG_HOME/vcsh/config"
@@ -20,11 +49,15 @@
 [ -z "$VCSH_BASE" ]                   && VCSH_BASE="$HOME"
 [ -z "$VCSH_GITIGNORE" ]              && VCSH_GITIGNORE='exact'
 
-SELF=$(basename $0)
-
 help() {
-	echo "usage: $SELF <args>
+	echo "usage: $SELF <options> <command>
+
+   options:
+   -c <file>            Source file prior to other configuration files
+   -d                   Enable debug mode
+   -d                   Enable verbose mode
 
+   commands:
    clone <remote> \\
          [<repo>]       Clone from an existing repository
    delete               Delete an existing repository
@@ -56,11 +89,6 @@ verbose() {
 	if [ -n "$VCSH_DEBUG" ] || [ -n "$VCSH_VERBOSE" ]; then echo "$SELF: verbose: $@"; fi
 }
 
-fatal() {
-	echo "$SELF: fatal: $1" >&2
-	exit $2
-}
-
 error() {
 	echo "$SELF: error: $1" >&2
 }