55 lines
1.4 KiB
Nix
55 lines
1.4 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}:
|
|
with lib; let
|
|
rustEnv = pkgs.symlinkJoin {
|
|
name = "rustEnv";
|
|
paths = config.machine.pkgsets.rustpkgs.pkgwrap;
|
|
};
|
|
in
|
|
mkIf (elem "emacs::rust" config.machine.pkgs) {
|
|
programs.emacs.init.usePackage.rust-mode = {
|
|
enable = true;
|
|
hook =
|
|
[''(rust-mode . (lambda () (cargo-minor-mode)))'']
|
|
++ (
|
|
if (elem "emacs::lsp" config.machine.pkgs)
|
|
then [''(rust-mode . (lambda () (lsp)))'']
|
|
else [''(rust-mode . (lambda () (racer-mode)))'']
|
|
);
|
|
mode = [''("\\.rs\\'" . rust-mode)''];
|
|
command = ["rust-mode"];
|
|
bindLocal = optionalAttrs (elem "emacs::company" config.machine.pkgs) {
|
|
rust-mode-map = {
|
|
"<tab>" = "company-indent-or-complete-common";
|
|
};
|
|
};
|
|
config = ''
|
|
(setq rust-rustfmt-bin "${rustEnv}/bin/rustfmt")
|
|
(setq rust-format-on-save t)
|
|
'';
|
|
};
|
|
|
|
programs.emacs.init.usePackage.cargo = {
|
|
enable = true;
|
|
defer = true;
|
|
};
|
|
|
|
programs.emacs.init.usePackage.racer = {
|
|
enable = true;
|
|
defer = true;
|
|
hook =
|
|
[
|
|
''(racer-mode . (lambda () (eldoc-mode)))''
|
|
]
|
|
++ optional (elem "emacs::company" config.machine.pkgs) ''(racer-mode . (lambda () (company-mode)))'';
|
|
|
|
config = ''
|
|
(setq racer-rust-src-path "${rustEnv}/lib/rustlib/src/rust/src")
|
|
(setq racer-cmd "${rustEnv}/bin/racer")
|
|
'';
|
|
};
|
|
}
|