{ 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"; }; }; outputs = { self, nixpkgs, sydpkgs, haskellNix, ... }@inputs: let supportedSystems = [ "aarch64-darwin" "aarch64-linux" "x86_64-darwin" "x86_64-linux" ]; overlays = [ haskellNix.overlay (final: prev: { inherit (sydpkgs.packages.${final.stdenv.hostPlatform.system}) bdwgc; }) (final: prev: { gyehoek = final.haskell-nix.project' { src = ./.; compiler-nix-name = "ghc912"; shell = { withHoogle = true; inputsFrom = [ self.packages.${final.stdenv.hostPlatform.system}.runtime ]; tools = { cabal = {}; haskell-language-server = {}; }; buildInputs = with final; [ gcc qbe haskellPackages.cabal-fmt bdwgc pkg-config guile clang-tools # clangd gdb gdbgui rust-analyzer ]; }; }; }) ]; 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, system, ... }: hf.packages.${system} // { default = hf.packages.${system}."gyehoek:exe:gyehoek"; runtime = pkgs.callPackage ./runtime {}; inherit (pkgs) bdwgc; }); devShells = each-system ({ pkgs, system, ... }: hf.devShells.${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"; }; }