{ inputs, ... }:{ perSystem = { pkgs, system, ... }: let # NOTE: Duplicated because this is in a separate flake-parts partition # than ./packages.nix mkZed = import ../toolchain.nix { inherit inputs; }; zed-editor = mkZed pkgs; # mdBook pinned to 0.4.40 via a dedicated nixpkgs input, because the docs # rely on behavior that newer mdBook releases break (see # `crates/docs_preprocessor/Cargo.toml`). mdbook = (import inputs.nixpkgs-mdbook { inherit system; }).mdbook; # Prebuilt docs preprocessor/postprocessor binary. `docs/book.toml` # defaults to `cargo run -p docs_preprocessor` so non-Nix contributors are # unaffected; in the devshell we point mdBook at this prebuilt binary via # the `MDBOOK_*` env vars below so `mdbook build docs` doesn't have to # compile the preprocessor on every run. # # We reuse `zed-editor`'s crane builder and shared arguments (exposed via # `passthru`) rather than `overrideAttrs`, because crane bakes # `cargoExtraArgs` into the build command at evaluation time. docs-preprocessor = zed-editor.passthru.craneLib.buildPackage ( zed-editor.passthru.commonArgs // { inherit (zed-editor.passthru) cargoArtifacts; pname = "zed-docs-preprocessor"; cargoExtraArgs = "-p docs_preprocessor --locked"; dontUseCmakeConfigure = true; meta = { description = "mdBook preprocessor and postprocessor for the Zed docs"; mainProgram = "docs_preprocessor"; }; } ); rustBin = inputs.rust-overlay.lib.mkRustBin { } pkgs; rustToolchain = rustBin.fromRustupToolchainFile ../../rust-toolchain.toml; baseEnv = (zed-editor.overrideAttrs (attrs: { passthru.env = attrs.env; })).env; # exfil `env`; it's not in drvAttrs # Musl cross-compiler for building remote_server muslCross = pkgs.pkgsCross.musl64; # Cargo build timings wrapper script wrappedCargo = pkgs.writeShellApplication { name = "cargo"; runtimeInputs = [ pkgs.nodejs ]; text = let pathToCargoScript = ./. + "/../../script/cargo"; in '' NIX_WRAPPER=1 CARGO=${rustToolchain}/bin/cargo ${pathToCargoScript} "$@" ''; }; in { devShells.default = (pkgs.mkShell.override { inherit (zed-editor) stdenv; }) { name = "zed-editor-dev"; inputsFrom = [ zed-editor ]; packages = with pkgs; [ wrappedCargo # must be first, to shadow the `cargo` provided by `rustToolchain` rustToolchain # cargo, rustc, and rust-toolchain.toml components included cargo-nextest cargo-hakari cargo-machete cargo-zigbuild # TODO: package protobuf-language-server for editing zed.proto # TODO: add other tools used in our scripts # `build.nix` adds this to the `zed-editor` wrapper (see `postFixup`) # we'll just put it on `$PATH`: nodejs_22 zig # Documentation tooling: `nix develop -c mdbook build docs` mdbook docs-preprocessor # A11y testing infra gobject-introspection at-spi2-core (python3.withPackages (ps: [ ps.pyatspi ps.pygobject3 ])) ] ++ lib.optionals stdenv.hostPlatform.isLinux [ accerciser ]; env = (removeAttrs baseEnv [ "LK_CUSTOM_WEBRTC" # download the staticlib during the build as usual "ZED_UPDATE_EXPLANATION" # allow auto-updates "CARGO_PROFILE" # let you specify the profile "TARGET_DIR" ]) // { # note: different than `$FONTCONFIG_FILE` in `build.nix` – this refers to relative paths # outside the nix store instead of to `$src` FONTCONFIG_FILE = pkgs.makeFontsConf { fontDirectories = [ "./assets/fonts/lilex" "./assets/fonts/ibm-plex-sans" ]; }; PROTOC = "${pkgs.protobuf}/bin/protoc"; # Point mdBook at the prebuilt preprocessor/postprocessor binary # instead of `cargo run`. mdBook lowercases these keys and turns `_` # into `-`, so they map to `preprocessor.zed-docs-preprocessor.command` # and `output.zed-html.command` in `docs/book.toml`. MDBOOK_PREPROCESSOR__ZED_DOCS_PREPROCESSOR__COMMAND = "${docs-preprocessor}/bin/docs_preprocessor"; MDBOOK_OUTPUT__ZED_HTML__COMMAND = "${docs-preprocessor}/bin/docs_preprocessor postprocess"; ZED_ZSTD_MUSL_LIB = "${pkgs.pkgsCross.musl64.pkgsStatic.zstd.out}/lib"; # For aws-lc-sys musl cross-compilation CC_x86_64_unknown_linux_musl = "${muslCross.stdenv.cc}/bin/x86_64-unknown-linux-musl-gcc"; }; }; };}
{ inputs, ... }:
{
perSystem =
{ pkgs, system, ... }:
let
# NOTE: Duplicated because this is in a separate flake-parts partition
# than ./packages.nix
mkZed = import ../toolchain.nix { inherit inputs; };
zed-editor = mkZed pkgs;
# mdBook pinned to 0.4.40 via a dedicated nixpkgs input, because the docs
# rely on behavior that newer mdBook releases break (see
# `crates/docs_preprocessor/Cargo.toml`).
mdbook = (import inputs.nixpkgs-mdbook { inherit system; }).mdbook;
# Prebuilt docs preprocessor/postprocessor binary. `docs/book.toml`
# defaults to `cargo run -p docs_preprocessor` so non-Nix contributors are
# unaffected; in the devshell we point mdBook at this prebuilt binary via
# the `MDBOOK_*` env vars below so `mdbook build docs` doesn't have to
# compile the preprocessor on every run.
#
# We reuse `zed-editor`'s crane builder and shared arguments (exposed via
# `passthru`) rather than `overrideAttrs`, because crane bakes
# `cargoExtraArgs` into the build command at evaluation time.
docs-preprocessor = zed-editor.passthru.craneLib.buildPackage (
zed-editor.passthru.commonArgs
// {
inherit (zed-editor.passthru) cargoArtifacts;
pname = "zed-docs-preprocessor";
cargoExtraArgs = "-p docs_preprocessor --locked";
dontUseCmakeConfigure = true;
meta = {
description = "mdBook preprocessor and postprocessor for the Zed docs";
mainProgram = "docs_preprocessor";
};
}
);
rustBin = inputs.rust-overlay.lib.mkRustBin { } pkgs;
rustToolchain = rustBin.fromRustupToolchainFile ../../rust-toolchain.toml;
baseEnv =
(zed-editor.overrideAttrs (attrs: {
passthru.env = attrs.env;
})).env; # exfil `env`; it's not in drvAttrs
# Musl cross-compiler for building remote_server
muslCross = pkgs.pkgsCross.musl64;
# Cargo build timings wrapper script
wrappedCargo = pkgs.writeShellApplication {
name = "cargo";
runtimeInputs = [ pkgs.nodejs ];
text =
let
pathToCargoScript = ./. + "/../../script/cargo";
in
''
NIX_WRAPPER=1 CARGO=${rustToolchain}/bin/cargo ${pathToCargoScript} "$@"
'';
};
in
{
devShells.default = (pkgs.mkShell.override { inherit (zed-editor) stdenv; }) {
name = "zed-editor-dev";
inputsFrom = [ zed-editor ];
packages =
with pkgs;
[
wrappedCargo # must be first, to shadow the `cargo` provided by `rustToolchain`
rustToolchain # cargo, rustc, and rust-toolchain.toml components included
cargo-nextest
cargo-hakari
cargo-machete
cargo-zigbuild
# TODO: package protobuf-language-server for editing zed.proto
# TODO: add other tools used in our scripts
# `build.nix` adds this to the `zed-editor` wrapper (see `postFixup`)
# we'll just put it on `$PATH`:
nodejs_22
zig
# Documentation tooling: `nix develop -c mdbook build docs`
mdbook
docs-preprocessor
# A11y testing infra
gobject-introspection
at-spi2-core
(python3.withPackages (ps: [
ps.pyatspi
ps.pygobject3
]))
]
++ lib.optionals stdenv.hostPlatform.isLinux [ accerciser ];
env =
(removeAttrs baseEnv [
"LK_CUSTOM_WEBRTC" # download the staticlib during the build as usual
"ZED_UPDATE_EXPLANATION" # allow auto-updates
"CARGO_PROFILE" # let you specify the profile
"TARGET_DIR"
])
// {
# note: different than `$FONTCONFIG_FILE` in `build.nix` – this refers to relative paths
# outside the nix store instead of to `$src`
FONTCONFIG_FILE = pkgs.makeFontsConf {
fontDirectories = [
"./assets/fonts/lilex"
"./assets/fonts/ibm-plex-sans"
];
};
PROTOC = "${pkgs.protobuf}/bin/protoc";
# Point mdBook at the prebuilt preprocessor/postprocessor binary
# instead of `cargo run`. mdBook lowercases these keys and turns `_`
# into `-`, so they map to `preprocessor.zed-docs-preprocessor.command`
# and `output.zed-html.command` in `docs/book.toml`.
MDBOOK_PREPROCESSOR__ZED_DOCS_PREPROCESSOR__COMMAND = "${docs-preprocessor}/bin/docs_preprocessor";
MDBOOK_OUTPUT__ZED_HTML__COMMAND = "${docs-preprocessor}/bin/docs_preprocessor postprocess";
ZED_ZSTD_MUSL_LIB = "${pkgs.pkgsCross.musl64.pkgsStatic.zstd.out}/lib";
# For aws-lc-sys musl cross-compilation
CC_x86_64_unknown_linux_musl = "${muslCross.stdenv.cc}/bin/x86_64-unknown-linux-musl-gcc";
};
};
};
}