65 lines
1.7 KiB
Nix
65 lines
1.7 KiB
Nix
{
|
|
description = "example environment for working with and building an Eleventy website";
|
|
|
|
|
|
inputs = {
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
};
|
|
|
|
|
|
outputs = { self, nixpkgs, flake-utils }:
|
|
flake-utils.lib.eachDefaultSystem (system:
|
|
let
|
|
pkgs = nixpkgs.legacyPackages.${system};
|
|
inputs = with pkgs; [ nodejs yarn just eleventyEnv ];
|
|
# note that node_modules includes Pagefind binaries pulled from npm,
|
|
# rather than built locally, which may be less desirable
|
|
eleventyEnv = pkgs.callPackage (
|
|
{ mkYarnModules }:
|
|
mkYarnModules {
|
|
pname = "example-webstite-env";
|
|
version = "3.5.0";
|
|
|
|
yarnLock = ./yarn.lock;
|
|
packageJSON = ./package.json;
|
|
}
|
|
) { };
|
|
exampleWebsite = pkgs.callPackage (
|
|
{ stdenvNoCC, lib, eleventyEnv, nodejs }:
|
|
stdenvNoCC.mkDerivation {
|
|
pname = "example-website";
|
|
version = (pkgs.lib.getVersion eleventyEnv.name);
|
|
|
|
src = ./.;
|
|
|
|
nativeBuildInputs = [
|
|
eleventyEnv
|
|
nodejs
|
|
];
|
|
|
|
ELEVENTY_ENVIRONMENT = "prod";
|
|
|
|
configurePhase = ''
|
|
ln -s ${eleventyEnv}/node_modules ./node_modules
|
|
'';
|
|
|
|
buildPhase = ''
|
|
npx eleventy
|
|
'';
|
|
|
|
installPhase = ''
|
|
cp -ar _site $out
|
|
'';
|
|
}
|
|
) { inherit eleventyEnv; };
|
|
in {
|
|
devShells.default = pkgs.mkShell {
|
|
nativeBuildInputs = inputs;
|
|
};
|
|
|
|
packages.example-website = exampleWebsite;
|
|
packages.eleventy-env = eleventyEnv;
|
|
}
|
|
);
|
|
}
|