diff --git a/flake.nix b/flake.nix
index 8d2bf779bd..31f2832939 100644
--- a/flake.nix
+++ b/flake.nix
@@ -39,27 +39,27 @@
{
inputs = {
- # Use the master/unstable branch of nixpkgs. The latest stable, 22.11,
- # does not contain 'perl536Packages.NetAsyncHTTP', needed by Sytest.
+ # Use the master/unstable branch of nixpkgs. Used to fetch the latest
+ # available versions of packages.
nixpkgs.url = "github:NixOS/nixpkgs/master";
# Output a development shell for x86_64/aarch64 Linux/Darwin (MacOS).
systems.url = "github:nix-systems/default";
# A development environment manager built on Nix. See https://devenv.sh.
- devenv.url = "github:cachix/devenv/main";
- # Rust toolchains and rust-analyzer nightly.
- fenix = {
- url = "github:nix-community/fenix";
- inputs.nixpkgs.follows = "nixpkgs";
- };
+ devenv.url = "github:cachix/devenv/v0.6.3";
+ # Rust toolchain.
+ rust-overlay.url = "github:oxalica/rust-overlay";
};
- outputs = { self, nixpkgs, devenv, systems, ... } @ inputs:
+ outputs = { self, nixpkgs, devenv, systems, rust-overlay, ... } @ inputs:
let
forEachSystem = nixpkgs.lib.genAttrs (import systems);
in {
devShells = forEachSystem (system:
let
- pkgs = nixpkgs.legacyPackages.${system};
+ overlays = [ (import rust-overlay) ];
+ pkgs = import nixpkgs {
+ inherit system overlays;
+ };
in {
# Everything is configured via devenv - a Nix module for creating declarative
# developer environments. See https://devenv.sh/reference/options/ for a list
@@ -76,6 +76,25 @@
# Configure packages to install.
# Search for package names at https://search.nixos.org/packages?channel=unstable
packages = with pkgs; [
+ # The rust toolchain and related tools.
+ # This will install the "default" profile of rust components.
+ # https://rust-lang.github.io/rustup/concepts/profiles.html
+ #
+ # NOTE: We currently need to set the Rust version unnecessarily high
+ # in order to work around https://github.com/matrix-org/synapse/issues/15939
+ (rust-bin.stable."1.71.1".default.override {
+ # Additionally install the "rust-src" extension to allow diving into the
+ # Rust source code in an IDE (rust-analyzer will also make use of it).
+ extensions = [ "rust-src" ];
+ })
+ # The rust-analyzer language server implementation.
+ rust-analyzer
+
+ # GCC includes a linker; needed for building `ruff`
+ gcc
+ # Needed for building `ruff`
+ gnumake
+
# Native dependencies for running Synapse.
icu
libffi
@@ -95,6 +114,10 @@
# For building the Synapse documentation website.
mdbook
+
+ # For releasing Synapse
+ debian-devscripts # (`dch` for manipulating the Debian changelog)
+ libnotify # (the release script uses `notify-send` to tell you when CI jobs are done)
];
# Install Python and manage a virtualenv with Poetry.
@@ -120,12 +143,11 @@
# Install dependencies for the additional programming languages
# involved with Synapse development.
#
- # * Rust is used for developing and running Synapse.
# * Golang is needed to run the Complement test suite.
# * Perl is needed to run the SyTest test suite.
+ # * Rust is used for developing and running Synapse.
+ # It is installed manually with `packages` above.
languages.go.enable = true;
- languages.rust.enable = true;
- languages.rust.version = "stable";
languages.perl.enable = true;
# Postgres is needed to run Synapse with postgres support and
@@ -174,7 +196,7 @@
EOF
'';
# Start synapse when `devenv up` is run.
- processes.synapse.exec = "poetry run python -m synapse.app.homeserver -c homeserver.yaml --config-directory homeserver-config-overrides.d";
+ processes.synapse.exec = "poetry run python -m synapse.app.homeserver -c homeserver.yaml -c homeserver-config-overrides.d";
# Define the perl modules we require to run SyTest.
#
@@ -219,6 +241,19 @@
URI
YAMLLibYAML
]}";
+
+ # Clear the LD_LIBRARY_PATH environment variable on shell init.
+ #
+ # By default, devenv will set LD_LIBRARY_PATH to point to .devenv/profile/lib. This causes
+ # issues when we include `gcc` as a dependency to build C libraries, as the version of glibc
+ # that the development environment's cc compiler uses may differ from that of the system.
+ #
+ # When LD_LIBRARY_PATH is set, system tools will attempt to use the development environment's
+ # libraries. Which, when built against a different glibc version lead, to "version 'GLIBC_X.YY'
+ # not found" errors.
+ enterShell = ''
+ unset LD_LIBRARY_PATH
+ '';
}
];
};
|