.envrc 🔗
@@ -1,2 +0,0 @@
-watch_file nix/shell.nix
-use flake
Stanislav Alekseev created
This removes .envrc, putting it into gitignore as well as building with
crane, as it does not require an up to date hash for a FOD.
Release Notes:
- N/A
cc @mrnugget @jaredramirez
.envrc | 2
.gitignore | 1
flake.lock | 16 ++
flake.nix | 14 +
nix/build.nix | 386 +++++++++++++++++++++++++---------------------------
5 files changed, 215 insertions(+), 204 deletions(-)
@@ -1,2 +0,0 @@
-watch_file nix/shell.nix
-use flake
@@ -1,4 +1,5 @@
/.direnv
+.envrc
.idea
**/target
**/cargo-target
@@ -1,5 +1,20 @@
{
"nodes": {
+ "crane": {
+ "locked": {
+ "lastModified": 1732407143,
+ "narHash": "sha256-qJOGDT6PACoX+GbNH2PPx2ievlmtT1NVeTB80EkRLys=",
+ "owner": "ipetkov",
+ "repo": "crane",
+ "rev": "f2b4b472983817021d9ffb60838b2b36b9376b20",
+ "type": "github"
+ },
+ "original": {
+ "owner": "ipetkov",
+ "repo": "crane",
+ "type": "github"
+ }
+ },
"flake-compat": {
"locked": {
"lastModified": 1696426674,
@@ -33,6 +48,7 @@
},
"root": {
"inputs": {
+ "crane": "crane",
"flake-compat": "flake-compat",
"nixpkgs": "nixpkgs",
"rust-overlay": "rust-overlay"
@@ -7,11 +7,17 @@
url = "github:oxalica/rust-overlay";
inputs.nixpkgs.follows = "nixpkgs";
};
+ crane.url = "github:ipetkov/crane";
flake-compat.url = "github:edolstra/flake-compat";
};
outputs =
- { nixpkgs, rust-overlay, ... }:
+ {
+ nixpkgs,
+ rust-overlay,
+ crane,
+ ...
+ }:
let
systems = [
"x86_64-linux"
@@ -27,10 +33,8 @@
};
zed-editor = final: prev: {
zed-editor = final.callPackage ./nix/build.nix {
- rustPlatform = final.makeRustPlatform {
- cargo = final.rustToolchain;
- rustc = final.rustToolchain;
- };
+ crane = crane.mkLib final;
+ rustToolchain = final.rustToolchain;
};
};
};
@@ -1,6 +1,7 @@
{
lib,
- rustPlatform,
+ crane,
+ rustToolchain,
fetchpatch,
clang,
cmake,
@@ -26,7 +27,6 @@
vulkan-loader,
envsubst,
cargo-about,
- versionCheckHook,
cargo-bundle,
git,
apple-sdk_15,
@@ -50,207 +50,199 @@ let
in
!(
inRootDir
- && (
- baseName == "docs"
- || baseName == ".github"
- || baseName == "script"
- || baseName == ".git"
- || baseName == "target"
- )
+ && (baseName == "docs" || baseName == ".github" || baseName == ".git" || baseName == "target")
);
-in
-rustPlatform.buildRustPackage rec {
- pname = "zed-editor";
- version = "nightly";
-
- src = lib.cleanSourceWith {
+ craneLib = crane.overrideToolchain rustToolchain;
+ commonSrc = lib.cleanSourceWith {
src = nix-gitignore.gitignoreSource [ ] ../.;
filter = includeFilter;
name = "source";
};
-
- patches =
- [
- # Zed uses cargo-install to install cargo-about during the script execution.
- # We provide cargo-about ourselves and can skip this step.
- # Until https://github.com/zed-industries/zed/issues/19971 is fixed,
- # we also skip any crate for which the license cannot be determined.
- (fetchpatch {
- url = "https://raw.githubusercontent.com/NixOS/nixpkgs/1fd02d90c6c097f91349df35da62d36c19359ba7/pkgs/by-name/ze/zed-editor/0001-generate-licenses.patch";
- hash = "sha256-cLgqLDXW1JtQ2OQFLd5UolAjfy7bMoTw40lEx2jA2pk=";
- })
- ]
- ++ lib.optionals stdenv.hostPlatform.isDarwin [
- # Livekit requires Swift 6
- # We need this until livekit-rust sdk is used
- (fetchpatch {
- url = "https://raw.githubusercontent.com/NixOS/nixpkgs/1fd02d90c6c097f91349df35da62d36c19359ba7/pkgs/by-name/ze/zed-editor/0002-disable-livekit-darwin.patch";
- hash = "sha256-whZ7RaXv8hrVzWAveU3qiBnZSrvGNEHTuyNhxgMIo5w=";
- })
- ];
-
- useFetchCargoVendor = true;
- cargoHash = "sha256-KURM1W9UP65BU9gbvEBgQj3jwSYfQT7X18gcSmOMguI=";
-
- nativeBuildInputs =
- [
- clang
- cmake
- copyDesktopItems
- curl
- perl
- pkg-config
- protobuf
- rustPlatform.bindgenHook
- cargo-about
- ]
- ++ lib.optionals stdenv.hostPlatform.isLinux [ makeWrapper ]
- ++ lib.optionals stdenv.hostPlatform.isDarwin [ cargo-bundle ];
-
- dontUseCmakeConfigure = true;
-
- buildInputs =
- [
- curl
- fontconfig
- freetype
- libgit2
- openssl
- sqlite
- zlib
- zstd
- ]
- ++ lib.optionals stdenv.hostPlatform.isLinux [
- alsa-lib
- libxkbcommon
- wayland
- xorg.libxcb
- ]
- ++ lib.optionals stdenv.hostPlatform.isDarwin [
- apple-sdk_15
- (darwinMinVersionHook "10.15")
- ];
-
- cargoBuildFlags = [
- "--package=zed"
- "--package=cli"
- ];
-
- buildFeatures = lib.optionals stdenv.hostPlatform.isDarwin [ "gpui/runtime_shaders" ];
-
- env = {
- ZSTD_SYS_USE_PKG_CONFIG = true;
- FONTCONFIG_FILE = makeFontsConf {
- fontDirectories = [
- "${src}/assets/fonts/plex-mono"
- "${src}/assets/fonts/plex-sans"
+ commonArgs = rec {
+ pname = "zed-editor";
+ version = "nightly";
+
+ src = commonSrc;
+
+ nativeBuildInputs =
+ [
+ clang
+ cmake
+ copyDesktopItems
+ curl
+ perl
+ pkg-config
+ protobuf
+ cargo-about
+ ]
+ ++ lib.optionals stdenv.hostPlatform.isLinux [ makeWrapper ]
+ ++ lib.optionals stdenv.hostPlatform.isDarwin [ cargo-bundle ];
+
+ buildInputs =
+ [
+ curl
+ fontconfig
+ freetype
+ libgit2
+ openssl
+ sqlite
+ zlib
+ zstd
+ ]
+ ++ lib.optionals stdenv.hostPlatform.isLinux [
+ alsa-lib
+ libxkbcommon
+ wayland
+ xorg.libxcb
+ ]
+ ++ lib.optionals stdenv.hostPlatform.isDarwin [
+ apple-sdk_15
+ (darwinMinVersionHook "10.15")
];
+
+ env = {
+ ZSTD_SYS_USE_PKG_CONFIG = true;
+ FONTCONFIG_FILE = makeFontsConf {
+ fontDirectories = [
+ "${src}/assets/fonts/plex-mono"
+ "${src}/assets/fonts/plex-sans"
+ ];
+ };
+ ZED_UPDATE_EXPLANATION = "Zed has been installed using Nix. Auto-updates have thus been disabled.";
+ RELEASE_VERSION = version;
};
- ZED_UPDATE_EXPLANATION = "Zed has been installed using Nix. Auto-updates have thus been disabled.";
- RELEASE_VERSION = version;
};
+ cargoArtifacts = craneLib.buildDepsOnly commonArgs;
+in
+craneLib.buildPackage (
+ commonArgs
+ // rec {
+ inherit cargoArtifacts;
+
+ patches =
+ [
+ # Zed uses cargo-install to install cargo-about during the script execution.
+ # We provide cargo-about ourselves and can skip this step.
+ # Until https://github.com/zed-industries/zed/issues/19971 is fixed,
+ # we also skip any crate for which the license cannot be determined.
+ (fetchpatch {
+ url = "https://raw.githubusercontent.com/NixOS/nixpkgs/1fd02d90c6c097f91349df35da62d36c19359ba7/pkgs/by-name/ze/zed-editor/0001-generate-licenses.patch";
+ hash = "sha256-cLgqLDXW1JtQ2OQFLd5UolAjfy7bMoTw40lEx2jA2pk=";
+ })
+ ]
+ ++ lib.optionals stdenv.hostPlatform.isDarwin [
+ # Livekit requires Swift 6
+ # We need this until livekit-rust sdk is used
+ (fetchpatch {
+ url = "https://raw.githubusercontent.com/NixOS/nixpkgs/1fd02d90c6c097f91349df35da62d36c19359ba7/pkgs/by-name/ze/zed-editor/0002-disable-livekit-darwin.patch";
+ hash = "sha256-whZ7RaXv8hrVzWAveU3qiBnZSrvGNEHTuyNhxgMIo5w=";
+ })
+ ];
- RUSTFLAGS = if withGLES then "--cfg gles" else "";
- gpu-lib = if withGLES then libglvnd else vulkan-loader;
-
- preBuild = ''
- bash script/generate-licenses
- '';
-
- postFixup = lib.optionalString stdenv.hostPlatform.isLinux ''
- patchelf --add-rpath ${gpu-lib}/lib $out/libexec/*
- patchelf --add-rpath ${wayland}/lib $out/libexec/*
- wrapProgram $out/libexec/zed-editor --suffix PATH : ${lib.makeBinPath [ nodejs_22 ]}
- '';
-
- preCheck = ''
- export HOME=$(mktemp -d);
- '';
-
- checkFlags =
- [
- # Flaky: unreliably fails on certain hosts (including Hydra)
- "--skip=zed::tests::test_window_edit_state_restoring_enabled"
- ]
- ++ lib.optionals stdenv.hostPlatform.isLinux [
- # Fails on certain hosts (including Hydra) for unclear reason
- "--skip=test_open_paths_action"
- ];
-
- installPhase =
- if stdenv.hostPlatform.isDarwin then
- ''
- runHook preInstall
-
- # cargo-bundle expects the binary in target/release
- mv target/${stdenv.hostPlatform.rust.cargoShortTarget}/release/zed target/release/zed
-
- pushd crates/zed
-
- # Note that this is GNU sed, while Zed's bundle-mac uses BSD sed
- sed -i "s/package.metadata.bundle-stable/package.metadata.bundle/" Cargo.toml
- export CARGO_BUNDLE_SKIP_BUILD=true
- app_path=$(cargo bundle --release | xargs)
-
- # We're not using the fork of cargo-bundle, so we must manually append plist extensions
- # Remove closing tags from Info.plist (last two lines)
- head -n -2 $app_path/Contents/Info.plist > Info.plist
- # Append extensions
- cat resources/info/*.plist >> Info.plist
- # Add closing tags
- printf "</dict>\n</plist>\n" >> Info.plist
- mv Info.plist $app_path/Contents/Info.plist
-
- popd
-
- mkdir -p $out/Applications $out/bin
- # Zed expects git next to its own binary
- ln -s ${git}/bin/git $app_path/Contents/MacOS/git
- mv target/${stdenv.hostPlatform.rust.cargoShortTarget}/release/cli $app_path/Contents/MacOS/cli
- mv $app_path $out/Applications/
-
- # Physical location of the CLI must be inside the app bundle as this is used
- # to determine which app to start
- ln -s $out/Applications/Zed.app/Contents/MacOS/cli $out/bin/zed
-
- runHook postInstall
- ''
- else
- ''
- runHook preInstall
-
- mkdir -p $out/bin $out/libexec
- cp target/${stdenv.hostPlatform.rust.cargoShortTarget}/release/zed $out/libexec/zed-editor
- cp target/${stdenv.hostPlatform.rust.cargoShortTarget}/release/cli $out/bin/zed
-
- install -D ${src}/crates/zed/resources/app-icon@2x.png $out/share/icons/hicolor/1024x1024@2x/apps/zed.png
- install -D ${src}/crates/zed/resources/app-icon.png $out/share/icons/hicolor/512x512/apps/zed.png
-
- # extracted from https://github.com/zed-industries/zed/blob/v0.141.2/script/bundle-linux (envsubst)
- # and https://github.com/zed-industries/zed/blob/v0.141.2/script/install.sh (final desktop file name)
- (
- export DO_STARTUP_NOTIFY="true"
- export APP_CLI="zed"
- export APP_ICON="zed"
- export APP_NAME="Zed"
- export APP_ARGS="%U"
- mkdir -p "$out/share/applications"
- ${lib.getExe envsubst} < "crates/zed/resources/zed.desktop.in" > "$out/share/applications/dev.zed.Zed.desktop"
- )
-
- runHook postInstall
- '';
-
- nativeInstallCheckInputs = [
- versionCheckHook
- ];
-
- meta = {
- description = "High-performance, multiplayer code editor from the creators of Atom and Tree-sitter";
- homepage = "https://zed.dev";
- changelog = "https://zed.dev/releases/preview";
- license = lib.licenses.gpl3Only;
- mainProgram = "zed";
- platforms = lib.platforms.linux ++ lib.platforms.darwin;
- };
-}
+ cargoExtraArgs = "--package=zed --package=cli --features=gpui/runtime_shaders";
+
+ dontUseCmakeConfigure = true;
+ preBuild = ''
+ bash script/generate-licenses
+ '';
+
+ postFixup = lib.optionalString stdenv.hostPlatform.isLinux ''
+ patchelf --add-rpath ${gpu-lib}/lib $out/libexec/*
+ patchelf --add-rpath ${wayland}/lib $out/libexec/*
+ wrapProgram $out/libexec/zed-editor --suffix PATH : ${lib.makeBinPath [ nodejs_22 ]}
+ '';
+
+ RUSTFLAGS = if withGLES then "--cfg gles" else "";
+ gpu-lib = if withGLES then libglvnd else vulkan-loader;
+
+ preCheck = ''
+ export HOME=$(mktemp -d);
+ '';
+
+ cargoTestExtraArgs =
+ "-- "
+ + lib.concatStringsSep " " (
+ [
+ # Flaky: unreliably fails on certain hosts (including Hydra)
+ "--skip=zed::tests::test_window_edit_state_restoring_enabled"
+ ]
+ ++ lib.optionals stdenv.hostPlatform.isLinux [
+ # Fails on certain hosts (including Hydra) for unclear reason
+ "--skip=test_open_paths_action"
+ ]
+ );
+
+ installPhase =
+ if stdenv.hostPlatform.isDarwin then
+ ''
+ runHook preInstall
+
+ # cargo-bundle expects the binary in target/release
+ mv target/release/zed target/release/zed
+
+ pushd crates/zed
+
+ # Note that this is GNU sed, while Zed's bundle-mac uses BSD sed
+ sed -i "s/package.metadata.bundle-stable/package.metadata.bundle/" Cargo.toml
+ export CARGO_BUNDLE_SKIP_BUILD=true
+ app_path=$(cargo bundle --release | xargs)
+
+ # We're not using the fork of cargo-bundle, so we must manually append plist extensions
+ # Remove closing tags from Info.plist (last two lines)
+ head -n -2 $app_path/Contents/Info.plist > Info.plist
+ # Append extensions
+ cat resources/info/*.plist >> Info.plist
+ # Add closing tags
+ printf "</dict>\n</plist>\n" >> Info.plist
+ mv Info.plist $app_path/Contents/Info.plist
+
+ popd
+
+ mkdir -p $out/Applications $out/bin
+ # Zed expects git next to its own binary
+ ln -s ${git}/bin/git $app_path/Contents/MacOS/git
+ mv target/release/cli $app_path/Contents/MacOS/cli
+ mv $app_path $out/Applications/
+
+ # Physical location of the CLI must be inside the app bundle as this is used
+ # to determine which app to start
+ ln -s $out/Applications/Zed.app/Contents/MacOS/cli $out/bin/zed
+
+ runHook postInstall
+ ''
+ else
+ ''
+ runHook preInstall
+
+ mkdir -p $out/bin $out/libexec
+ cp target/release/zed $out/libexec/zed-editor
+ cp target/release/cli $out/bin/zed
+
+ install -D ${commonSrc}/crates/zed/resources/app-icon@2x.png $out/share/icons/hicolor/1024x1024@2x/apps/zed.png
+ install -D ${commonSrc}/crates/zed/resources/app-icon.png $out/share/icons/hicolor/512x512/apps/zed.png
+
+ # extracted from https://github.com/zed-industries/zed/blob/v0.141.2/script/bundle-linux (envsubst)
+ # and https://github.com/zed-industries/zed/blob/v0.141.2/script/install.sh (final desktop file name)
+ (
+ export DO_STARTUP_NOTIFY="true"
+ export APP_CLI="zed"
+ export APP_ICON="zed"
+ export APP_NAME="Zed"
+ export APP_ARGS="%U"
+ mkdir -p "$out/share/applications"
+ ${lib.getExe envsubst} < "crates/zed/resources/zed.desktop.in" > "$out/share/applications/dev.zed.Zed.desktop"
+ )
+
+ runHook postInstall
+ '';
+
+ meta = {
+ description = "High-performance, multiplayer code editor from the creators of Atom and Tree-sitter";
+ homepage = "https://zed.dev";
+ changelog = "https://zed.dev/releases/preview";
+ license = lib.licenses.gpl3Only;
+ mainProgram = "zed";
+ platforms = lib.platforms.linux ++ lib.platforms.darwin;
+ };
+ }
+)