{ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-24.05"; nixpkgs-circt162.url = "github:NixOS/nixpkgs/7995cae3ad60e3d6931283d650d7f43d31aaa5c7"; nur-xin = { url = "git+https://git.xinyang.life/xin/nur.git"; inputs.nixpkgs.follows = "nixpkgs"; }; flake-utils.url = "github:numtide/flake-utils"; sbt-derivation = { url = "github:zaninime/sbt-derivation"; inputs.nixpkgs.follows = "nixpkgs"; }; am-kernels.url = "git+https://git.xinyang.life/xin/am-kernels.git?ref=dev"; }; outputs = { self, nixpkgs, nixpkgs-stable, flake-utils, nur-xin, nixpkgs-circt162, sbt-derivation, am-kernels }: flake-utils.lib.eachDefaultSystem (system: let stablePkgs = import nixpkgs-stable { inherit system; config.allowUnfree = true; overlays = [ ]; }; pkgs = import nixpkgs { inherit system; config.allowUnfree = true; overlays = [ (self: super: { nvboard = nur-xin.legacyPackages.${system}.nvboard; mini-gdbstub = nur-xin.legacyPackages.${system}.mini-gdbstub; }) ]; }; in { packages = rec { flow = pkgs.callPackage ./flow.nix { inherit (sbt-derivation.lib) mkSbtDerivation; }; flow-simlib = pkgs.callPackage ./flow-simlib.nix { inherit flow; }; }; devShells.default = pkgs.mkShell.override { stdenv = pkgs.ccacheStdenv; } { nativeBuildInputs = with pkgs; [ cmake ninja flex bison nvboard flow espresso coursier sbt-with-scala-native gef ] ++ [stablePkgs.verilator]; CHISEL_FIRTOOL_PATH = "${nixpkgs-circt162.legacyPackages.${system}.circt}/bin"; NPC_IMAGES_PATH = "${am-kernels.packages.${system}.rv32Cross.am-kernels-npc}/share"; buildInputs = with pkgs; [ cli11 spdlog mini-gdbstub ]; }; }); }