Format site.hs with ormolu

This commit is contained in:
Dimitri Lozeve 2024-01-13 18:57:29 +01:00
parent 0c47bd7ad1
commit 0800c06188

83
site.hs
View file

@ -1,17 +1,15 @@
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE OverloadedStrings #-}
import qualified Data.Map as Map import qualified Data.Map as Map
import Data.Monoid (mappend) import Data.Monoid (mappend)
import Text.Pandoc
import Text.Pandoc.Options
import Text.Pandoc.Highlighting
import Text.Pandoc.SideNote
import Hakyll import Hakyll
import Hakyll.Core.Compiler.Internal (compilerProvider, compilerAsk) import Hakyll.Core.Compiler.Internal (compilerAsk, compilerProvider)
import Hakyll.Core.Provider (resourceFilePath) import Hakyll.Core.Provider (resourceFilePath)
import Text.Pandoc
import Text.Pandoc.Highlighting
import Text.Pandoc.Options
import Text.Pandoc.SideNote
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
main :: IO () main :: IO ()
@ -47,7 +45,8 @@ main = hakyll $ do
route idRoute route idRoute
compile $ do compile $ do
posts <- recentFirst =<< loadAll pattern posts <- recentFirst =<< loadAll pattern
let ctx = constField "title" title let ctx =
constField "title" title
<> listField "posts" (postCtxWithTags tags) (return posts) <> listField "posts" (postCtxWithTags tags) (return posts)
<> defaultContext <> defaultContext
@ -58,7 +57,8 @@ main = hakyll $ do
match "posts/*" $ do match "posts/*" $ do
route $ setExtension "html" route $ setExtension "html"
compile $ do compile $
do
underlying <- getUnderlying underlying <- getUnderlying
toc <- getMetadataField underlying "toc" toc <- getMetadataField underlying "toc"
customPandocCompiler (toc == Just "yes" || toc == Just "true") customPandocCompiler (toc == Just "yes" || toc == Just "true")
@ -70,7 +70,8 @@ main = hakyll $ do
match (fromList ["contact.org", "cv.org", "skills.org", "projects.org"]) $ do match (fromList ["contact.org", "cv.org", "skills.org", "projects.org"]) $ do
route $ setExtension "html" route $ setExtension "html"
compile $ customPandocCompiler False compile $
customPandocCompiler False
>>= return . fmap demoteHeaders >>= return . fmap demoteHeaders
>>= loadAndApplyTemplate "templates/post.html" postCtx >>= loadAndApplyTemplate "templates/post.html" postCtx
>>= loadAndApplyTemplate "templates/default.html" defaultContext >>= loadAndApplyTemplate "templates/default.html" defaultContext
@ -81,9 +82,9 @@ main = hakyll $ do
compile $ do compile $ do
posts <- recentFirst =<< loadAll "posts/*" posts <- recentFirst =<< loadAll "posts/*"
let archiveCtx = let archiveCtx =
listField "posts" postCtx (return posts) `mappend` listField "posts" postCtx (return posts)
constField "title" "Archives" `mappend` `mappend` constField "title" "Archives"
defaultContext `mappend` defaultContext
makeItem "" makeItem ""
>>= loadAndApplyTemplate "templates/archive.html" archiveCtx >>= loadAndApplyTemplate "templates/archive.html" archiveCtx
>>= loadAndApplyTemplate "templates/default.html" archiveCtx >>= loadAndApplyTemplate "templates/default.html" archiveCtx
@ -102,8 +103,8 @@ main = hakyll $ do
compile $ do compile $ do
posts <- fmap (take 10) $ recentFirst =<< loadAll "posts/*" posts <- fmap (take 10) $ recentFirst =<< loadAll "posts/*"
let indexCtx = let indexCtx =
listField "posts" postCtx (return posts) `mappend` listField "posts" postCtx (return posts)
defaultContext `mappend` defaultContext
getResourceBody getResourceBody
>>= applyAsTemplate indexCtx >>= applyAsTemplate indexCtx
>>= loadAndApplyTemplate "templates/default.html" indexCtx >>= loadAndApplyTemplate "templates/default.html" indexCtx
@ -111,22 +112,21 @@ main = hakyll $ do
match "templates/*" $ compile templateBodyCompiler match "templates/*" $ compile templateBodyCompiler
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
feedConfiguration :: FeedConfiguration feedConfiguration :: FeedConfiguration
feedConfiguration = feedConfiguration =
FeedConfiguration FeedConfiguration
{ feedTitle = "Dimitri Lozeve's Blog" { feedTitle = "Dimitri Lozeve's Blog",
, feedDescription = "Recent posts" feedDescription = "Recent posts",
, feedAuthorName = "Dimitri Lozeve" feedAuthorName = "Dimitri Lozeve",
, feedAuthorEmail = "dimitri+web@lozeve.com" feedAuthorEmail = "dimitri+web@lozeve.com",
, feedRoot = "https://www.lozeve.com" feedRoot = "https://www.lozeve.com"
} }
postCtx :: Context String postCtx :: Context String
postCtx = postCtx =
dateField "date" "%B %e, %Y" `mappend` dateField "date" "%B %e, %Y"
defaultContext `mappend` defaultContext
postCtxWithTags :: Tags -> Context String postCtxWithTags :: Tags -> Context String
postCtxWithTags tags = tagsField "tags" tags <> postCtx postCtxWithTags tags = tagsField "tags" tags <> postCtx
@ -140,33 +140,38 @@ customPandocCompiler withTOC =
let customExtensions = extensionsFromList [Ext_latex_macros] let customExtensions = extensionsFromList [Ext_latex_macros]
defaultExtensions = writerExtensions defaultHakyllWriterOptions defaultExtensions = writerExtensions defaultHakyllWriterOptions
newExtensions = defaultExtensions `mappend` customExtensions newExtensions = defaultExtensions `mappend` customExtensions
writerOptions = defaultHakyllWriterOptions writerOptions =
{ writerExtensions = newExtensions defaultHakyllWriterOptions
, writerHTMLMathMethod = MathJax "" { writerExtensions = newExtensions,
writerHTMLMathMethod = MathJax ""
} }
-- below copied from https://www.gwern.net/hakyll.hs -- below copied from https://www.gwern.net/hakyll.hs
-- below copied from https://github.com/jaspervdj/hakyll/blob/e8ed369edaae1808dffcc22d1c8fb1df7880e065/web/site.hs#L73 because god knows I don't know what this type bullshit is either: -- below copied from https://github.com/jaspervdj/hakyll/blob/e8ed369edaae1808dffcc22d1c8fb1df7880e065/web/site.hs#L73 because god knows I don't know what this type bullshit is either:
-- "When did it get so hard to compile a string to a Pandoc template?" -- "When did it get so hard to compile a string to a Pandoc template?"
tocTemplate = tocTemplate =
either error id $ either (error . show) id $ either error id $
runPure $ runWithDefaultPartials $ either (error . show) id $
runPure $
runWithDefaultPartials $
compileTemplate "" "<div id=\"toc\"><h1>Table of Contents</h1>$toc$</div>\n$body$" compileTemplate "" "<div id=\"toc\"><h1>Table of Contents</h1>$toc$</div>\n$body$"
writerOptionsWithTOC = writerOptions writerOptionsWithTOC =
{ writerTableOfContents = True writerOptions
, writerTOCDepth = 2 { writerTableOfContents = True,
, writerTemplate = Just tocTemplate--"<h1>Table of Contents</h1>$toc$\n$body$" writerTOCDepth = 2,
writerTemplate = Just tocTemplate -- "<h1>Table of Contents</h1>$toc$\n$body$"
} }
readerOptions = defaultHakyllReaderOptions readerOptions = defaultHakyllReaderOptions
in do in do
csl <- load $ fromFilePath "csl/chicago-author-date.csl" csl <- load $ fromFilePath "csl/chicago-author-date.csl"
bib <- load $ fromFilePath "bib/bibliography.bib" bib <- load $ fromFilePath "bib/bibliography.bib"
writePandocWith (if withTOC then writerOptionsWithTOC else writerOptions) <$> writePandocWith (if withTOC then writerOptionsWithTOC else writerOptions)
(getResourceBody >>= readPandocBiblio readerOptions csl bib >>= traverse (return . usingSideNotes)) <$> (getResourceBody >>= readPandocBiblio readerOptions csl bib >>= traverse (return . usingSideNotes))
type FeedRenderer = FeedConfiguration type FeedRenderer =
-> Context String FeedConfiguration ->
-> [Item String] Context String ->
-> Compiler (Item String) [Item String] ->
Compiler (Item String)
feedCompiler :: FeedRenderer -> Compiler (Item String) feedCompiler :: FeedRenderer -> Compiler (Item String)
feedCompiler renderer = feedCompiler renderer =