{ 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 }: { # Export mkJekyllSite directly at the top level lib = { mkJekyllSite = { pname, version ? "1.0.0", src, gemset ? ./gemset.nix, gemfile ? ./Gemfile, lockfile ? ./Gemfile.lock }: let system = "x86_64-linux"; # Or make this an argument pkgs = nixpkgs.legacyPackages.${system}; 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/ ''; }; }; # Keep the per-system outputs for compatibility packages = flake-utils.lib.eachDefaultSystem (system: { default = self.lib.mkJekyllSite { pname = "my-jekyll-site"; src = builtins.filterSource (path: type: !(builtins.elem (baseNameOf path) [ "_site" ".jekyll-cache" ".git" "node_modules" "result" "vendor" ])) ./.; }; }); }; }