mirror of
https://github.com/element-hq/synapse
synced 2024-07-15 12:54:05 +00:00
123 lines
3.5 KiB
Nix
123 lines
3.5 KiB
Nix
{ inputs, pkgs, ... }:
|
|
|
|
{
|
|
# Configure packages to install.
|
|
# Search for package names at https://search.nixos.org/packages?channel=unstable
|
|
packages = with pkgs; [
|
|
# Native dependencies for running Synapse.
|
|
icu
|
|
libffi
|
|
libjpeg
|
|
libpqxx
|
|
libwebp
|
|
libxml2
|
|
libxslt
|
|
sqlite
|
|
|
|
# Native dependencies for unit tests (SyTest also requires OpenSSL).
|
|
openssl
|
|
|
|
# Native dependencies for running Complement.
|
|
olm
|
|
|
|
# Development tools.
|
|
poetry
|
|
];
|
|
|
|
# Activate (and create if necessary) a poetry virtualenv on startup.
|
|
enterShell = ''
|
|
. "$(dirname $(poetry run which python))/activate"
|
|
'';
|
|
|
|
# Install dependencies for the additional programming languages
|
|
# involved with Synapse development. Python is already available
|
|
# from poetry's virtual environment.
|
|
#
|
|
# * 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.
|
|
languages.go.enable = true;
|
|
languages.rust.enable = true;
|
|
languages.rust.version = "latest";
|
|
languages.perl.enable = true;
|
|
|
|
# Postgres is needed to run Synapse with postgres support and
|
|
# to run certain unit tests that require postgres.
|
|
services.postgres.enable = true;
|
|
|
|
# On the first invocation of `devenv up`, create a database for
|
|
# Syanpse to store data in.
|
|
services.postgres.initdbArgs = ["--locale=C" "--encoding=UTF8"];
|
|
services.postgres.initialDatabases = [
|
|
{ name = "synapse"; }
|
|
];
|
|
|
|
# Redis is needed in order to run Synapse in worker mode.
|
|
services.redis.enable = true;
|
|
|
|
# We wrap `poetry` with a bash script that disables the download
|
|
# of binary wheels for certain packages if the user is running
|
|
# NixOS. NixOS is special in that you can have multiple versions
|
|
# of packages installed at once, including your libc linker!
|
|
#
|
|
# Some binaries built for Linux expect those to be in a certain
|
|
# filepath, but that is not the case on NixOS. In that case, we
|
|
# force compiling those binaries locally instead.
|
|
scripts.poetry.exec = ''
|
|
if [ -z "$__NIXOS_SET_ENVIRONMENT_DONE" ]; then
|
|
# We are running on NixOS.
|
|
#
|
|
# Prevent poetry from downloading known problematic,
|
|
# dynamically-linked binaries for python dependencies.
|
|
POETRY_INSTALLER_NO_BINARY=ruff ${pkgs.poetry}/bin/poetry $@
|
|
else
|
|
${pkgs.poetry}/bin/poetry $@
|
|
fi
|
|
'';
|
|
|
|
# Define the perl modules we require to run SyTest.
|
|
#
|
|
# This list was compiled by cross-referencing https://metacpan.org/
|
|
# with the modules defined in './cpanfile' and then finding the
|
|
# corresponding nix packages on https://search.nixos.org/packages.
|
|
#
|
|
# This was done until `./install-deps.pl --dryrun` produced no output.
|
|
env.PERL5LIB = "${with pkgs.perl536Packages; makePerlPath [
|
|
DBI
|
|
ClassMethodModifiers
|
|
CryptEd25519
|
|
DataDump
|
|
DBDPg
|
|
DigestHMAC
|
|
DigestSHA1
|
|
EmailAddressXS
|
|
EmailMIME
|
|
EmailSimple # required by Email::Mime
|
|
EmailMessageID # required by Email::Mime
|
|
EmailMIMEContentType # required by Email::Mime
|
|
TextUnidecode # required by Email::Mime
|
|
ModuleRuntime # required by Email::Mime
|
|
EmailMIMEEncodings # required by Email::Mime
|
|
FilePath
|
|
FileSlurper
|
|
Future
|
|
GetoptLong
|
|
HTTPMessage
|
|
IOAsync
|
|
IOAsyncSSL
|
|
IOSocketSSL
|
|
NetSSLeay
|
|
JSON
|
|
ListUtilsBy
|
|
ScalarListUtils
|
|
ModulePluggable
|
|
NetAsyncHTTP
|
|
MetricsAny # required by Net::Async::HTTP
|
|
NetAsyncHTTPServer
|
|
StructDumb
|
|
URI
|
|
YAMLLibYAML
|
|
]}";
|
|
|
|
}
|