{ inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; rust-overlay = { url = "github:oxalica/rust-overlay"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { nixpkgs , rust-overlay , self , }: let forAllSystems = fn: builtins.foldl' (attrs: system: let outputs = fn system; outputNames = builtins.attrNames outputs; in builtins.foldl' (attrs: outName: let existing = attrs.${outName} or { }; new = existing // { ${system} = outputs.${outName}; }; in attrs // { ${outName} = new; }) attrs outputNames) { } [ "x86_64-linux" "aarch64-linux" ]; in { overlays.default = final: prev: { nix-ci = final.lib.flip final.callPackage { } ({ rustPlatform , lib , makeWrapper , nix-eval-jobs , }: let cargoToml = builtins.fromTOML (builtins.readFile ./Cargo.toml); in rustPlatform.buildRustPackage { pname = cargoToml.package.name; version = cargoToml.package.version; src = lib.fileset.toSource { root = ./.; fileset = lib.fileset.unions [ ./src ./Cargo.toml ./Cargo.lock ]; }; nativeBuildInputs = [ makeWrapper ]; cargoLock.lockFile = ./Cargo.lock; preFixup = '' wrapProgram "$out/bin/nix-ci" \ --prefix PATH : ${lib.makeBinPath [nix-eval-jobs]} ''; }); }; } // forAllSystems (system: let pkgs = import nixpkgs { inherit system; overlays = [ self.overlays.default rust-overlay.overlays.default (final: prev: { inherit (prev.lixPackageSets.stable) nixpkgs-review nix-eval-jobs nix-fast-build colmena; }) ]; }; rust = pkgs.rust-bin.stable.latest.default.override { extensions = [ "rust-src" # for rust-analyzer "rust-analyzer" ]; }; in { devShells.default = pkgs.mkShell { nativeBuildInputs = [ pkgs.nix-eval-jobs rust pkgs.attic-client ]; }; packages = { default = pkgs.nix-ci; nix-ci = pkgs.nix-ci; }; checks = self.packages.${system}; }); }