{ description = "pict-rs"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; fenix = { url = "github:nix-community/fenix"; inputs.nixpkgs.follows = "nixpkgs"; }; naersk = { url = "github:nix-community/naersk"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { self, nixpkgs, flake-utils, fenix, naersk }: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; overlays = [ fenix.overlays.default ]; }; makeRustCrossPackage = (crossSystem: let systemMappings = { "x86_64-linux" = ["x86_64" "unknown" "linux" "gnu"]; "aarch64-linux" = ["aarch64" "unknown" "linux" "gnu"]; }; pkgsCross = import nixpkgs { inherit system; crossSystem.system = crossSystem; }; target = nixpkgs.lib.strings.concatStringsSep "-" systemMappings.${crossSystem}; cargoTarget = nixpkgs.lib.strings.concatMapStringsSep "_" (nixpkgs.lib.strings.toUpper) systemMappings.${crossSystem}; ccTarget = nixpkgs.lib.strings.concatStringsSep "_" systemMappings.${crossSystem}; toolchain = with fenix.packages.${system}; combine [ minimal.cargo minimal.rustc targets.${target}.latest.rust-std ]; inherit (pkgsCross.stdenv) cc; in (naersk.lib.${system}.override { cargo = toolchain; rustc = toolchain; }).buildPackage { src = ./.; CARGO_BUILD_TARGET = target; "CARGO_TARGET_${cargoTarget}_LINKER" = "${cc}/bin/${cc.targetPrefix}cc"; "CC_${ccTarget}" = "${cc}/bin/${cc.targetPrefix}cc"; "AR_${ccTarget}" = "${cc}/bin/${cc.targetPrefix}ar"; }); in { packages = rec { pict-rs-x86_64-linux-gnu = makeRustCrossPackage "x86_64-linux"; pict-rs-aarch64-linux-gnu = makeRustCrossPackage "aarch64-linux"; pict-rs = pict-rs-x86_64-linux-gnu; default = pict-rs; }; apps = rec { dev = flake-utils.lib.mkApp { drv = self.packages.${system}.pict-rs; }; default = dev; }; devShell = with pkgs; mkShell { nativeBuildInputs = [ diesel-cli exiftool (pkgs.fenix.complete.withComponents [ "cargo" "clippy" "rust-src" "rustc" "rustfmt" ]) ffmpeg_6-full garage imagemagick rust-analyzer-nightly taplo tokio-console ]; }; }); }