diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 6f65a3a..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,5 +0,0 @@ -# Revision history for her-esy-fun - -## 0.1.0.0 -- YYYY-mm-dd - -* First version. Released on an unsuspecting world. diff --git a/Shakefile.hs b/Shakefile.hs deleted file mode 120000 index 920a28d..0000000 --- a/Shakefile.hs +++ /dev/null @@ -1 +0,0 @@ -app/Shakefile.hs \ No newline at end of file diff --git a/TODO.org b/TODO.org deleted file mode 100644 index 9b3cb5d..0000000 --- a/TODO.org +++ /dev/null @@ -1,6 +0,0 @@ -#+TITLE: Project TODO - -* DONE Display size of current page (text + images) -CLOSED: [2020-02-23 Sun 00:18] - -* TODO Delete classes not present in both CSS and HTML diff --git a/app/Shakefile.hs b/app/Shakefile.hs deleted file mode 100644 index 3e486ec..0000000 --- a/app/Shakefile.hs +++ /dev/null @@ -1,502 +0,0 @@ -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE NoImplicitPrelude #-} - -import Protolude - -import Development.Shake -import Development.Shake.FilePath - -import Data.Time.Format.ISO8601 (iso8601Show) -import qualified Data.Time.Clock as Clock - -import Control.Monad.Fail -import Data.Aeson -import Data.Default ( Default(def) ) -import qualified Data.Text as T -import Text.Mustache -import Text.Pandoc.Class (PandocMonad) -import qualified Text.Pandoc.Class as Pandoc -import Text.Pandoc.Definition ( Pandoc(..) - , Block(..) - , Inline(..) - , MetaValue(..) - , nullMeta - , docTitle - , docDate - , docAuthors - , lookupMeta - ) -import Text.Pandoc.Options ( ReaderOptions(..) - , WriterOptions(..) - , ObfuscationMethod(..) - , HTMLMathMethod(..) - ) - -import qualified Text.Pandoc.Readers as Readers -import Text.Pandoc.Walk (Walkable(..)) -import qualified Text.Pandoc.Writers as Writers -import qualified Text.Pandoc.Templates as Templates - -main :: IO () -main = shakeArgs shOpts buildRules - where - shOpts = - shakeOptions - { shakeVerbosity = Chatty - , shakeLintInside = ["\\"] - } - --- Configuration --- Should probably go in a Reader Monad - -srcDir :: FilePath -srcDir = "src" - -siteDir :: FilePath -siteDir = "_site" - -optimDir :: FilePath -optimDir = "_optim" - --- BlogPost data structure (a bit of duplication because the metas are in Pandoc) - -data BlogPost = - BlogPost { postTitle :: T.Text - , postDate :: T.Text - , postAuthor :: T.Text - , postUrl :: FilePath - , postSrc :: FilePath - , postTags :: [T.Text] - , postDescr :: T.Text - , postToc :: Bool - , postBody :: Pandoc - } - -inlineToText :: PandocMonad m => [Inline] -> m T.Text -inlineToText inline = - Writers.writeAsciiDoc def (Pandoc nullMeta [Plain inline]) - -reformatDate :: Text -> Text -reformatDate = T.takeWhile (/= ' ') . (T.dropAround dateEnvelope) - where - dateEnvelope ' ' = True - dateEnvelope '\n' = True - dateEnvelope '\t' = True - dateEnvelope '[' = True - dateEnvelope ']' = True - dateEnvelope _ = False - -getBlogpostFromMetas - :: (MonadIO m, MonadFail m) => [Char] -> Bool -> Pandoc -> m BlogPost -getBlogpostFromMetas path toc pandoc@(Pandoc meta _) = do - eitherBlogpost <- liftIO $ Pandoc.runIO $ do - title <- fmap (T.dropEnd 1) $ inlineToText $ docTitle meta - date <- fmap reformatDate $ inlineToText $ docDate meta - author <- case head $ docAuthors meta of - Just m -> fmap T.strip $ inlineToText m - Nothing -> return "" - let tags = tagsToList $ lookupMeta "keywords" meta - description = descr $ lookupMeta "description" meta - url = "/" dropDirectory1 path -<.> "org" - return $ BlogPost title date author url path tags description toc pandoc - case eitherBlogpost of - Left _ -> fail "BAD" - Right bp -> return bp - where - tagsToList (Just (MetaList ms)) = map toStr ms - tagsToList _ = [] - descr (Just (MetaString t)) = t - descr _ = "" - toStr (MetaString t) = t - toStr (MetaInlines inlines) = T.intercalate " " $ map inlineToTxt inlines - toStr _ = "" - inlineToTxt (Str t) = t - inlineToTxt _ = "" - -sortByPostDate :: [BlogPost] -> [BlogPost] -sortByPostDate = - sortBy (\a b-> compare (postDate b) (postDate a)) - -build :: FilePath -> FilePath -build = () siteDir - -genAllDeps :: [FilePattern] -> Action [FilePath] -genAllDeps patterns = do - allMatchedFiles <- getDirectoryFiles srcDir patterns - allMatchedFiles & - filter ((/= "html") . takeExtension) & - filter (null . takeExtension) & - map (siteDir ) & - return - -buildRules :: Rules () -buildRules = do - cleanRule - fastRule - allRule - fullRule - getPost <- mkGetPost - getPosts <- mkGetPosts getPost - getTemplate <- mkGetTemplate - build "**" %> \out -> do - let asset = dropDirectory1 out - case (takeExtension asset) of - ".html" -> do - if out == siteDir "index.html" - then buildArchive getPosts getTemplate out - else do - htmlExists <- doesFileExist (srcDir asset) - if htmlExists - then copyFileChanged (srcDir asset) out - else genHtmlAction getPost getTemplate out - ".pdf" -> do - txtExists <- doesFileExist (srcDir asset) - if txtExists - then copyFileChanged (srcDir asset) out - else genPdfAction getPost out - ".gmi" -> do - fileExists <- doesFileExist (srcDir asset) - if fileExists - then copyFileChanged (srcDir asset) out - else if out == siteDir "index.gmi" - then buildGeminiArchive getPosts out - else genGeminiAction out - ".jpg" -> compressImage asset - ".jpeg" -> compressImage asset - ".gif" -> compressImage asset - ".png" -> compressImage asset - _ -> copyFileChanged (srcDir asset) out - optimDir "rss.xml" %> \_ -> do - needAll - command_[] "engine/pre-deploy.sh" [] - -welcomeTxt :: Text -welcomeTxt = toS $ T.intercalate "\n" $ - [ "Welcome to my small place on the Internet." - ] - -buildArchive - :: (() -> Action [BlogPost]) - -> (FilePath -> Action Template) -> [Char] -> Action () -buildArchive getPosts getTemplate out = do - css <- genAllDeps ["//*.css"] - posts <- fmap sortByPostDate $ getPosts () - need $ css <> map postSrc posts - let - title :: Text - title = "#+title: Yann Esposito's blog" - menu = "@@html:Home | Slides | About@@" - articleList = toS $ T.intercalate "\n" $ map postInfo posts - olderArchives = "---\n\n@@html:Older Archives from my previous blog@@" - fileContent = title <> "\n\n" <> menu <> "\n\n" <> welcomeTxt <> "\n\n" <> articleList <> olderArchives - eitherResult <- liftIO $ Pandoc.runIO $ Readers.readOrg (def { readerStandalone = True }) (toS fileContent) - bp <- case eitherResult of - Left _ -> fail "BAD" - Right pandoc -> getBlogpostFromMetas out False pandoc - innerHtml <- genHtml bp - template <- getTemplate ("templates" "main.mustache") - let htmlContent = - renderMustache template - $ object [ "title" .= postTitle bp - , "author" .= postAuthor bp - , "date" .= postDate bp - , "tags" .= postTags bp - , "description" .= postDescr bp - , "body" .= innerHtml - ] - writeFile' out (toS htmlContent) - -geminiMenu :: Text -geminiMenu = T.intercalate "\n" - [ "=> /index.gmi Home" - , "=> /gem-atom.xml Feed" - , "=> /slides.gmi Slides" - , "=> /about-me.gmi About me" - ] - -buildGeminiArchive - :: (() -> Action [BlogPost]) - -> [Char] -> Action () -buildGeminiArchive getPosts out = do - posts <- fmap sortByPostDate $ getPosts () - need $ map postSrc posts - let - title :: Text - title = "# Yann Esposito's posts" - articleList = toS $ T.intercalate "\n" $ map postGeminiInfo posts - fileContent = title - <> "\n\n" <> welcomeTxt - <> "\n\n" <> geminiMenu - <> "\n\n" <> "## Articles" - <> "\n\n" <> articleList - writeFile' out (toS fileContent) - -postGeminiInfo :: BlogPost -> Text -postGeminiInfo bp = - "=> " <> (toS (postUrl bp -<.> ".gmi")) <> " " <> date <> ": " <> (postTitle bp) - where - date = T.takeWhile (/= ' ') (postDate bp) - -postInfo :: BlogPost -> Text -postInfo bp = - "| " <> date <> " | " <> orglink <> " |" - where - date = T.takeWhile (/= ' ') (postDate bp) - orglink = "[[file:" <> (toS (postUrl bp)) <> "][" <> (postTitle bp) <> "]]" - -replaceLinks :: Pandoc -> Pandoc -replaceLinks = walk replaceOrgLink - where - replaceOrgLink :: Inline -> Inline - replaceOrgLink lnk@(Link attr inl (url,txt)) = - if takeExtension (toS url) == ".org" - then Link attr inl ((toS (toS url -<.> ".html")),txt) - else lnk - replaceOrgLink x = x - -orgContentToText :: (MonadIO m, MonadFail m) => Text -> m Text -orgContentToText org = do - eitherResult <- liftIO $ Pandoc.runIO $ Readers.readOrg (def { readerStandalone = True }) org - pandoc <- case eitherResult of - Left _ -> fail "BAD" - Right p -> return p - eitherHtml <- liftIO $ Pandoc.runIO $ - Writers.writeHtml5String (def {writerEmailObfuscation = ReferenceObfuscation}) pandoc - case eitherHtml of - Left _ -> fail "BAD" - Right innerHtml -> return innerHtml - -postamble :: (MonadIO m, MonadFail m) => Text -> BlogPost -> m Text -postamble now bp = - orgContentToText $ unlines $ - [ "@@html:@@" - ] - -tpltxt :: Text -tpltxt = T.unlines [ - "$if(toc)$" - , "" - , "$endif$" - , "$body$" - ] - -getPostTpl :: IO (Templates.Template Text) -getPostTpl = do - etpl <- Templates.compileTemplate "blog.template" tpltxt - case etpl of - Left e -> fail e - Right tpl -> return tpl - -genHtml :: (MonadIO m, MonadFail m) => BlogPost -> m Text -genHtml bp = do - let htmlBody = replaceLinks (postBody bp) - eitherHtml <- liftIO $ do - tpl <- getPostTpl - Pandoc.runIO $ do - Writers.writeHtml5String - (def { writerTableOfContents = postToc bp - , writerTemplate = Just tpl - , writerTOCDepth = 3 - , writerEmailObfuscation = ReferenceObfuscation - , writerHTMLMathMethod = MathML - }) - htmlBody - body <- case eitherHtml of - Left _ -> fail "BAD" - Right innerHtml -> return innerHtml - now <- liftIO Clock.getCurrentTime - footer <- postamble (toS (iso8601Show now)) bp - return (body <> footer) - -origin :: Text -origin = "https://her.esy.fun" - -geminiOrigin :: Text -geminiOrigin = "gemini://her.esy.fun" - -genHtmlAction - :: (FilePath -> Action BlogPost) - -> (FilePath -> Action Template) -> [Char] -> Action () -genHtmlAction getPost getTemplate out = do - let tplname = case takeDirectory1 (dropDirectory1 out) of - "posts" -> "post.mustache" - "slides" -> "slide.mustache" - "drafts" -> "post.mustache" - _ -> "main.mustache" - let templateFile = "templates" tplname - template <- getTemplate templateFile - let srcFile = srcDir (dropDirectory1 (out -<.> "org")) - liftIO $ putText $ "need: " <> (toS srcFile) <> " -> " <> (toS out) - need [srcFile,templateFile,"templates" "menu.mustache","Shakefile.hs"] - bp <- getPost srcFile - innerHtml <- genHtml bp - let htmlContent = - renderMustache template - $ object [ "title" .= postTitle bp - , "author" .= postAuthor bp - , "date" .= postDate bp - , "tags" .= postTags bp - , "description" .= postDescr bp - , "body" .= innerHtml - , "orgsource" .= T.pack (postUrl bp -<.> "org") - , "txtsource" .= T.pack (postUrl bp -<.> "gmi") - , "geminiurl" .= T.pack (toS geminiOrigin <> postUrl bp -<.> "gmi") - , "pdf" .= T.pack (postUrl bp -<.> "pdf") - , "permalink" .= T.pack (toS origin <> postUrl bp -<.> "html") - ] - writeFile' out (toS htmlContent) - -genPdfAction :: p -> [Char] -> Action () -genPdfAction _getPost out = do - let srcFile = srcDir (dropDirectory1 (out -<.> "org")) - need [srcFile,"Shakefile.hs"] - command_ [] "pandoc" - ["--pdf-engine=xelatex" - , "--resource-path=" <> takeDirectory srcFile - , srcFile - , "-H", "engine" "deeplist.tex" - , "-V", "mainfont:CMU Serif" - , "-V", "mainfontoptions:Renderer=OpenType, Mapping=tex-text, ItalicFeatures={Alternate = 0}, Ligatures={Common,Rare,Historic,Contextual},Contextuals=Inner,Alternate=1" - , "-V", "monofont:Menlo" - , "-V", "monofontoptions:Scale=0.7" - , "-o", out ] - - --- genGemini :: (MonadIO m, MonadFail m) => BlogPost -> m Text --- genGemini bp = do --- eitherMd <- liftIO $ Pandoc.runIO $ Writers.writeMarkdown def (postBody bp) --- case eitherMd of --- Left _ -> fail "BAD" --- Right innerMd -> return innerMd - -genGeminiAction :: [Char] -> Action () -genGeminiAction out = do - let srcFile = srcDir (dropDirectory1 (out -<.> "org")) - need [srcFile] - command_ [] "./engine/org2gemini.sh" [ srcFile, out ] - -allHtmlAction :: Action () -allHtmlAction = do - allOrgFiles <- getDirectoryFiles srcDir ["//*.org"] - let allHtmlFiles = map (-<.> "html") allOrgFiles - need (map build allHtmlFiles) - -allPdfAction :: Action () -allPdfAction = do - allOrgFiles <- getDirectoryFiles srcDir ["//*.org"] - let allHtmlFiles = map (-<.> "pdf") allOrgFiles - need (map build allHtmlFiles) - - -allGeminiAction :: Action () -allGeminiAction = do - allOrgFiles <- getDirectoryFiles srcDir ["//*.org"] - let allGeminiFiles = map (-<.> "gmi") allOrgFiles - need (map build $ allGeminiFiles <> ["index.gmi"]) - -compressImage :: FilePath -> Action () -compressImage img = do - let src = srcDir img - dst = siteDir img - need [src] - let dir = takeDirectory dst - dirExists <- doesDirectoryExist dir - when (not dirExists) $ - command [] "mkdir" ["-p", dir] - command_ [] "convert" [ src - , "-strip" - , "-resize","960x960>" - , "-interlace","Plane" - , "-quality","85" - , "-define","filter:blur=0.75" - , "-filter","Gaussian" - -- , "-ordered-dither","o4x4,4" - , dst ] - - -needFast :: Action () -needFast = do - allAssets <- filter (/= ".DS_Store") <$> getDirectoryFiles srcDir ["**"] - need (map build $ allAssets <> ["index.html"]) - allHtmlAction - allGeminiAction - -fastRule :: Rules () -fastRule = - withTargetDocs "generate html" $ - phony "fast" $ - needFast - -needAll :: Action () -needAll = do - needFast - allPdfAction - allGeminiAction - -allRule :: Rules () -allRule = - withTargetDocs "generate all, no optim" $ - phony "all" $ - needAll - -fullRule :: Rules () -fullRule = - withTargetDocs "generate all and optim" $ - phony "full" $ - need [optimDir "rss.xml"] - -cleanRule :: Rules () -cleanRule = - phony "clean" $ do - putInfo "Cleaning files in _site and _optim" - forM_ [siteDir,optimDir] $ flip removeFilesAfter ["**"] - -mkGetTemplate :: Rules (FilePath -> Action Template) -mkGetTemplate = newCache $ \path -> do - fileContent <- readFile' path - header <- readFile' ("templates" "header.mustache") - menu <- readFile' ("templates" "menu.mustache") - let withIncludes = fileContent & toS & T.replace "{{>header}}" (toS header) & T.replace "{{>menu}}" (toS menu) - res = compileMustacheText "page" (toS withIncludes) - case res of - Left _ -> fail "BAD" - Right template -> return template - -tocRequested :: Text -> Bool -tocRequested fc = - let toc = fc & T.lines - & map T.toLower - & filter (T.isPrefixOf (T.pack "#+options: ")) - & head - & fmap (filter (T.isPrefixOf (T.pack "toc:")) . T.words) - in toc == Just ["toc:t"] - -mkGetPost :: Rules (FilePath -> Action BlogPost) -mkGetPost = newCache $ \path -> do - fileContent <- readFile' path - let toc = tocRequested (toS fileContent) - eitherResult <- liftIO $ Pandoc.runIO $ Readers.readOrg (def { readerStandalone = True }) (toS fileContent) - case eitherResult of - Left _ -> fail "BAD" - Right pandoc -> getBlogpostFromMetas path toc pandoc - -mkGetPosts :: (FilePath -> Action b) -> Rules (() -> Action [b]) -mkGetPosts getPost = - newCache $ \() -> mapM getPost =<< getDirectoryFiles "" ["src/posts//*.org"] diff --git a/build.sh b/build.sh deleted file mode 100755 index d8bf929..0000000 --- a/build.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -# mkdir -p _shake -# ghc --make app/Shakefile.hs -rtsopts -threaded -with-rtsopts=-I0 -outputdir=_shake -o _shake/build && _shake/build "$@" - -# cabal v2-run -- her-esy-fun "$@" - -runghc app/Shakefile.hs "$@" diff --git a/engine/auto-build.sh b/engine/auto-build.sh index 2839e37..6c9f4e6 100755 --- a/engine/auto-build.sh +++ b/engine/auto-build.sh @@ -5,5 +5,5 @@ echo "Watching $PWD/{src,templates}" # fswatch --exclude='\\.#' src | while read event; do fswatch --exclude='^.*\.#.*$' src templates | while read event; do echo "$event" - ./engine/build.sh fast + make done diff --git a/engine/build.sh b/engine/build.sh index 0bc2c8f..f18811f 100755 --- a/engine/build.sh +++ b/engine/build.sh @@ -1,6 +1,4 @@ -#!/bin/sh +#!/bin/zsh -# mkdir -p _shake -# ghc --make app/Shakefile.hs -rtsopts -threaded -with-rtsopts=-I0 -outputdir=_shake -o _shake/build && _shake/build "$@" - -cabal v2-run -- her-esy-fun "$@" +cd "$(git rev-parse --show-toplevel)" || exit 1 +make diff --git a/engine/clean.sh b/engine/clean.sh deleted file mode 100755 index aa9ae47..0000000 --- a/engine/clean.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash - -cd "$(git rev-parse --show-toplevel)" || exit 1 -echo -n "* Clean site cache" -find _site -mindepth 1 -not -path "_site/.gitignore" -delete -find _full -mindepth 1 -not -path "_full/.gitignore" -delete -find _optim -mindepth 1 -not -path "_optim/.gitignore" -delete -rm -rf _cache -echo " [done]" diff --git a/engine/deeplist.tex b/engine/deeplist.tex deleted file mode 100644 index 3776db4..0000000 --- a/engine/deeplist.tex +++ /dev/null @@ -1,24 +0,0 @@ -\usepackage{enumitem} -\setlistdepth{9} - -\setlist[itemize,1]{label=$\bullet$} -\setlist[itemize,2]{label=$\bullet$} -\setlist[itemize,3]{label=$\bullet$} -\setlist[itemize,4]{label=$\bullet$} -\setlist[itemize,5]{label=$\bullet$} -\setlist[itemize,6]{label=$\bullet$} -\setlist[itemize,7]{label=$\bullet$} -\setlist[itemize,8]{label=$\bullet$} -\setlist[itemize,9]{label=$\bullet$} -\renewlist{itemize}{itemize}{9} - -\setlist[enumerate,1]{label=$\arabic*.$} -\setlist[enumerate,2]{label=$\alph*.$} -\setlist[enumerate,3]{label=$\roman*.$} -\setlist[enumerate,4]{label=$\arabic*.$} -\setlist[enumerate,5]{label=$\alpha*$} -\setlist[enumerate,6]{label=$\roman*.$} -\setlist[enumerate,7]{label=$\arabic*.$} -\setlist[enumerate,8]{label=$\alph*.$} -\setlist[enumerate,9]{label=$\roman*.$} -\renewlist{enumerate}{enumerate}{9} diff --git a/engine/deploy.sh b/engine/deploy.sh deleted file mode 100755 index 8734ede..0000000 --- a/engine/deploy.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env zsh - -set -e # fail on first error -set -u # fail if a variable is not set - -cd "$(git rev-parse --show-toplevel)" || exit 1 -rootdir="${0:h}" -echo "$rootdir" - -./engine/build.sh full -./engine/sync.sh diff --git a/engine/dev.sh b/engine/dev.sh deleted file mode 100755 index 0ca5cd1..0000000 --- a/engine/dev.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env zsh -cd "$(git rev-parse --show-toplevel)" || exit 1 -tmux \ - new-session './engine/auto-build.sh' \; \ - split-window './engine/serve.sh' \; \ - split-window 'lorri watch' \; \ - select-layout even-vertical diff --git a/engine/draft-build.sh b/engine/draft-build.sh deleted file mode 100755 index e4e79e5..0000000 --- a/engine/draft-build.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash - -cd "$(git rev-parse --show-toplevel)" || exit 1 -echo "* org-publish" -emacs -nw \ - --load project.el \ - --eval "(progn (org-publish \"draft\") (evil-quit))" - -echo "* org-publish [done]" diff --git a/engine/dup-for-themes.sh b/engine/dup-for-themes.sh deleted file mode 100755 index f9d8c65..0000000 --- a/engine/dup-for-themes.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env zsh - -cd "$(git rev-parse --show-toplevel)" || exit 1 - -webdir="_site" - -debug () { - print -- "$@" >/dev/null -} - -if (($#>0)); then - filelist=( $* ) -else - filelist=( $webdir/**/*.html(.) ) -fi - -trans(){ - local suff=$1; - local fic=$2; - cat $fic | perl -p -e 's#href="?/css/mk.css"?#href=/css/'$suff'.css#;s#(/?(index|archive|slides|about-me)).html#$1-'$suff'.html#g;s#(posts/[a-zA-Z0-9_-]*).html#$1-'$suff'.html#g;s#-'$suff'.html>mk#.html>mk#g' > ${fic:r}-${suff}.html -} - -print -- "Duplicate HTML by themes" -for fic in $filelist; do - if echo $fic|grep -E -- '-(mk|min|sci|modern).html$'>/dev/null; then - continue - fi - print -n -- "$fic " - for suff in sci min modern; do - trans $suff $fic - done - print "[OK]" -done -print "Duplicate HTML by theme [done]" diff --git a/her-esy-fun.cabal b/her-esy-fun.cabal deleted file mode 100644 index 3542435..0000000 --- a/her-esy-fun.cabal +++ /dev/null @@ -1,43 +0,0 @@ -cabal-version: 2.4 -name: her-esy-fun -version: 0.1.0.0 - --- A short (one-line) description of the package. --- synopsis: - --- A longer description of the package. --- description: - --- A URL where users can report bugs. --- bug-reports: - --- The license under which the package is released. --- license: -author: Yann Esposito (Yogsototh) -maintainer: yann.esposito@gmail.com - --- A copyright notice. --- copyright: --- category: -extra-source-files: CHANGELOG.md - -executable her-esy-fun - main-is: Shakefile.hs - - -- Modules included in this executable, other than Main. - -- other-modules: - - -- LANGUAGE extensions used by modules in this package. - -- other-extensions: - build-depends: base ^>=4.14.1.0 - , aeson - , pandoc - , pandoc-types - , shake - , data-default - , protolude - , stache - , text - , time - hs-source-dirs: app - default-language: Haskell2010 diff --git a/shell.nix b/shell.nix index beb48e3..66631e5 100644 --- a/shell.nix +++ b/shell.nix @@ -1,14 +1,8 @@ let sources = import ./nix/sources.nix; pkgs = import sources.nixpkgs {}; - pkgs1909 = import (fetchTarball https://github.com/NixOS/nixpkgs/archive/19.09.tar.gz) {}; haskellDeps = ps : with ps; [ - shake - pandoc - data-default protolude - pkgs1909.haskellPackages.sws - stache turtle ansi-terminal ]; @@ -28,9 +22,9 @@ pkgs.mkShell { git direnv ghc - haskellPackages.shake tmux # for emacs dev ripgrep + nodePackages.http-server ]; } diff --git a/templates/header.mustache b/templates/header.mustache deleted file mode 100644 index 242b746..0000000 --- a/templates/header.mustache +++ /dev/null @@ -1,24 +0,0 @@ - - - - -
-
-   - /  -   -   -   - /  - -
-
diff --git a/templates/main.mustache b/templates/main.mustache deleted file mode 100644 index 1ca6409..0000000 --- a/templates/main.mustache +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - {{title}} - - - - - - - - - {{>header}} -
-
-

{{title}}

-
-
- {{{ body }}} -
-
-
- {{>menu}} -
-
-
- - diff --git a/templates/menu.mustache b/templates/menu.mustache deleted file mode 100644 index 40df8d8..0000000 --- a/templates/menu.mustache +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/templates/post.mustache b/templates/post.mustache deleted file mode 100644 index c9c42b8..0000000 --- a/templates/post.mustache +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - $title$ - - - - - - - - - {{>header}} -
-
-
-

{{title}}

-
- on - - $author$'s blog - - source - - gmi - - pdf - - -
-
- $description$ -
-
-
-
- $body$ -
- => This article is also available on gemini -
-
-
- {{>menu}} -
-
-
- - diff --git a/templates/slide.mustache b/templates/slide.mustache deleted file mode 100644 index 3c9b354..0000000 --- a/templates/slide.mustache +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - {{title}} - - - - - - - - {{>header}} -
-
-
-

{{title}}

-
- on - - {{author}}'s blog - - source - - txt - - pdf - - -
-
- {{description}} -
-
-
-
- {{{body}}} -
- => This article is also available on gemini -
-
-
- {{>menu}} -
-
-
- -