130 lines · 5.0 KB · Nix
RawDownload
{ 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";          };      };    };}