thoughts/flake.nix
Tommy Skaug 5e04fec993
All checks were successful
Export / Explore-GitHub-Actions (push) Successful in 36s
chore: move scripts to flake.nix and styling updates for dark mode and more
2024-08-06 13:31:05 +02:00

131 lines
No EOL
4.2 KiB
Nix
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
description = "cl-yag static site generator";
inputs = {
cl-nix-lite.url = "github:hraban/cl-nix-lite";
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = {
self, nixpkgs, cl-nix-lite, flake-utils
}:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system}.extend cl-nix-lite.overlays.default;
mm-sh = pkgs.writeShellScriptBin "mm-sh" ''
#!/bin/sh
cat $2 |perl -0pe 's/\[\^(.*?)\]\:(.*?)(\n\n)/\<span class="marginnote"\>\2\<\/span\>/gms' > $1.tmp
# perl -0pe 's/\[\^(.*?)\][^:]/\<label for\="\1" class\="margin-toggle"\>/gms'
multimarkdown -t html -o $1 $1.tmp && cat $1 |
perl -0pe 's/(\<h2|^)(.*?)(?=(\<h2)|\Z)/\n\<section\>\n\1\2\n<\/section\>\n/gms' |
perl -0pe 's/(\<blockquote\>.*?\<\/blockquote\>)/\<div class="epigraph"\>\n\1\n\<\/div\>/gms' |
perl -0pe 's/(\<blockquote\>.*?)\n(.*?)(\<\/blockquote\>)/\1\<footer\>\2\<\/footer\>\3/gms' > $1.new && mv $1.new $1
rm $1.tmp
'';
move-links = pkgs.writers.writePython3Bin "move-links" { libraries = [ ]; } ''
import sys
import re
lines = "".join(sys.stdin.readlines())
link = re.compile("([[^]]*]([^)]+))")
link_split = re.compile("[([^]]*)](([^)]+))")
marginnotes = re.compile("([^.*?]:.*?\n\n)", re.DOTALL | re.MULTILINE)
_lines = marginnotes.sub("", lines)
lines = _lines
links = link.findall(lines)
i = 1
for _link in links:
lines = lines.replace(_link, "[%s]" % i)
i += 1
i = 1
lines += "\n\n"
for _link in links:
ls = link_split.match(_link)
lines += "=> %s %s\n" % (ls[2], ls[1])
i += 1
sys.stdout.write(lines)
'';
in
{
packages = {
staticSite = with pkgs.lispPackagesLiteFor pkgs.ecl; lispDerivation {
name = "thoughts";
lispSystem = "thoughts";
lispDependencies = [
asdf
arrow-macros
];
src = pkgs.lib.cleanSource ./generator.lisp;
meta = {
license = pkgs.lib.licenses.agpl3Only;
};
buildInputs = [
pkgs.ecl
pkgs.git
pkgs.gnumake
pkgs.asdf
pkgs.perl
pkgs.multimarkdown
pkgs.sass
mm-sh
move-links
];
phases = [ "unpackPhase" "installPhase" "cleanupPhase" ];
unpackPhase = ''
mkdir -p $TMPDIR
cp ${./generator.lisp} $TMPDIR/generator.lisp
mkdir -p $TMPDIR/data
cp -r ${toString ./data}/* $TMPDIR/data/
mkdir -p $TMPDIR/templates
cp -r ${toString ./templates}/* $TMPDIR/templates/
mkdir -p $TMPDIR/static
cp -r ${toString ./static}/* $TMPDIR/static/
'';
installPhase = ''
mkdir -p $out/html/static
mkdir -p $out/gemini
mkdir -p $TMPDIR/output/gemini/articles
mkdir -p $TMPDIR/output/html
mkdir -p $TMPDIR/temp/data
cd $TMPDIR
sass static/css/style.scss $out/html/static/style.css
ecl --load $TMPDIR/generator.lisp
cp -r $TMPDIR/static/fonts $out/html/static
cp -r $TMPDIR/static/img $out/html/static
cp -r $TMPDIR/output/html/* $out/html/
cp -r $TMPDIR/output/gemini/* $out/gemini/
cp -r $TMPDIR $out/tmpdir
'';
cleanupPhase = ''
rm -rf $TMPDIR/temp
'';
};
};
devShell = pkgs.mkShell {
buildInputs = [
pkgs.ecl
pkgs.git
pkgs.gnumake
pkgs.asdf
pkgs.perl
pkgs.multimarkdown
pkgs.sass
];
shellHook = ''
echo "Welcome to the development shell for cl-yag static site generator!"
'';
};
});
}