diff --git a/Shakefile.hs b/Shakefile.hs new file mode 100644 index 0000000..34d03af --- /dev/null +++ b/Shakefile.hs @@ -0,0 +1,38 @@ +import Development.Shake +import Development.Shake.Command +import Development.Shake.FilePath +import Development.Shake.Util + +main :: IO () +main = do + let shOpts = shakeOptions { shakeVerbosity = Chatty, shakeLintInside = ["\\"] } + shakeArgsForward shOpts buildRules + +buildRules :: Action () +buildRules = do + allPosts <- buildPosts + buildIndex allPosts + buildFeed allPosts + copyStaticFiles + +-- | Find and build all posts +buildPosts :: Action [Post] +buildPosts = do + pPaths <- getDirectoryFiles "." ["site/posts//*.md"] + forP pPaths buildPost + +-- | Load a post, process metadata, write it to output, then return the post object +-- Detects changes to either post content or template +buildPost :: FilePath -> Action Post +buildPost srcPath = cacheAction ("build" :: T.Text, srcPath) $ do + liftIO . putStrLn $ "Rebuilding post: " <> srcPath + postContent <- readFile' srcPath + -- load post content and metadata as JSON blob + postData <- markdownToHTML . T.pack $ postContent + let postUrl = T.pack . dropDirectory1 $ srcPath -<.> "html" + withPostUrl = _Object . at "url" ?~ String postUrl + -- Add additional metadata we've been able to compute + let fullPostData = withSiteMeta . withPostUrl $ postData + template <- compileTemplate' "site/templates/post.html" + writeFile' (outputFolder T.unpack postUrl) . T.unpack $ substitute template fullPostData + convert fullPostData diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..71b68d1 --- /dev/null +++ b/build.sh @@ -0,0 +1,3 @@ +#!/bin/sh +mkdir -p _shake +ghc --make Shakefile.hs -rtsopts -threaded -with-rtsopts=-I0 -outputdir=_shake -o _shake/build && _shake/build "$@" diff --git a/engine/compresscss.sh b/engine/compresscss.sh index 763a779..00094c1 100755 --- a/engine/compresscss.sh +++ b/engine/compresscss.sh @@ -1,8 +1,3 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i bash -#!nix-shell -I nixpkgs="https://github.com/NixOS/nixpkgs/archive/19.09.tar.gz" -#!nix-shell -p minify - -# nix-shell -p nodePackages.clean-css +#!/usr/bin/env bash minify "$1" > "$2" diff --git a/engine/dup-for-themes.sh b/engine/dup-for-themes.sh index ae10842..f9d8c65 100755 --- a/engine/dup-for-themes.sh +++ b/engine/dup-for-themes.sh @@ -1,6 +1,4 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i zsh -#!nix-shell -I nixpkgs="https://github.com/NixOS/nixpkgs/archive/19.09.tar.gz" +#!/usr/bin/env zsh cd "$(git rev-parse --show-toplevel)" || exit 1 diff --git a/engine/mkrss.sh b/engine/mkrss.sh index 77f804e..f964ee5 100755 --- a/engine/mkrss.sh +++ b/engine/mkrss.sh @@ -1,6 +1,4 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i zsh -#!nix-shell -I nixpkgs="https://github.com/NixOS/nixpkgs/archive/19.09.tar.gz" +#!/usr/bin/env zsh cd "$(git rev-parse --show-toplevel)" || exit 1 # Directory diff --git a/engine/optim-classes.sh b/engine/optim-classes.sh index 9f78d68..2b5d0e7 100755 --- a/engine/optim-classes.sh +++ b/engine/optim-classes.sh @@ -1,6 +1,4 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i zsh -#!nix-shell -I nixpkgs="https://github.com/NixOS/nixpkgs/archive/19.09.tar.gz" +#!/usr/bin/env zsh cd "$(git rev-parse --show-toplevel)" || exit 1 webdir="_optim" diff --git a/engine/optim-html.sh b/engine/optim-html.sh index baf1495..619f5f4 100755 --- a/engine/optim-html.sh +++ b/engine/optim-html.sh @@ -1,6 +1,4 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i zsh -#!nix-shell -I nixpkgs="https://github.com/NixOS/nixpkgs/archive/19.09.tar.gz" +#!/usr/bin/env zsh cd "$(git rev-parse --show-toplevel)" || exit 1 webdir="_optim" diff --git a/engine/shell.nix b/engine/shell.nix deleted file mode 100644 index 0eab84d..0000000 --- a/engine/shell.nix +++ /dev/null @@ -1,11 +0,0 @@ -# { pkgs ? import {} }: -{ pkgs ? import (fetchTarball https://github.com/NixOS/nixpkgs/archive/19.09.tar.gz) {} }: - pkgs.mkShell { - buildInputs = [ pkgs.coreutils - pkgs.html-xml-utils - pkgs.zsh - pkgs.perl - pkgs.perlPackages.URI - pkgs.minify - ]; - } diff --git a/engine/update-file-size.sh b/engine/update-file-size.sh index 341ea88..9e70862 100755 --- a/engine/update-file-size.sh +++ b/engine/update-file-size.sh @@ -1,6 +1,4 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i zsh -#!nix-shell -I nixpkgs="https://github.com/NixOS/nixpkgs/archive/19.09.tar.gz" +#!/usr/bin/env zsh cd "$(git rev-parse --show-toplevel)" || exit 1 webdir="_optim" diff --git a/project.el b/project.el index 2db93e5..15ce804 100644 --- a/project.el +++ b/project.el @@ -284,7 +284,7 @@ " %s" ;; source " -sampling-factor 4:2:0" " -strip" - " -resize 200x200\\>" + " -resize 300x300\\>" " -interlace Plane" " -quality 85" " -define filter:blur=0.75" diff --git a/shell.nix b/shell.nix index fad7781..59add58 100644 --- a/shell.nix +++ b/shell.nix @@ -1,15 +1,23 @@ -# { pkgs ? import {} }: -{ pkgs ? import (fetchTarball https://github.com/NixOS/nixpkgs/archive/19.09.tar.gz) {} }: - let my_aspell = pkgs.aspellWithDicts(p: with p; [en fr]); - in - pkgs.mkShell { - buildInputs = [ pkgs.coreutils - pkgs.html-xml-utils - pkgs.zsh - pkgs.perl - pkgs.perlPackages.URI - pkgs.minify - pkgs.haskellPackages.sws - pkgs.cacert - ]; +{ pkgs ? import (fetchTarball https://github.com/NixOS/nixpkgs/archive/20.03.tar.gz) {} }: +let + haskellDeps = ps : with ps; [ + shake + ]; + pkgs1909 = import (fetchTarball https://github.com/NixOS/nixpkgs/archive/19.09.tar.gz) {}; + ghc = pkgs.haskellPackages.ghcWithPackages haskellDeps; +in +pkgs.mkShell { + buildInputs = with pkgs; + [cacert + coreutils + html-xml-utils + zsh + perl + perlPackages.URI + minify + niv + ghc + pkgs1909.haskellPackages.sws + haskellPackages.shake + ]; }