{ inputs = { nixpkgs = { url = "github:NixOS/nixpkgs/nixpkgs-unstable"; }; utils.url = "github:numtide/flake-utils"; flake-compat = { url = "github:edolstra/flake-compat"; flake = false; }; }; outputs = inputs: inputs.utils.lib.eachDefaultSystem ( system: let pkgs = import inputs.nixpkgs { localSystem = system; overlays = [ (final: prev: { bluespec-joh-template = prev.callPackage ( { stdenv, bluespec, nextpnr, openfpgaloader, trellis, which, yosys, }: stdenv.mkDerivation { pname = "bluespec-joh-template"; version = "0.1.0"; src = inputs.self; # Versions can be checked with # `nix eval --json ".#bluespec-joh-template.nativeBuildInputs" | nix-shell -p jq --run jq` nativeBuildInputs = [ bluespec nextpnr openfpgaloader trellis which yosys ]; makeFlags = [ "-C" "ulx3s_fpga" "mkTop.bit" ]; installPhase = '' runHook preInstall mkdir -p $out cp ./ulx3s_fpga/mkTop.bit $out/ runHook postInstall ''; } ) { }; }) ]; }; in { packages = { default = inputs.self.packages."${system}".bluespec-joh-template; bluespec-joh-template = pkgs.bluespec-joh-template; }; devShells.default = pkgs.callPackage ( { mkShell, bluespec-joh-template, }: mkShell { inputsFrom = [ bluespec-joh-template ]; } ) { }; } ); }