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.bzip2
26      pkgs.curl
27      pkgs.fontconfig
28      pkgs.freetype
29      pkgs.libgit2
30      pkgs.openssl
31      pkgs.sqlite
32      pkgs.stdenv.cc.cc
33      pkgs.zlib
34      pkgs.zstd
35      pkgs.rustToolchain
36    ]
37    ++ lib.optionals pkgs.stdenv.hostPlatform.isLinux [
38      pkgs.alsa-lib
39      pkgs.libxkbcommon
40      pkgs.wayland
41      pkgs.xorg.libxcb
42      pkgs.vulkan-loader
43    ]
44    ++ lib.optional pkgs.stdenv.hostPlatform.isDarwin pkgs.apple-sdk_15;
45
46  LD_LIBRARY_PATH = lib.makeLibraryPath buildInputs;
47
48  PROTOC="${pkgs.protobuf}/bin/protoc";
49
50  # We set SDKROOT and DEVELOPER_DIR to the Xcode ones instead of the nixpkgs ones,
51  # because we need Swift 6.0 and nixpkgs doesn't have it.
52  # Xcode is required for development anyways
53  shellHook = lib.optionalString pkgs.stdenv.hostPlatform.isDarwin ''
54      export SDKROOT="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk";
55      export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer";
56    '';
57
58  FONTCONFIG_FILE = pkgs.makeFontsConf {
59    fontDirectories = [
60      "./assets/fonts/zed-mono"
61      "./assets/fonts/zed-sans"
62    ];
63  };
64  ZSTD_SYS_USE_PKG_CONFIG = true;
65}