diff --git a/hi.cabal b/hi.cabal
--- a/hi.cabal
+++ b/hi.cabal
@@ -1,5 +1,5 @@
 name:                hi
-version:             0.0.1
+version:             0.0.2
 synopsis:            Generate scaffold for cabal project
 license:             BSD3
 license-file:        LICENSE
@@ -53,6 +53,7 @@
   exposed-modules:
       Distribution.Hi
       Distribution.Hi.Compiler
+      Distribution.Hi.Config
       Distribution.Hi.Context
       Distribution.Hi.Directory
       Distribution.Hi.FilePath
@@ -71,6 +72,7 @@
       , bytestring
       , directory
       , filepath
+      , parsec
       , process
       , split
       , template   == 0.2.*
@@ -91,6 +93,7 @@
       , bytestring
       , directory
       , filepath
+      , parsec
       , process
       , split
       , template   == 0.2.*
@@ -114,10 +117,12 @@
       , bytestring
       , directory
       , hspec       >= 1.5
+      , parsec
       , process
       , template    == 0.2.*
       , temporary
       , text
+      , time
 
 source-repository head
   type:     git
diff --git a/src/Distribution/Hi/Config.hs b/src/Distribution/Hi/Config.hs
new file mode 100644
--- /dev/null
+++ b/src/Distribution/Hi/Config.hs
@@ -0,0 +1,46 @@
+{-# OPTIONS_GHC -fno-warn-unused-do-bind #-}
+module Distribution.Hi.Config
+    (
+      parseConfig
+    ) where
+
+import           Control.Applicative   ((<$>), (<*))
+import           Data.Maybe            (catMaybes)
+import           Distribution.Hi.Types
+import           Text.Parsec
+import           Text.Parsec.String
+
+sep :: Parser Char
+sep = char ':'
+
+name :: Parser String
+name = many (oneOf $ ['a'..'z'] ++ ['A'..'Z'])
+
+eol :: Parser Char
+eol = newline <|> (eof >> return '\n')
+
+comment :: Parser ()
+comment = do
+    _ <- char '#' <* manyTill anyChar newline
+    return ()
+
+line :: Parser (Maybe (String, String))
+line = do
+    spaces
+    try (comment >> return Nothing) <|> (line' >>= return . Just)
+  where
+    line' = do
+        spaces
+        n <- name
+        spaces >> sep >> spaces
+        v <- many (noneOf "\n")
+        eol
+        return (n, v)
+
+configFile :: Parser [(String, String)]
+configFile = catMaybes <$> many line <* eof
+
+parseConfig :: String -> IO [Arg]
+parseConfig x = case parse configFile "ERROR" x of -- TODO Error message
+      Left  l  -> error $ show l
+      Right xs -> return $ map (uncurry Val) xs
diff --git a/src/Distribution/Hi/Flag.hs b/src/Distribution/Hi/Flag.hs
--- a/src/Distribution/Hi/Flag.hs
+++ b/src/Distribution/Hi/Flag.hs
@@ -14,7 +14,7 @@
                                   , author      = lookupAuthor
                                   , email       = lookupEmail
                                   , repository  = lookupRepository
-                                  , year        = lookupRepository
+                                  , year        = lookupYear
                                   }
   where
     lookupPackageName = lookup' "packageName"
@@ -22,6 +22,7 @@
     lookupAuthor      = lookup' "author"
     lookupEmail       = lookup' "email"
     lookupRepository  = lookup' "repository"
+    lookupYear        = lookup' "year"
     lookup' label = case lookup label $ [(l, v) | (Val l v) <- args] of
                         Just v  -> v
                         Nothing -> if label == "repository"
diff --git a/src/Distribution/Hi/Option.hs b/src/Distribution/Hi/Option.hs
--- a/src/Distribution/Hi/Option.hs
+++ b/src/Distribution/Hi/Option.hs
@@ -6,13 +6,16 @@
     , getMode
     ) where
 
-import           Distribution.Hi.Flag      (extractInitFlags)
-import           Distribution.Hi.Types
 import           Control.Applicative
-import           Data.Time.Calendar    (toGregorian)
-import           Data.Time.Clock       (getCurrentTime, utctDay)
+import           Data.Time.Calendar     (toGregorian)
+import           Data.Time.Clock        (getCurrentTime, utctDay)
+import           Distribution.Hi.Config (parseConfig)
+import           Distribution.Hi.Flag   (extractInitFlags)
+import           Distribution.Hi.Types
 import           System.Console.GetOpt
-import           System.Environment    (getArgs)
+import           System.Directory       (getHomeDirectory)
+import           System.Environment     (getArgs)
+import           System.FilePath        (joinPath)
 
 -- | Available options.
 options :: [OptDescr Arg]
@@ -22,20 +25,38 @@
     , Option ['a'] ["author"]      (ReqArg (Val "author") "NAME")  "Name of the project's author"
     , Option ['e'] ["email"]       (ReqArg (Val "email") "EMAIL")  "Email address of the maintainer"
     , Option ['r'] ["repository"]  (ReqArg (Val "repository") "REPOSITORY")  "Template repository(optional)"
-    , Option ['v'] ["version"]     (NoArg Version) "show version number"
+    , Option ['v'] ["version"]     (NoArg Version) "Show version number"
+    , Option []    ["no-configuration-file"] (NoArg NoConfigurationFile) "Run without configuration file"
+    , Option []    ["configuration-file"]    (ReqArg (Val "configFile") "CONFIGFILE") "Run with configuration file"
     ]
 
 -- | Returns 'InitFlags'.
 getInitFlags :: IO InitFlags
-getInitFlags = extractInitFlags <$> (addYear =<< fst <$> parseArgs <$> getArgs)
+getInitFlags = do
+    mode <- getMode
+    case mode of
+      Run                        -> runWithConfigurationFile
+      RunWithNoConfigurationFile -> runWithNoConfigurationFile
+      _                          -> error "Unexpected run mode"
+  where
+    runWithNoConfigurationFile = getInitFlagsPure =<< getArgs
+    runWithConfigurationFile   = do
+        (xs,_) <- parseArgs <$> getArgs
+        ys     <- addYear =<< parseConfig =<< readFile =<< getConfigFileName
+        return $ extractInitFlags (ys ++ xs)
 
+getInitFlagsPure :: [String] -> IO InitFlags
+getInitFlagsPure args = extractInitFlags <$> (addYear . fst . parseArgs $ args)
+
 -- | Returns 'Mode'.
 getMode :: IO Mode
 getMode = do
     args <- fst <$> parseArgs <$> getArgs
     return $ if any id [True |Version <- args]
                then ShowVersion
-               else Run
+               else if any id [True |NoConfigurationFile <- args]
+                      then RunWithNoConfigurationFile
+                      else Run
 
 parseArgs :: [String] -> ([Arg], [String])
 parseArgs argv =
@@ -45,6 +66,23 @@
       (_,_,errs ) -> error $ concat errs ++ usageInfo header options
   where
     header = "Usage: hi [OPTION...]"
+
+defaultConfigFilePath :: IO FilePath
+defaultConfigFilePath = do
+    h <- getHomeDirectory
+    return $ joinPath [h, defaultConfigFileName]
+
+defaultConfigFileName :: FilePath
+defaultConfigFileName = ".hirc"
+
+getConfigFileName :: IO FilePath
+getConfigFileName = do
+    args <- (fst . parseArgs) <$> getArgs
+    go args
+  where
+    go []                       = defaultConfigFilePath
+    go ((Val "configFile" p):_) = return p
+    go (_:xs)                   = go xs
 
 addYear :: [Arg] -> IO [Arg]
 addYear args = do
diff --git a/src/Distribution/Hi/Types.hs b/src/Distribution/Hi/Types.hs
--- a/src/Distribution/Hi/Types.hs
+++ b/src/Distribution/Hi/Types.hs
@@ -23,7 +23,7 @@
 type Label = String
 
 -- | Arguments.
-data Arg = Version | Val Label String deriving(Eq, Show)
+data Arg = Version | NoConfigurationFile | Val Label String deriving(Eq, Show)
 
 -- | Run mode.
-data Mode = ShowVersion | Run deriving(Eq, Show)
+data Mode = ShowVersion | Run | RunWithNoConfigurationFile deriving(Eq, Show)
diff --git a/src/Distribution/Hi/Version.hs b/src/Distribution/Hi/Version.hs
--- a/src/Distribution/Hi/Version.hs
+++ b/src/Distribution/Hi/Version.hs
@@ -4,4 +4,4 @@
     ) where
 
 version :: String
-version = "0.0.1"
+version = "0.0.2"
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -9,5 +9,6 @@
 main = do
     mode <- getMode
     case mode of
-      ShowVersion -> print version
-      Run         -> Hi.cli =<< getInitFlags
+      ShowVersion                -> print version
+      RunWithNoConfigurationFile -> Hi.cli =<< getInitFlags
+      Run                        -> Hi.cli =<< getInitFlags
