mirror of
https://github.com/oxalica/rust-overlay.git
synced 2024-10-03 20:57:47 +03:00
92 lines
2.7 KiB
Nix
92 lines
2.7 KiB
Nix
{
|
|
description = ''
|
|
Pure and reproducible overlay for binary distributed rust toolchains.
|
|
A compatible but better replacement for rust overlay of github:mozilla/nixpkgs-mozilla.
|
|
'';
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
|
};
|
|
|
|
outputs = { self, nixpkgs }@inputs: let
|
|
inherit (nixpkgs) lib;
|
|
inherit (lib) filterAttrs mapAttrs' replaceStrings;
|
|
|
|
forEachSystem = lib.genAttrs lib.systems.flakeExposed;
|
|
|
|
overlay = import ./.;
|
|
|
|
defaultDistRoot = import ./lib/dist-root.nix;
|
|
mkManifests = distRoot: import ./lib/manifests.nix { inherit lib distRoot; };
|
|
|
|
# Builder to construct `rust-bin` interface on an existing `pkgs`.
|
|
# This would be immutable, non-intrusive and (hopefully) can benefit from
|
|
# flake eval-cache.
|
|
#
|
|
# Note that this does not contain compatible attrs for mozilla-overlay.
|
|
mkRustBin =
|
|
{ distRoot ? defaultDistRoot }:
|
|
pkgs:
|
|
lib.fix (rust-bin: import ./lib/rust-bin.nix {
|
|
inherit lib pkgs;
|
|
inherit (pkgs.rust) toRustTarget;
|
|
inherit (rust-bin) nightly;
|
|
manifests = mkManifests distRoot;
|
|
});
|
|
|
|
in {
|
|
lib = {
|
|
# Internal use only!
|
|
_internal = {
|
|
defaultManifests = mkManifests defaultDistRoot;
|
|
};
|
|
|
|
inherit mkRustBin;
|
|
};
|
|
|
|
overlays = {
|
|
default = overlay;
|
|
rust-overlay = overlay;
|
|
};
|
|
|
|
# TODO: Flake outputs except `overlay[s]` are not stabilized yet.
|
|
|
|
packages =
|
|
let
|
|
select = version: comps:
|
|
if comps ? default then
|
|
comps.default // {
|
|
minimal = comps.minimal or (throw "missing profile 'minimal' for ${version}");
|
|
}
|
|
else
|
|
null;
|
|
result = rust-bin:
|
|
mapAttrs' (version: comps: {
|
|
name = if version == "latest"
|
|
then "rust"
|
|
else "rust_${replaceStrings ["."] ["_"] version}";
|
|
value = select version comps;
|
|
}) rust-bin.stable //
|
|
mapAttrs' (version: comps: {
|
|
name = if version == "latest"
|
|
then "rust-nightly"
|
|
else "rust-nightly_${version}";
|
|
value = select version comps;
|
|
}) rust-bin.nightly //
|
|
mapAttrs' (version: comps: {
|
|
name = if version == "latest"
|
|
then "rust-beta"
|
|
else "rust-beta_${version}";
|
|
value = select version comps;
|
|
}) rust-bin.beta;
|
|
result' = rust-bin: filterAttrs (name: drv: drv != null) (result rust-bin);
|
|
in
|
|
forEachSystem (system:
|
|
result' (mkRustBin {} nixpkgs.legacyPackages.${system})
|
|
// { default = self.packages.${system}.rust; }
|
|
);
|
|
|
|
checks = forEachSystem (import ./tests inputs);
|
|
};
|
|
}
|