shell.nix

 1{
 2  pkgs ? import <nixpkgs> { },
 3}:
 4let
 5  inherit (pkgs) lib;
 6in
 7pkgs.mkShell rec {
 8  packages =
 9    [
10      pkgs.clang
11      pkgs.curl
12      pkgs.cmake
13      pkgs.perl
14      pkgs.pkg-config
15      pkgs.protobuf
16      pkgs.rustPlatform.bindgenHook
17      pkgs.rust-analyzer
18    ]
19    ++ lib.optionals pkgs.stdenv.hostPlatform.isLinux [
20      pkgs.mold
21    ];
22
23  buildInputs =
24    [
25      pkgs.curl
26      pkgs.fontconfig
27      pkgs.freetype
28      pkgs.libgit2
29      pkgs.openssl
30      pkgs.sqlite
31      pkgs.zlib
32      pkgs.zstd
33      pkgs.rustToolchain
34    ]
35    ++ lib.optionals pkgs.stdenv.hostPlatform.isLinux [
36      pkgs.alsa-lib
37      pkgs.libxkbcommon
38      pkgs.wayland
39      pkgs.xorg.libxcb
40      pkgs.vulkan-loader
41    ]
42    ++ lib.optional pkgs.stdenv.hostPlatform.isDarwin pkgs.apple-sdk_15;
43
44  # We set SDKROOT and DEVELOPER_DIR to the Xcode ones instead of the nixpkgs ones,
45  # because we need Swift 6.0 and nixpkgs doesn't have it.
46  # Xcode is required for development anyways
47  shellHook =
48    ''
49      export LD_LIBRARY_PATH="${lib.makeLibraryPath buildInputs}:$LD_LIBRARY_PATH"
50      export PROTOC="${pkgs.protobuf}/bin/protoc"
51    ''
52    + lib.optionalString pkgs.stdenv.hostPlatform.isDarwin ''
53      export SDKROOT="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk";
54      export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer";
55    '';
56
57  FONTCONFIG_FILE = pkgs.makeFontsConf {
58    fontDirectories = [
59      "./assets/fonts/zed-mono"
60      "./assets/fonts/zed-sans"
61    ];
62  };
63  ZSTD_SYS_USE_PKG_CONFIG = true;
64}