Rust: Difference between revisions
imported>Nyarly No edit summary |
imported>TheSirC Adding Emacs support |
||
Line 32: | Line 32: | ||
}) | }) | ||
</syntaxHighlight> | </syntaxHighlight> | ||
== Emacs integration == | |||
Making Emacs use certain version of libraries can be tricky, in particular for example OpenSSL might not be found ''even'' if it is in your Nix store. Two solutions exists : | |||
* a "global" one | |||
* a per-project one | |||
Both solution relies on the usage of a library called [https://github.com/direnv/direnv/wiki/Nix direnv] and its package integration in Emacs [https://github.com/wbolster/emacs-direnv emacs-direnv]. | |||
=== Global solution === | |||
If you happen to have all of your Rust projects in one folder "<code>/path/to/your/rust</code>" then placing a file <code>/path/to/your/rust/.envrc</code> with this content : | |||
<syntaxHighlight lang="shell"> | |||
use_nix | |||
</syntaxHighlight> | |||
and another file <code>/path/to/your/rust/default.nix</code> : | |||
<syntaxHighlight lang="Nix"> | |||
let | |||
moz_overlay = import (builtins.fetchTarball https://github.com/mozilla/nixpkgs-mozilla/archive/master.tar.gz); | |||
nixpkgs = import <nixpkgs> { overlays = [ moz_overlay ]; }; | |||
ruststable = (nixpkgs.latest.rustChannels.stable.rust.override { extensions = [ "rust-src" "rls-preview" "rust-analysis" "rustfmt-preview" ];}); | |||
in | |||
with nixpkgs; | |||
stdenv.mkDerivation { | |||
name = "rust"; | |||
buildInputs = [ openssl nasm rustup ruststable cmake zlib ]; | |||
shellHook = '' | |||
export OPENSSL_DIR="${openssl.dev}" | |||
export OPENSSL_LIB_DIR="${openssl.out}/lib" | |||
''; | |||
} | |||
</syntaxHighlight> | |||
will, for example, grant you a free acces to OpenSSL ! Feel free to override this to your liking ! | |||
=== Per-project solution === | |||
For a more granular solution to this problem a more in-depth review of [https://github.com/direnv/direnv/wiki/Nix#persistent-shell-for-speeding-things-up the direnv wiki] will be poorly be needed ! |
Revision as of 10:37, 20 June 2019
This article is about the rust programming language.
Rust Nightlies
Either use rust overlay or rustup to get install rust nightlies.
Neovim Completion
Racer completion can be configured using the following snippet:
(neovim.override {
configure = {
customRC = ''
if filereadable($HOME . "/.vimrc")
source ~/.vimrc
endif
let $RUST_SRC_PATH = '${stdenv.mkDerivation {
inherit (rustc) src;
inherit (rustc.src) name;
phases = ["unpackPhase" "installPhase"];
installPhase = "cp -r src $out";
}}'
'';
packages.nixbundle.start = with vimPlugins; [
nvim-completion-manager
nvim-cm-racer
];
};
})
Emacs integration
Making Emacs use certain version of libraries can be tricky, in particular for example OpenSSL might not be found even if it is in your Nix store. Two solutions exists :
- a "global" one
- a per-project one
Both solution relies on the usage of a library called direnv and its package integration in Emacs emacs-direnv.
Global solution
If you happen to have all of your Rust projects in one folder "/path/to/your/rust
" then placing a file /path/to/your/rust/.envrc
with this content :
use_nix
and another file /path/to/your/rust/default.nix
:
let
moz_overlay = import (builtins.fetchTarball https://github.com/mozilla/nixpkgs-mozilla/archive/master.tar.gz);
nixpkgs = import <nixpkgs> { overlays = [ moz_overlay ]; };
ruststable = (nixpkgs.latest.rustChannels.stable.rust.override { extensions = [ "rust-src" "rls-preview" "rust-analysis" "rustfmt-preview" ];});
in
with nixpkgs;
stdenv.mkDerivation {
name = "rust";
buildInputs = [ openssl nasm rustup ruststable cmake zlib ];
shellHook = ''
export OPENSSL_DIR="${openssl.dev}"
export OPENSSL_LIB_DIR="${openssl.out}/lib"
'';
}
will, for example, grant you a free acces to OpenSSL ! Feel free to override this to your liking !
Per-project solution
For a more granular solution to this problem a more in-depth review of the direnv wiki will be poorly be needed !