neuron-0.6.0.0: src/app/Main.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE NoImplicitPrelude #-}
module Main where
import Control.Monad.Reader
import Development.Shake
import Main.Utf8
import Neuron.CLI (run)
import Neuron.Config.Type (Config)
import Neuron.Version (neuronVersion)
import Neuron.Web.Generate (generateSite)
import Neuron.Web.Generate.Route (staticRouteConfig)
import qualified Neuron.Web.Manifest as Manifest
import Neuron.Web.Route (Route (..), runNeuronWeb)
import Neuron.Web.View (renderRoutePage)
import Neuron.Zettelkasten.Graph.Type (ZettelGraph)
import Reflex.Dom.Core
import Relude
import qualified Rib
main :: IO ()
main = withUtf8 $ run generateMainSite
generateMainSite :: Config -> Action ()
generateMainSite config = do
notesDir <- Rib.ribInputDir
Rib.buildStaticFiles ["static/**", ".nojekyll"]
manifest <- fmap Manifest.mkManifest $ getDirectoryFiles notesDir Manifest.manifestPatterns
let writeHtmlRoute :: Route a -> (ZettelGraph, a) -> Action ()
writeHtmlRoute r x = do
html <- liftIO $ fmap snd $ renderStatic $ do
runNeuronWeb staticRouteConfig $
renderRoutePage neuronVersion config manifest r x
-- FIXME: Make rib take bytestrings
Rib.writeRoute r $ decodeUtf8 @Text html
void $ generateSite config writeHtmlRoute