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