shell.nix

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