{ inputs = { haskellNix.url = "github:input-output-hk/haskell.nix"; # nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; nixpkgs.follows = "haskellNix/nixpkgs-unstable"; sydpkgs = { url = "git+https://git.deertopia.net/msyds/sydpkgs"; inputs.nixpkgs.follows = "nixpkgs"; }; crane.url = "github:ipetkov/crane"; }; outputs = { self, nixpkgs, sydpkgs, haskellNix, ... }@inputs: let supportedSystems = [ "aarch64-darwin" "aarch64-linux" "x86_64-darwin" "x86_64-linux" ]; overlays = [ haskellNix.overlay (final: prev: { gyehoek-runtime = final.callPackage ./runtime { crane-lib = inputs.crane.mkLib final; }; gyehoek = final.haskell-nix.project' { src = ./.; compiler-nix-name = "ghc912"; modules = [({ pkgs, lib, ...}: { packages.gyehoek.components.tests.test.preCheck = let bin = [ pkgs.git # tasty uses git diff ]; in '' export GYEHOEK_RUNTIME=${lib.getExe final.gyehoek-runtime} export PATH=${lib.makeBinPath bin}:$PATH ''; })]; shell = { withHoogle = true; inputsFrom = [ final.gyehoek-runtime ]; tools = { cabal = {}; haskell-language-server = {}; }; buildInputs = with final; [ haskellPackages.cabal-fmt wabt nodejs wasm-tools wac-cli guile rust-analyzer wasmtime ]; }; }; }) ]; each-system = f: nixpkgs.lib.genAttrs supportedSystems (system: f rec { pkgs = import nixpkgs { inherit system overlays; }; inherit (pkgs) lib; inherit system; }); hf = let keys = [ "packages" "apps" "devShells" "hydraJobs" "ciJobs" "checks" ]; in nixpkgs.lib.genAttrs keys (k: each-system ({ pkgs, ... }: (pkgs.gyehoek.flake {}).${k})); in { # Exposed as a REPL convenience. _pkgs = each-system ({ pkgs, ... }: pkgs); _hf = hf; packages = each-system ({ pkgs, lib, system, ... }: hf.packages.${system} // lib.fix (packages: { gyehoek = hf.packages.${system}."gyehoek:exe:gyehoek"; default = packages.gyehoek; inherit (pkgs) gyehoek-runtime; })); devShells = each-system ({ pkgs, system, ... }: hf.devShells.${system}); checks = each-system ({ pkgs, system, ... }: hf.checks.${system}); }; nixConfig = { extra-substituters = [ "https://cache.iog.io" "https://cache.zw3rk.com" ]; extra-trusted-public-keys = [ "hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ=" "loony-tools:pr9m4BkM/5/eSTZlkQyRt57Jz7OMBxNSUiMC4FkcNfk=" ]; allow-import-from-derivation = "true"; }; }