module Text.Hakyll ( hakyll ) where import Network.Hakyll.SimpleServer (simpleServer) import System.Environment (getArgs, getProgName) import System.Directory (doesDirectoryExist, removeDirectoryRecursive) -- | Main function to run hakyll. hakyll :: IO () -> IO () hakyll buildFunction = do args <- getArgs case args of [] -> build buildFunction ["clean"] -> clean ["preview", p] -> build buildFunction >> server (read p) ["preview"] -> build buildFunction >> server 8000 ["server", p] -> server (read p) ["server"] -> server 8000 _ -> help -- | Build the site. build :: IO () -> IO () build buildFunction = do putStrLn "Generating..." buildFunction -- | Clean up directories. clean :: IO () clean = do remove' "_cache" remove' "_site" where remove' dir = do putStrLn $ "Removing " ++ dir ++ "..." exists <- doesDirectoryExist dir if exists then removeDirectoryRecursive dir else return () -- | Show usage information. help :: IO () help = do name <- getProgName putStrLn $ "This is a hakyll site generator program. You should always\n" ++ "run it from the project root directory.\n" ++ "\n" ++ "Usage:\n" ++ name ++ " Generate the site.\n" ++ name ++ " clean Clean up and remove cache.\n" ++ name ++ " help Show this message.\n" ++ name ++ " preview [port] Generate site, then start a server.\n" ++ name ++ " server [port] Run a local test server.\n" server :: Integer -> IO () server p = do simpleServer (fromIntegral $ p) "_site"