Merge pull request #2233 from chiichen/nix-shell-dev

Use a more convinient way of developing rustc on NixOS
This commit is contained in:
nora 2025-02-02 08:52:17 +01:00 committed by GitHub
commit cccaff7377
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 19 additions and 26 deletions

View File

@ -135,24 +135,24 @@ and follow the same instructions as above.
### Emacs ### Emacs
Emacs provides support for rust-analyzer with project-local configuration Emacs provides support for rust-analyzer with project-local configuration
through [Eglot](https://www.gnu.org/software/emacs/manual/html_node/eglot/). through [Eglot](https://www.gnu.org/software/emacs/manual/html_node/eglot/).
Steps for setting up Eglot with rust-analyzer can be [found Steps for setting up Eglot with rust-analyzer can be [found
here](https://rust-analyzer.github.io/manual.html#eglot). here](https://rust-analyzer.github.io/manual.html#eglot).
Having set up Emacs & Eglot for Rust development in general, you can run Having set up Emacs & Eglot for Rust development in general, you can run
`./x setup editor` and select `emacs`, which will prompt you to create `./x setup editor` and select `emacs`, which will prompt you to create
`.dir-locals.el` with the recommended configuration for Eglot. `.dir-locals.el` with the recommended configuration for Eglot.
The recommended settings live at [`src/etc/rust_analyzer_eglot.el`]. The recommended settings live at [`src/etc/rust_analyzer_eglot.el`].
For more information on project-specific Eglot configuration, consult [the For more information on project-specific Eglot configuration, consult [the
manual](https://www.gnu.org/software/emacs/manual/html_node/eglot/Project_002dspecific-configuration.html). manual](https://www.gnu.org/software/emacs/manual/html_node/eglot/Project_002dspecific-configuration.html).
### Helix ### Helix
Helix comes with built-in LSP and rust-analyzer support. Helix comes with built-in LSP and rust-analyzer support.
It can be configured through `languages.toml`, as described It can be configured through `languages.toml`, as described
[here](https://docs.helix-editor.com/languages.html). [here](https://docs.helix-editor.com/languages.html).
You can run `./x setup editor` and select `helix`, which will prompt you to You can run `./x setup editor` and select `helix`, which will prompt you to
create `languages.toml` with the recommended configuration for Helix. The create `languages.toml` with the recommended configuration for Helix. The
recommended settings live at [`src/etc/rust_analyzer_helix.toml`]. recommended settings live at [`src/etc/rust_analyzer_helix.toml`].
## Check, check, and check again ## Check, check, and check again
@ -181,7 +181,7 @@ example, running `tidy` and `linkchecker` is useful when editing Markdown files,
whereas UI tests are much less likely to be helpful. While `x suggest` is a whereas UI tests are much less likely to be helpful. While `x suggest` is a
useful tool, it does not guarantee perfect coverage (just as PR CI isn't a useful tool, it does not guarantee perfect coverage (just as PR CI isn't a
substitute for bors). See the [dedicated chapter](../tests/suggest-tests.md) for substitute for bors). See the [dedicated chapter](../tests/suggest-tests.md) for
more information and contribution instructions. more information and contribution instructions.
Please note that `x suggest` is in a beta state currently and the tests that it Please note that `x suggest` is in a beta state currently and the tests that it
will suggest are limited. will suggest are limited.
@ -332,28 +332,21 @@ git worktree add -b my-feature ../rust2 master
You can then use that rust2 folder as a separate workspace for modifying and You can then use that rust2 folder as a separate workspace for modifying and
building `rustc`! building `rustc`!
## Using nix-shell ## Working with nix
If you're using nix, you can use the following nix-shell to work on Rust: Several nix configurations are defined in `src/tools/nix-dev-shell`.
```nix If you're using direnv, you can create a symbol link to `src/tools/nix-dev-shell/envrc-flake` or `src/tools/nix-dev-shell/envrc-shell`
{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell { ```bash
name = "rustc"; ln -s ./src/tools/nix-dev-shell/envrc-flake ./.envrc # Use flake
nativeBuildInputs = with pkgs; [
binutils cmake ninja pkg-config python3 git curl cacert patchelf nix
];
buildInputs = with pkgs; [
openssl glibc.out glibc.static
];
# Avoid creating text files for ICEs.
RUSTC_ICE = "0";
# Provide `libstdc++.so.6` for the self-contained lld.
LD_LIBRARY_PATH = "${with pkgs; lib.makeLibraryPath [
stdenv.cc.cc.lib
]}";
}
``` ```
or
```bash
ln -s ./src/tools/nix-dev-shell/envrc-shell ./.envrc # Use nix-shell
```
### Note
Note that when using nix on a not-NixOS distribution, it may be necessary to set Note that when using nix on a not-NixOS distribution, it may be necessary to set
**`patch-binaries-for-nix = true` in `config.toml`**. Bootstrap tries to detect **`patch-binaries-for-nix = true` in `config.toml`**. Bootstrap tries to detect