zed/nix/build.nix
Marek Fajkus 51faf4a1cd
Add missing cmake dependency to Nix build (#17968)
cmake is required during build of dependecies and thus needs to be
supplied in nativeBuildInputs (dependecies required for build not during
runtime).

This fixes (sandboxed) nix builds of the project.

Release Notes:

- N/A
2024-09-17 16:28:52 -04:00

144 lines
3.3 KiB
Nix

{
lib,
craneLib,
rustPlatform,
clang,
llvmPackages_18,
mold-wrapped,
copyDesktopItems,
curl,
perl,
pkg-config,
protobuf,
fontconfig,
freetype,
libgit2,
openssl,
sqlite,
zlib,
zstd,
alsa-lib,
libxkbcommon,
wayland,
libglvnd,
xorg,
makeFontsConf,
vulkan-loader,
envsubst,
stdenvAdapters,
nix-gitignore,
withGLES ? false,
cmake,
}: let
includeFilter = path: type: let
baseName = baseNameOf (toString path);
parentDir = dirOf path;
inRootDir = type == "directory" && parentDir == ../.;
in
!(inRootDir && (baseName == "docs" || baseName == ".github" || baseName == "script" || baseName == ".git" || baseName == "target"));
src = lib.cleanSourceWith {
src = nix-gitignore.gitignoreSource [] ../.;
filter = includeFilter;
name = "source";
};
stdenv = stdenvAdapters.useMoldLinker llvmPackages_18.stdenv;
commonArgs =
craneLib.crateNameFromCargoToml {cargoToml = ../crates/zed/Cargo.toml;}
// {
inherit src stdenv;
nativeBuildInputs = [
clang
copyDesktopItems
curl
mold-wrapped
perl
pkg-config
protobuf
rustPlatform.bindgenHook
cmake
];
buildInputs = [
curl
fontconfig
freetype
libgit2
openssl
sqlite
zlib
zstd
alsa-lib
libxkbcommon
wayland
xorg.libxcb
];
ZSTD_SYS_USE_PKG_CONFIG = true;
FONTCONFIG_FILE = makeFontsConf {
fontDirectories = [
"../assets/fonts/zed-mono"
"../assets/fonts/zed-sans"
];
};
ZED_UPDATE_EXPLANATION = "zed has been installed using nix. Auto-updates have thus been disabled.";
};
cargoArtifacts = craneLib.buildDepsOnly commonArgs;
gpu-lib =
if withGLES
then libglvnd
else vulkan-loader;
zed = craneLib.buildPackage (commonArgs
// {
inherit cargoArtifacts;
cargoExtraArgs = "--package=zed --package=cli";
buildFeatures = ["gpui/runtime_shaders"];
doCheck = false;
RUSTFLAGS =
if withGLES
then "--cfg gles"
else "";
postFixup = ''
patchelf --add-rpath ${gpu-lib}/lib $out/libexec/*
patchelf --add-rpath ${wayland}/lib $out/libexec/*
'';
postInstall = ''
mkdir -p $out/bin $out/libexec
mv $out/bin/zed $out/libexec/zed-editor
mv $out/bin/cli $out/bin/zed
install -D crates/zed/resources/app-icon@2x.png $out/share/icons/hicolor/1024x1024@2x/apps/zed.png
install -D crates/zed/resources/app-icon.png $out/share/icons/hicolor/512x512/apps/zed.png
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"
'';
});
in
zed
// {
meta = with lib; {
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 = licenses.gpl3Only;
mainProgram = "zed";
platforms = platforms.linux;
};
}