magic-nix-cache/flake.nix

99 lines
2.9 KiB
Nix

{
description = "GitHub Actions-powered Nix binary cache";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
rust-overlay = {
url = "github:oxalica/rust-overlay";
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-utils.follows = "flake-utils";
};
crane = {
url = "github:ipetkov/crane";
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-compat.follows = "flake-compat";
inputs.flake-utils.follows = "flake-utils";
};
flake-compat = {
url = "github:edolstra/flake-compat";
flake = false;
};
};
outputs = { self, nixpkgs, flake-utils, rust-overlay, crane, ... }: let
supportedSystems = flake-utils.lib.defaultSystems;
nightlyVersion = "2023-05-01";
makeCranePkgs = pkgs: let
craneLib = crane.mkLib pkgs;
in pkgs.callPackage ./crane.nix { inherit craneLib; };
in flake-utils.lib.eachSystem supportedSystems (system: let
pkgs = import nixpkgs {
inherit system;
overlays = [
rust-overlay.overlay
];
};
inherit (pkgs) lib;
crossPlatforms = let
makeCrossPlatform = crossSystem: let
pkgsCross = if crossSystem == system then pkgs else import nixpkgs {
inherit system crossSystem;
overlays = [];
};
rustTargetSpec = pkgs.rust.toRustTargetSpec pkgsCross.pkgsStatic.stdenv.hostPlatform;
rustTargetSpecUnderscored = builtins.replaceStrings [ "-" ] [ "_" ] rustTargetSpec;
in {
inherit rustTargetSpec;
cc = "${pkgsCross.stdenv.cc}/bin/${pkgsCross.stdenv.cc.targetPrefix}cc";
cargoLinkerEnv = lib.strings.toUpper "CARGO_TARGET_${rustTargetSpecUnderscored}_LINKER";
cargoCcEnv = "CC_${rustTargetSpecUnderscored}"; # for ring
};
systems = lib.filter (lib.hasInfix "linux") supportedSystems;
in map makeCrossPlatform systems;
rustNightly = pkgs.rust-bin.nightly.${nightlyVersion}.default.override {
extensions = [ "rust-src" "rust-analyzer-preview" ];
targets = map (p: p.rustTargetSpec) crossPlatforms;
};
cargoCrossEnvs = lib.listToAttrs (lib.flatten (map (p: [
{
name = p.cargoCcEnv;
value = p.cc;
}
{
name = p.cargoLinkerEnv;
value = p.cc;
}
]) crossPlatforms));
in {
devShells = {
default = pkgs.mkShell ({
packages = with pkgs; [
bashInteractive
rustNightly
cargo-bloat
cargo-edit
cargo-udeps
]
++ lib.optional stdenv.hostPlatform.isDarwin darwin.apple_sdk.frameworks.Security
++ lib.optional stdenv.hostPlatform.isDarwin (libiconv.override { enableStatic = true; enableShared = false; })
;
} // cargoCrossEnvs);
keygen = pkgs.mkShellNoCC {
packages = with pkgs; [
age
];
};
};
});
}