{ lib, rustPlatform, fetchFromGitHub, copyDesktopItems, curl, pkg-config, protobuf, xcbuild, fontconfig, freetype, libgit2, openssl, sqlite, zlib, zstd, alsa-lib, libxkbcommon, wayland, xorg, stdenv, darwin, makeFontsConf, vulkan-loader, }: rustPlatform.buildRustPackage rec { pname = "zed"; version = "0.134.4"; src = fetchFromGitHub { owner = "zed-industries"; repo = "zed"; rev = "refs/tags/v${version}"; hash = "sha256-2/onI/tc5FlwyRuu4Yq3xJYqwNXhnIrCebQQpCKGzfs="; fetchSubmodules = true; }; cargoLock = { lockFile = ./Cargo.lock; outputHashes = { "async-pipe-0.1.3" = "sha256-g120X88HGT8P6GNCrzpS5SutALx5H+45Sf4iSSxzctE="; "blade-graphics-0.4.0" = "sha256-J6mVvMC8u3+8RGp6qSwU/EpvdtUPyIs2Ry9XGGiimB0="; "font-kit-0.11.0" = "sha256-+4zMzjFyMS60HfLMEXGfXqKn6P+pOngLA45udV09DM8="; "heed-0.20.0-alpha.9" = "sha256-8bzoMmfKS+6AmeTzh0/F7WM9OBdIex+NYFER28bpA/s="; "lsp-types-0.94.1" = "sha256-kplgPsafrgZFMI1D9pQCwmg+FKMn5HNWLbcgdXHUFVU="; "nvim-rs-0.6.0-pre" = "sha256-bdWWuCsBv01mnPA5e5zRpq48BgOqaqIcAu+b7y1NnM8="; "pathfinder_simd-0.5.3" = "sha256-bakBcAQZJdHQPXybe0zoMzE49aOHENQY7/ZWZUMt+pM="; "taffy-0.3.11" = "sha256-0hXOEj6IjSW8e1t+rvxBFX6V9XRum3QO2Des1XlHJEw="; "tree-sitter-0.20.100" = "sha256-xZDWAjNIhWC2n39H7jJdKDgyE/J6+MAVSa8dHtZ6CLE="; "tree-sitter-bash-0.20.4" = "sha256-VP7rJfE/k8KV1XN1w5f0YKjCnDMYU1go/up0zj1mabM="; "tree-sitter-cpp-0.20.0" = "sha256-2QYEFkpwcRmh2kf4qEAL2a5lGSa316CetOhF73e7rEM="; "tree-sitter-css-0.19.0" = "sha256-5Qti/bFac2A1PJxqZEOuSLK3GGKYwPDKAp3OOassBxU="; "tree-sitter-elixir-0.1.0" = "sha256-hBHqQ3eBjknRPJjP+lQJU6NPFhUMtiv4FbKsTw28Bog="; "tree-sitter-go-0.19.1" = "sha256-5+L5QqVjZyeh+sKfxKZWrjIBFE5xM9KZlHcLiHzJCIA="; "tree-sitter-gomod-1.0.2" = "sha256-OPtqXe6OMC9c5dgFH8Msj+6DU01LvLKVbCzGLj0PnLI="; "tree-sitter-gowork-0.0.1" = "sha256-lM4L4Ap/c8uCr4xUw9+l/vaGb3FxxnuZI0+xKYFDPVg="; "tree-sitter-heex-0.0.1" = "sha256-6LREyZhdTDt3YHVRPDyqCaDXqcsPlHOoMFDb2B3+3xM="; "tree-sitter-jsdoc-0.20.0" = "sha256-fKscFhgZ/BQnYnE5EwurFZgiE//O0WagRIHVtDyes/Y="; "tree-sitter-json-0.20.0" = "sha256-fZNftzNavJQPQE4S1VLhRyGQRoJgbWA5xTPa8ZI5UX4="; "tree-sitter-markdown-0.0.1" = "sha256-F8VVd7yYa4nCrj/HEC13BTC7lkV3XSb2Z3BNi/VfSbs="; "tree-sitter-proto-0.0.2" = "sha256-W0diP2ByAXYrc7Mu/sbqST6lgVIyHeSBmH7/y/X3NhU="; "tree-sitter-typescript-0.20.2" = "sha256-cpOAtfvlffS57BrXaoa2xa9NUYw0AsHxVI8PrcpgZCQ="; "tree-sitter-yaml-0.0.1" = "sha256-S59jLlipBI2kwFuZDMmpv0TOZpGyXpbAizN3yC6wJ5I="; }; }; nativeBuildInputs = [ copyDesktopItems curl pkg-config protobuf rustPlatform.bindgenHook ] ++ lib.optionals stdenv.isDarwin [ xcbuild.xcrun ]; buildInputs = [ curl fontconfig freetype libgit2 openssl sqlite zlib zstd ] ++ lib.optionals stdenv.isLinux [ alsa-lib libxkbcommon wayland xorg.libxcb ] ++ lib.optionals stdenv.isDarwin ( with darwin.apple_sdk.frameworks; [ AppKit CoreAudio CoreFoundation CoreGraphics CoreMedia CoreServices CoreText Foundation IOKit Metal Security SystemConfiguration VideoToolbox ] ); buildFeatures = [ "gpui/runtime_shaders" ]; env = { ZSTD_SYS_USE_PKG_CONFIG = true; FONTCONFIG_FILE = makeFontsConf { fontDirectories = [ "${src}/assets/fonts/zed-mono" "${src}/assets/fonts/zed-sans" ]; }; }; postFixup = lib.optionalString stdenv.isLinux '' patchelf --add-rpath ${vulkan-loader}/lib $out/bin/* patchelf --add-rpath ${wayland}/lib $out/bin/* ''; checkFlags = lib.optionals stdenv.hostPlatform.isLinux [ # Fails with "On 2823 Failed to find test1:A" "--skip=test_base_keymap" # Fails with "called `Result::unwrap()` on an `Err` value: Invalid keystroke `cmd-k`" # https://github.com/zed-industries/zed/issues/10427 "--skip=test_disabled_keymap_binding" ]; postInstall = '' mv $out/bin/Zed $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 install -D ${src}/crates/zed/resources/zed.desktop $out/share/applications/dev.zed.Zed.desktop ''; meta = with lib; { description = "High-performance, multiplayer code editor from the creators of Atom and Tree-sitter"; homepage = "https://zed.dev"; changelog = "https://github.com/zed-industries/zed/releases/tag/v${version}"; license = licenses.gpl3Only; maintainers = with maintainers; [ GaetanLepage niklaskorz ]; mainProgram = "zed"; platforms = platforms.all; # Currently broken on darwin: https://github.com/NixOS/nixpkgs/pull/303233#issuecomment-2048650618 broken = stdenv.isDarwin; }; }