diff --git a/nixfromnpm.cabal b/nixfromnpm.cabal
--- a/nixfromnpm.cabal
+++ b/nixfromnpm.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                nixfromnpm
-version:             0.1.0.0
+version:             0.1.0.2
 synopsis: Generate nix expressions from npm packages.
 -- description:
 license:             MIT
@@ -36,6 +36,7 @@
                      , network-uri
                      , directory
                      , simple-nix
+                     , docopt
   hs-source-dirs:      src
   default-language:    Haskell2010
 
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -1,16 +1,20 @@
-{-# LANGUAGE NoImplicitPrelude #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE LambdaCase #-}
-{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE QuasiQuotes #-}
 module Main where
 
-----------------------------------------------------------------------------
-import NixFromNpm
-import Data.Text (Text)
-import qualified Data.Text as T
-----------------------------------------------------------------------------
+import System.Environment (getArgs)
+import System.Console.Docopt
 
+import NixFromNpm hiding (getArgs)
+
+patterns :: Docopt
+patterns = [docoptFile|USAGE.txt|]
+
+args ?? arg = getArgOrExitWith patterns args (argument arg)
+
 main :: IO ()
-main = getArgs >>= \case
-  pkgName:path:_ -> dumpPkgNamed False pkgName path
-  _ -> error "Incorrect number of arguments"
+main = do
+  args <- parseArgsOrExit patterns =<< getArgs
+  pkgName <- args ?? "packagename"
+  path <- args ?? "outputpath"
+  let noCache = isPresent args (longOption "no-cache")
+  dumpPkgNamed noCache (pack pkgName) (pack path)
