5f8cf0048e
The biggest benefit is that we no longer have to update the registry package. This means that just about any cargo package can be built by nix. No longer does `cargo update` need to be feared because it will update to packages newer then what is available in nixpkgs. Instead of fetching the cargo registry this bundles all the source code into a "vendor/" folder. This also uses the new --frozen and --locked flags which is nice. Currently cargo-vendor only provides binaries for Linux and macOS 64-bit. This can be solved by building it for the other architectures and uploading it somewhere (like the NixOS cache). This also has the downside that it requires a change to everyone's deps hash. And if the old one is used because it was cached it will fail to build as it will attempt to use the old version. For this reason the attribute has been renamed to `cargoSha256`. Authors: * Kevin Cox <kevincox@kevincox.ca> * Jörg Thalheim <Mic92@users.noreply.github.com> * zimbatm <zimbatm@zimbatm.com>
90 lines
2.7 KiB
Markdown
90 lines
2.7 KiB
Markdown
---
|
|
title: Rust
|
|
author: Matthias Beyer
|
|
date: 2017-03-05
|
|
---
|
|
|
|
# User's Guide to the Rust Infrastructure
|
|
|
|
To install the rust compiler and cargo put
|
|
|
|
```
|
|
rust
|
|
```
|
|
|
|
into the `environment.systemPackages` or bring them into
|
|
scope with `nix-shell -p rust`.
|
|
|
|
For daily builds (beta and nightly) use either rustup from
|
|
nixpkgs or use the [Rust nightlies
|
|
overlay](#using-the-rust-nightlies-overlay).
|
|
|
|
## Packaging Rust applications
|
|
|
|
Rust applications are packaged by using the `buildRustPackage` helper from `rustPlatform`:
|
|
|
|
```
|
|
with rustPlatform;
|
|
|
|
buildRustPackage rec {
|
|
name = "ripgrep-${version}";
|
|
version = "0.4.0";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "BurntSushi";
|
|
repo = "ripgrep";
|
|
rev = "${version}";
|
|
sha256 = "0y5d1n6hkw85jb3rblcxqas2fp82h3nghssa4xqrhqnz25l799pj";
|
|
};
|
|
|
|
cargoSha256 = "0q68qyl2h6i0qsz82z840myxlnjay8p1w5z7hfyr8fqp7wgwa9cx";
|
|
|
|
meta = with stdenv.lib; {
|
|
description = "A utility that combines the usability of The Silver Searcher with the raw speed of grep";
|
|
homepage = https://github.com/BurntSushi/ripgrep;
|
|
license = with licenses; [ unlicense ];
|
|
maintainers = [ maintainers.tailhook ];
|
|
platforms = platforms.all;
|
|
};
|
|
}
|
|
```
|
|
|
|
`buildRustPackage` requires a `cargoSha256` attribute which is computed over
|
|
all crate sources of this package. Currently it is obtained by inserting a
|
|
fake checksum into the expression and building the package once. The correct
|
|
checksum can be then take from the failed build.
|
|
|
|
To install crates with nix there is also an experimental project called
|
|
[nixcrates](https://github.com/fractalide/nixcrates).
|
|
|
|
## Using the Rust nightlies overlay
|
|
|
|
Mozilla provides an overlay for nixpkgs to bring a nightly version of Rust into scope.
|
|
This overlay can _also_ be used to install recent unstable or stable versions
|
|
of Rust, if desired.
|
|
|
|
To use this overlay, clone
|
|
[nixpkgs-mozilla](https://github.com/mozilla/nixpkgs-mozilla),
|
|
and create a symbolic link to the file
|
|
[rust-overlay.nix](https://github.com/mozilla/nixpkgs-mozilla/blob/master/rust-overlay.nix)
|
|
in the `~/.config/nixpkgs/overlays` directory.
|
|
|
|
$ git clone https://github.com/mozilla/nixpkgs-mozilla.git
|
|
$ mkdir -p ~/.config/nixpkgs/overlays
|
|
$ ln -s $(pwd)/nixpkgs-mozilla/rust-overlay.nix ~/.config/nixpkgs/overlays/rust-overlay.nix
|
|
|
|
The latest version can be installed with the following command:
|
|
|
|
$ nix-env -Ai nixos.latest.rustChannels.stable.rust
|
|
|
|
Or using the attribute with nix-shell:
|
|
|
|
$ nix-shell -p nixos.latest.rustChannels.stable.rust
|
|
|
|
To install the beta or nightly channel, "stable" should be substituted by
|
|
"nightly" or "beta", or
|
|
use the function provided by this overlay to pull a version based on a
|
|
build date.
|
|
|
|
The overlay automatically updates itself as it uses the same source as
|
|
[rustup](https://www.rustup.rs/).
|