blog/flake.nix

84 lines
3.3 KiB
Nix

{
description = "maralorn.de homepage";
inputs = {
ema.url = "github:srid/ema/master";
# Use the nixpkgs used by the pinned ema.
nixpkgs.follows = "ema/nixpkgs";
pre-commit-hooks.url = "github:cachix/pre-commit-hooks.nix";
flake-utils.url = "github:numtide/flake-utils";
windicss = {
url = "github:srid/windicss-nix";
flake = false;
};
};
outputs = inputs@{ self, flake-utils, ... }:
flake-utils.lib.eachSystem [ "x86_64-linux" ] (
system:
let
pkgs = inputs.nixpkgs.legacyPackages.${system};
haskellPackages = pkgs.haskellPackages.extend (
final: pref:
with pkgs.haskell.lib; {
ema = disableCabalFlag inputs.ema.defaultPackage.${system} "with-examples";
}
);
windicss = (import inputs.windicss { inherit pkgs; }).shell.nodeDependencies;
in
rec
{
packages = {
default = packages.page;
generator = haskellPackages.callCabal2nix "maralorn-de" ./generator { };
pageWithoutResources = pkgs.runCommand "maralorn.de-without-resources"
{
LOCALE_ARCHIVE = "${pkgs.glibcLocales}/lib/locale/locale-archive";
LC_ALL = "en_US.UTF-8";
} ''
cp -r ${./content} content
chmod +w content
echo ${toString self.lastModified} > content/lastModified
mkdir $out
${packages.generator}/bin/run-ema content $out
'';
css = pkgs.runCommand "windi.css" { } ''
${windicss}/bin/windicss '${packages.pageWithoutResources}/**/*.html' -mto $out
'';
page = pkgs.runCommand "maralorn.de" { } ''
mkdir -p $out/static/font $out/static/css
${pkgs.xorg.lndir}/bin/lndir ${packages.pageWithoutResources} $out
${pkgs.xorg.lndir}/bin/lndir ${pkgs.libertinus}/share/fonts/opentype $out/static/font
ln -s ${packages.css} $out/static/css/windi.css
csshash=$(sha256sum $out/static/css/windi.css | cut -c1-16)
find $out -iname "*.html" -exec sed -i "s|/static/css/windi.css|/static/css/windi.$csshash.css|" {} + ;
'';
};
apps = rec {
default = watch;
watch = flake-utils.lib.mkApp {
drv = pkgs.writeShellScriptBin "watch" ''
mkdir -p content/static/font content/static/css
ln -sf ${packages.css} ./content/static/css/windi.css
${pkgs.xorg.lndir}/bin/lndir ${pkgs.libertinus}/share/fonts/opentype ./content/static/font
exec ${pkgs.ghcid}/bin/ghcid -C generator -W -r':main "../content"' '';
};
hoogle = flake-utils.lib.mkApp { drv = pkgs.writeShellScriptBin "hoogle-server" ''exec hoogle server --local --links -p 3333''; };
};
checks = {
pre-commit-check = inputs.pre-commit-hooks.lib.${system}.run {
src = ./.;
hooks = {
hlint.enable = true;
fourmolu.enable = true;
};
};
};
devShells.default = haskellPackages.shellFor {
packages = p: [ packages.generator ];
buildInputs = [ windicss pkgs.cabal-install ];
withHoogle = true;
inherit (self.checks.${system}.pre-commit-check) shellHook;
};
}
);
}