mirror of
https://github.com/helix-editor/helix
synced 2026-05-03 17:20:38 +02:00
fc170366ab
Previously running `nix develop` (or any other way of entering the devshell) could take a long time due to downloading all of the tree-sitter grammars despite them not being used in the shell. This drops the grammars from the devshell by overriding the grammar filter function to exclude all of them. This way other inputs are still automatically derived from the main helix packages, but grammars are excluded only when building for the devshell. The main package and checks still builds with grammars included.
100 lines
2.9 KiB
Nix
100 lines
2.9 KiB
Nix
{
|
|
description = "A post-modern text editor.";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
|
rust-overlay = {
|
|
url = "github:oxalica/rust-overlay";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
};
|
|
|
|
outputs = {
|
|
self,
|
|
nixpkgs,
|
|
rust-overlay,
|
|
...
|
|
}: let
|
|
inherit (nixpkgs) lib;
|
|
eachSystem = lib.genAttrs lib.systems.flakeExposed;
|
|
pkgsFor = eachSystem (system:
|
|
import nixpkgs {
|
|
localSystem.system = system;
|
|
overlays = [(import rust-overlay) self.overlays.helix];
|
|
});
|
|
gitRev = self.rev or self.dirtyRev or null;
|
|
in {
|
|
packages = eachSystem (system: {
|
|
inherit (pkgsFor.${system}) helix;
|
|
/*
|
|
The default Helix build. Uses the latest stable Rust toolchain, and unstable
|
|
nixpkgs.
|
|
|
|
The build inputs can be overridden with the following:
|
|
|
|
packages.${system}.default.override { rustPlatform = newPlatform; };
|
|
|
|
Overriding a derivation attribute can be done as well:
|
|
|
|
packages.${system}.default.overrideAttrs { buildType = "debug"; };
|
|
*/
|
|
default = self.packages.${system}.helix;
|
|
});
|
|
checks =
|
|
lib.mapAttrs (system: pkgs: let
|
|
# Get Helix's MSRV toolchain to build with by default.
|
|
msrvToolchain = pkgs.pkgsBuildHost.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml;
|
|
msrvPlatform = pkgs.makeRustPlatform {
|
|
cargo = msrvToolchain;
|
|
rustc = msrvToolchain;
|
|
};
|
|
in {
|
|
helix = self.packages.${system}.helix.override {
|
|
rustPlatform = msrvPlatform;
|
|
};
|
|
})
|
|
pkgsFor;
|
|
|
|
# Devshell behavior is preserved.
|
|
devShells =
|
|
lib.mapAttrs (system: pkgs: {
|
|
default = let
|
|
commonRustFlagsEnv = "-C link-arg=-fuse-ld=lld -C target-cpu=native --cfg tokio_unstable";
|
|
platformRustFlagsEnv = lib.optionalString pkgs.stdenv.isLinux "-Clink-arg=-Wl,--no-rosegment";
|
|
in
|
|
pkgs.mkShell {
|
|
inputsFrom = [
|
|
(self.checks.${system}.helix.override {
|
|
includeGrammarIf = _: false;
|
|
})
|
|
];
|
|
nativeBuildInputs = with pkgs;
|
|
[
|
|
lld
|
|
cargo-flamegraph
|
|
rust-bin.nightly.latest.rust-analyzer
|
|
]
|
|
++ (lib.optional (stdenv.isx86_64 && stdenv.isLinux) cargo-tarpaulin)
|
|
++ (lib.optional stdenv.isLinux lldb);
|
|
shellHook = ''
|
|
export RUST_BACKTRACE="1"
|
|
export RUSTFLAGS="''${RUSTFLAGS:-""} ${commonRustFlagsEnv} ${platformRustFlagsEnv}"
|
|
'';
|
|
};
|
|
})
|
|
pkgsFor;
|
|
|
|
overlays = {
|
|
helix = final: prev: {
|
|
helix = final.callPackage ./default.nix {inherit gitRev;};
|
|
};
|
|
|
|
default = self.overlays.helix;
|
|
};
|
|
};
|
|
nixConfig = {
|
|
extra-substituters = ["https://helix.cachix.org"];
|
|
extra-trusted-public-keys = ["helix.cachix.org-1:ejp9KQpR1FBI2onstMQ34yogDm4OgU2ru6lIwPvuCVs="];
|
|
};
|
|
}
|