diff --git a/app/Main.hs b/app/Main.hs
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -2,6 +2,7 @@
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE RecordWildCards #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE CPP #-}
 
 module Main where
 
@@ -16,7 +17,6 @@
 import qualified Data.Text as T
 import qualified Data.Text.IO as T
 import qualified Hpack.Config as Hpack
-import qualified Toml
 
 type Preprocessor = ExceptT PreprocessorException IO
 
@@ -32,17 +32,11 @@
 main :: IO ()
 main = do
   Options{..} <- execParser options
-  configTomlRes <- Toml.decodeFileEither configCodec ".servant-serf.toml"
-  config <- case configTomlRes of
-    Left errs -> do 
-      logErrLn $ Toml.prettyTomlDecodeErrors errs
-      exitFailure
-    Right config -> pure config
-  [origInputFile, input, output] <- getArgs
+  (origInputFile : input : output : _) <- getArgs
   contents <- liftIO $ T.readFile input
   apiModule@ApiModule{..} <- case decodeApiModule contents of
     Right apiModule -> pure apiModule
-    Left err -> do 
+    Left err -> do
       logErrLn $ "Parse error: " <> T.pack err
       exitFailure
   mException <- runExceptT $ mainPP apiModule config
@@ -65,7 +59,7 @@
     Nothing -> throwError NoLibrary
     Just section ->
       let lib = Hpack.sectionData section
-      in pure $ T.pack <$> Hpack.libraryExposedModules lib <> Hpack.libraryOtherModules lib
+      in pure $ getAllModules lib
   let handlerModules = filterPattern isHandlerModule allModules
   case handlerModules of
     [] -> throwError $ EmptyHandlerModules allModules
@@ -75,6 +69,17 @@
         [] -> pure () -- all good, discovered modules are in scope
         xs -> throwError $ MissingImports xs
 
+getAllModules :: Hpack.Library -> [Text]
+getAllModules lib = T.pack . unModule <$> Hpack.libraryExposedModules lib <> Hpack.libraryOtherModules lib
+
+#if MIN_VERSION_hpack(0, 34, 3)
+unModule :: Hpack.Module -> String
+unModule = Hpack.unModule
+#else
+unModule :: String -> String
+unModule = id
+#endif
+
 renderException :: String -> Module -> PreprocessorException -> Text
 renderException origInputFile (Module modName) exception = case exception of
   PackageYamlParseFailure errMsg ->
@@ -93,4 +98,3 @@
         , " or updating the is_handler_module regular expression in your .servant-serf.toml"
         ]
       <> importStatements
-
diff --git a/app/Options.hs b/app/Options.hs
--- a/app/Options.hs
+++ b/app/Options.hs
@@ -11,23 +11,19 @@
   , options
   , Options.Applicative.execParser
   , Config(..)
-  , defaultConfig
-  , configCodec
   , Pattern'
   ) where
 
+import Data.Bifunctor
 import Data.Text (Text)
-import GHC.Generics (Generic(..))
 import Options.Applicative
 import Regex
-import Toml ((.=))
-import qualified Data.Text as T
-import qualified Toml
 
 data Options = Options
   { originalInputFile :: FilePath
   , inputFile :: FilePath
   , outputFile :: FilePath
+  , config :: Config
   }
 
 options :: ParserInfo Options
@@ -48,19 +44,20 @@
   <*> strArgument
     (   metavar "OUTPUT_FILEPATH"
     )
+  <*> configParser
 
+configParser :: Parser Config
+configParser = Config
+  <$> option str
+    (  long "package-name"
+    <> short 'p'
+    )
+  <*> option (eitherReader $ first show . parseRegex)
+    (  long "is-handler-module"
+    <> short 'm'
+    )
+
 data Config = Config
   { packageName :: Text
   , isHandlerModule :: Pattern'
-  } deriving (Generic)
-
-configCodec :: Toml.TomlCodec Config
-configCodec = Config
-  <$> Toml.text "package_name" .= packageName
-  <*> patternCodec "is_handler_module" .= isHandlerModule
-
-defaultConfig :: Config
-defaultConfig = Config
-  { packageName = "example"
-  , isHandlerModule = either (error . T.unpack) id $ parseRegex' ".*Handler.*"
   }
diff --git a/app/Regex.hs b/app/Regex.hs
--- a/app/Regex.hs
+++ b/app/Regex.hs
@@ -1,8 +1,7 @@
 module Regex 
   ( Pattern'
-  , patternCodec
   , filterPattern
-  , parseRegex'
+  , parseRegex
   ) where
 
 import Data.Text (Text)
@@ -11,21 +10,8 @@
 import Text.Regex.TDFA.ReadRegex (parseRegex)
 import Text.Regex.TDFA.TDFA ( patternToRegex )
 import Text.Regex.TDFA.Text
-import qualified Data.Text as T
-import qualified Toml
 
 type Pattern' = (Pattern, (GroupIndex, DoPa))
-
-parseRegex' :: Text -> Either Text Pattern'
-parseRegex' inp = case parseRegex (T.unpack inp) of
-  Left e -> Left $ T.pack $ show e
-  Right pattern -> Right pattern
-
-_Pattern :: Toml.TomlBiMap Pattern' Toml.AnyValue
-_Pattern = Toml._TextBy (T.pack . showPattern . fst) parseRegex'
-
-patternCodec :: Toml.Key -> Toml.TomlCodec Pattern'
-patternCodec key = Toml.match _Pattern key
 
 filterPattern :: Pattern' -> [Text] -> [Text]
 filterPattern pattern strings = filter matchPattern strings
diff --git a/servant-serf.cabal b/servant-serf.cabal
--- a/servant-serf.cabal
+++ b/servant-serf.cabal
@@ -1,6 +1,6 @@
 cabal-version: 1.12
 name:          servant-serf
-version:       0.0.3
+version:       0.1.0
 license:       MIT
 license-file:  LICENSE
 maintainer:    Zachary Churchill <zachary@itpro.tv>
@@ -48,8 +48,7 @@
         parser-combinators >=1.2.1,
         regex-base >=0.94.0.0,
         regex-tdfa >=1.3.1.0,
-        text >=1.2.4.0,
-        tomland >=1.3.1.0
+        text >=1.2.4.0
 
     if False
         other-modules: Paths_servant_serf
