documents: init

add cv the way jasper does it

Signed-off-by: Amneesh Singh <natto@weirdnatto.in>
This commit is contained in:
2023-01-07 10:25:53 +05:30
parent 002469acde
commit 849861bae2
13 changed files with 154 additions and 5 deletions

View File

@@ -7,8 +7,10 @@ cabal-version: >= 1.10
executable site
main-is: site.hs
build-depends: base == 4.*
, filepath == 1.4.*
, hakyll == 4.15.*
, pandoc == 2.*
, process == 1.6.*
, text == 1.*
ghc-options: -threaded -rtsopts -with-rtsopts=-N
default-language: Haskell2010

View File

@@ -6,14 +6,26 @@ import Data.Maybe (isJust)
import Data.Text (Text)
import qualified Data.Text as T
import Hakyll
import Text.Pandoc (WriterOptions (writerHighlightStyle, writerNumberSections, writerTOCDepth, writerTableOfContents, writerTemplate))
import System.FilePath (replaceDirectory, replaceExtension, takeDirectory)
import qualified System.Process as Process
import Text.Pandoc
( WriterOptions
( writerHighlightStyle,
writerNumberSections,
writerTOCDepth,
writerTableOfContents,
writerTemplate
),
)
import qualified Text.Pandoc as Pandoc
import Text.Pandoc.Templates (Template, compileTemplate)
--------------------------------------------------------------------------------
main :: IO ()
main = hakyllWith config $ do
let individualPatterns = fromList ["about.org", "contact.org", "links.org"]
let individualPatterns = fromList ["about.org", "contact.org", "links.org", "documents/cv.org"]
let copyPatterns = fromList ["images/**", "fonts/*", "documents/*"]
match "images/**" $ do
route idRoute
@@ -27,6 +39,9 @@ main = hakyllWith config $ do
route idRoute
compile compressCssCompiler
match "*pdf" $ do
route idRoute
match individualPatterns $ do
route $ setExtension "html"
compile $
@@ -34,6 +49,18 @@ main = hakyllWith config $ do
>>= loadAndApplyTemplate "templates/default.html" defaultCtx
>>= relativizeUrls
-- kindly stolen from https://github.com/jaspervdj/jaspervdj/blob/b2a9a34cd2195c6e216b922e152c42266dded99d/src/Main.hs#L163-L169
-- also see helper functions writeXetex and xelatex
match "documents/cv.org" $
version "pdf" $ do
route $ setExtension "pdf"
compile $
getResourceBody
>>= readPandoc
>>= writeXeTex
>>= loadAndApplyTemplate "templates/cv.tex" defaultCtx
>>= xelatex
tags <- buildTags "posts/*" (fromCapture "archive/tags/*.html")
tagsRules tags $ \tag pattern -> do
@@ -139,6 +166,39 @@ main = hakyllWith config $ do
>>= loadAndApplyTemplate "templates/sitemap.xml" sitemapCtx
match "templates/*" $ compile templateBodyCompiler
where
-- https://github.com/jaspervdj/jaspervdj/blob/b2a9a34cd2195c6e216b922e152c42266dded99d/src/Main.hs#L214-L218
writeXeTex :: Item Pandoc.Pandoc -> Compiler (Item String)
writeXeTex = traverse $ \pandoc ->
case Pandoc.runPure (Pandoc.writeLaTeX Pandoc.def pandoc) of
Left err -> fail $ show err
Right x -> return (T.unpack x)
-- https://github.com/jaspervdj/jaspervdj/blob/b2a9a34cd2195c6e216b922e152c42266dded99d/src/Main.hs#L280-L292
-- but even more hacky
xelatex :: Item String -> Compiler (Item TmpFile)
xelatex item = do
TmpFile texPath <- newTmpFile "xelatex.tex"
let tmpDir = takeDirectory texPath
pdfPath = replaceExtension texPath "pdf"
unsafeCompiler $ do
writeFile texPath $ itemBody item
let x = itemBody item
_ <-
Process.system $
unwords
[ "xelatex",
"-halt-on-error",
"-output-directory",
tmpDir,
texPath,
">/dev/null",
"2>&1"
]
return ()
makeItem $ TmpFile pdfPath
rssFeedConfiguration :: FeedConfiguration
rssFeedConfiguration =
@@ -189,7 +249,7 @@ defaultCtx =
domainCtx :: Context String
domainCtx = constField "domain" domain
subdomains :: [Item String]
subdomains = map mkItem ["git", "nomad", "consul", "vault", "radio", "f", "ci"]
subdomains = map mkItem ["git", "nomad", "consul", "vault", "radio", "f"]
where
mkItem :: a -> Item a
mkItem a = Item {itemIdentifier = "subdomain", itemBody = a}