{ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/25.11"; rust-overlay = { url = "github:oxalica/rust-overlay"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { self, nixpkgs, rust-overlay, ... }: let systems = [ "x86_64-linux" "aarch64-linux" ]; forAllSystems = f: nixpkgs.lib.genAttrs systems (system: f system); # All packages are built from x86_64-linux host via zig cross-compilation pkgs = import nixpkgs { system = "x86_64-linux"; }; zig = import ./support/zig.nix { inherit pkgs; system = "x86_64-linux"; }; compileRust = import ./support/compile-rust.nix { inherit pkgs zig; }; mkYaar = target: let muslLibs = import ./support/musl-libs.nix { inherit pkgs zig; name-target = target; }; in compileRust { inherit target; src = self; cargoLock = { lockFile = ./Cargo.lock; }; extraLibs = muslLibs.allLibs; }; in { packages.x86_64-linux = { yaar-amd64-linux = mkYaar "amd64-linux"; yaar-arm64-linux = mkYaar "arm64-linux"; gen-libarchive-sys = import ./support/gen-libarchive-sys.nix { inherit pkgs zig; }; }; devShells = forAllSystems (system: let devPkgs = import nixpkgs { inherit system; overlays = [ rust-overlay.overlays.default ]; }; rust = devPkgs.rust-bin.stable.latest.default.override { extensions = [ "rust-src" "rust-analyzer" ]; targets = [ "x86_64-unknown-linux-musl" ]; }; in { default = devPkgs.mkShell { buildInputs = [ rust devPkgs.pkg-config devPkgs.libarchive ]; }; }); }; }