I can use rust mozilla overlay to install the nightly rustc, but the version of rustc keeps changing with tha overlay. Is there something I can use to pin the rustc version to say, 1.43? I suppose that can be achieved by modifying that overlay for this functionality. I wanted to ask if there an existing solution that does that.
You can always just do the following with the mozilla overlay:
somewhere.nix:
…
mozilla-overlay = builtins.fetchTarball {
url = https://github.com/mozilla/…;
sha256 = "…";
};`
…
nixpkgs = import <nixpkgs> {
overlays = [
(import mozilla-overlay)
(import ./overlay.nix)
]
};
…
overlay.nix:
self: super: {
rustNightlyChannel = super.rustChannelOf {
date = "2019-12-19";
channel = "nightly";
};
inherit (self.rustNightlyChannel) rust;
}
To get the rust version of the nightly channel from the 19th December
2019.
Note that @andir’s approach also works with stable versions. For example, to get 1.40.0:
(rustChannelOf { channel = "1.40.0"; }).rust
You can also use nixpkgs-mozilla
as a package set, rather than an overlay. This is useful when you want to use it in e.g. a derivation:
{ callPackage, fetchFromGitHub }:
let
mozillaOverlay = fetchFromGitHub {
owner = "mozilla";
repo = "nixpkgs-mozilla";
rev = "9f35c4b09fd44a77227e79ff0c1b4b6a69dff533";
sha256 = "18h0nvh55b5an4gmlgfbvwbyqj91bklf1zymis6lbdh75571qaz0";
};
mozilla = callPackage "${mozillaOverlay.out}/package-set.nix" {};
rustNightly = (mozilla.rustChannelOf { date = "2019-07-30"; channel = "nightly"; }).rust;
rustPlatform = makeRustPlatform { cargo = rustNightly; rustc = rustNightly; };
in rustPlatform.buildRustPackage rec {
# ...
}
2 Likes