nix-jekyll-builder/flake.nix

80 lines
1.9 KiB
Nix

{
description = "Jekyll site builder flake";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.11";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
mkJekyllSite = {
pname,
version ? "1.0.0",
src,
gemset ? ./gemset.nix,
gemfile ? ./Gemfile,
lockfile ? ./Gemfile.lock
}:
let
env = pkgs.bundlerEnv {
name = pname;
inherit (pkgs) ruby;
inherit gemfile lockfile gemset;
};
in
pkgs.stdenv.mkDerivation {
inherit pname version src;
nativeBuildInputs = with pkgs; [
ruby_3_3
minify
];
configurePhase = ''
export HOME=$TMPDIR
mkdir -p _site
'';
buildPhase = ''
echo "Building site with Jekyll..."
JEKYLL_ENV=production ${env}/bin/jekyll build --source . --destination _site --trace
echo 'Minifying HTML'
minify --all --recursive --output . _site
'';
installPhase = ''
mkdir -p $out
cp -r _site/* $out/
'';
};
# Import tests
tests = import ./tests.nix { inherit pkgs mkJekyllSite; };
in
{
packages.default = mkJekyllSite {
pname = "my-jekyll-site";
src = builtins.filterSource
(path: type: !(builtins.elem (baseNameOf path) [
"_site"
".jekyll-cache"
".git"
"node_modules"
"result"
"vendor"
]))
./.;
};
lib.mkJekyllSite = mkJekyllSite;
inherit (tests) checks apps;
});
}