From 4c09255aebf73390615a37a578ef34e47d4d6eb3 Mon Sep 17 00:00:00 2001 From: oxalica Date: Sat, 2 Jan 2021 20:42:57 +0800 Subject: [PATCH] Provide `rust-bin` and clean-up --- all.nix | 11 ----------- default.nix | 2 ++ manifest.nix | 22 ++++++++++++++-------- rust-overlay.nix | 48 +++++++++++++++++++++++++++++------------------- 4 files changed, 45 insertions(+), 38 deletions(-) delete mode 100644 all.nix create mode 100644 default.nix diff --git a/all.nix b/all.nix deleted file mode 100644 index e213d345fac..00000000000 --- a/all.nix +++ /dev/null @@ -1,11 +0,0 @@ -# For test. -with import { - overlays = [ (import ./.) ]; -}; { - stable = lib.mapAttrs - (channel: _: (rustChannelOf { inherit channel; }).rust) - (removeAttrs (import ./manifests/stable) ["latest"]); - nightly = lib.mapAttrs - (date: _: (rustChannelOf { channel = "nightly"; inherit date; }).rust) - (removeAttrs (import ./manifests/nightly) ["latest"]); -} diff --git a/default.nix b/default.nix new file mode 100644 index 00000000000..29025b88731 --- /dev/null +++ b/default.nix @@ -0,0 +1,2 @@ +final: prev: +(import ./rust-overlay.nix final) (prev // (import ./manifest.nix final prev)) diff --git a/manifest.nix b/manifest.nix index db5ec1c107c..76ec893a562 100644 --- a/manifest.nix +++ b/manifest.nix @@ -4,7 +4,7 @@ with builtins; let targets = import ./manifests/targets.nix // { _ = "*"; }; - distServer = "https://static.rust-lang.org"; + inherit (final.rust-bin) distRoot; # Extensions for mixed `rust` pkg. components = [ @@ -60,7 +60,7 @@ let in { name = target; value = { - xz_url = "${distServer}/dist/${date}/${pkgNameStripped}-${urlVersion}${targetTail}.tar.xz"; + xz_url = "${distRoot}/${date}/${pkgNameStripped}-${urlVersion}${targetTail}.tar.xz"; xz_hash = hash; } // (if pkgName == "rust" then rustPkgExtra pkg target else {}); }) (removeAttrs hashes ["v" "k"]); @@ -71,10 +71,16 @@ let ret = mapAttrs (uncompressManifest nightly) (removeAttrs set ["latest"]); in ret // { latest = ret.${set.latest}; }; - manifests = { - stable = uncompressManifestSet false (import ./manifests/stable); - nightly = uncompressManifestSet true (import ./manifests/nightly); - }; +in { + rust-bin = (prev.rust-bin or {}) // { + # The dist url for fetching. + # Override it if you want to use a mirror server. + distRoot = "https://static.rust-lang.org/dist"; -# in { inherit manifests; } -in import ./rust-overlay.nix final prev manifests + # For internal usage. + manifests = { + stable = uncompressManifestSet false (import ./manifests/stable); + nightly = uncompressManifestSet true (import ./manifests/nightly); + }; + }; +} diff --git a/rust-overlay.nix b/rust-overlay.nix index 2426028e775..684f0a381ed 100644 --- a/rust-overlay.nix +++ b/rust-overlay.nix @@ -3,12 +3,12 @@ # This file provide a Rust overlay, which provides pre-packaged bleeding edge versions of rustc # and cargo. self: super: -manifests: let # Manifest selector. fromManifest = { channel ? null, date ? null }: { stdenv, fetchurl, patchelf }: let + inherit (self.rust-bin) manifests; assertWith = cond: msg: body: if cond then body else throw msg; ret = @@ -269,43 +269,53 @@ let in rec { + # For each channel: + # rust-bin.stable.latest.cargo + # rust-bin.stable.latest.rust # Aggregate all others. (recommended) + # rust-bin.stable.latest.rustc + # rust-bin.stable.latest.rust-analysis + # rust-bin.stable.latest.rust-docs + # rust-bin.stable.latest.rust-src + # rust-bin.stable.latest.rust-std + # + # For a specific version of stable: + # rust-bin.stable."1.47.0".rust + # + # For a specific date of nightly: + # rust-bin.nightly."2020-01-01".rust + rust-bin = with builtins; (super.rust-bin or {}) // + mapAttrs (channel: manifests: + mapAttrs (version: manifest: + fromManifestFile manifest { inherit (self) stdenv fetchurl patchelf; } + ) manifests + ) super.rust-bin.manifests; + + # Compat with mozilla overlay. lib = super.lib // { - rustLib = { + rustLib = super.lib.rustLib { inherit fromManifest fromManifestFile; }; }; + # Compat with mozilla overlay. rustChannelOf = manifest_args: fromManifest manifest_args { inherit (self) stdenv fetchurl patchelf; }; - # Set of packages which are automagically updated. Do not rely on these for - # reproducible builds. + # Compat with mozilla overlay. latest = (super.latest or {}) // { rustChannels = { nightly = rustChannelOf { channel = "nightly"; }; - beta = rustChannelOf { channel = "beta"; }; + # beta = rustChannelOf { channel = "beta"; }; stable = rustChannelOf { channel = "stable"; }; }; }; - # Helper builder + # Compat with mozilla overlay. rustChannelOfTargets = channel: date: targets: (rustChannelOf { inherit channel date; }) .rust.override { inherit targets; }; - # For backward compatibility + # Compat with mozilla overlay. rustChannels = latest.rustChannels; - - # For each channel: - # latest.rustChannels.nightly.cargo - # latest.rustChannels.nightly.rust # Aggregate all others. (recommended) - # latest.rustChannels.nightly.rustc - # latest.rustChannels.nightly.rust-analysis - # latest.rustChannels.nightly.rust-docs - # latest.rustChannels.nightly.rust-src - # latest.rustChannels.nightly.rust-std - - # For a specific date: - # (rustChannelOf { date = "2017-06-06"; channel = "beta"; }).rust }