depot/third_party/nixpkgs/pkgs/by-name/co/conduwuit/package.nix

110 lines
3.1 KiB
Nix

{
lib,
rustPlatform,
fetchFromGitHub,
pkg-config,
bzip2,
zstd,
stdenv,
apple-sdk_15,
darwinMinVersionHook,
rocksdb,
nix-update-script,
testers,
conduwuit,
# upstream conduwuit enables jemalloc by default, so we follow suit
enableJemalloc ? true,
rust-jemalloc-sys,
enableLiburing ? stdenv.hostPlatform.isLinux,
liburing,
}:
let
rust-jemalloc-sys' = rust-jemalloc-sys.override {
unprefixed = !stdenv.hostPlatform.isDarwin;
};
rocksdb' = rocksdb.override {
inherit enableLiburing;
# rocksdb does not support prefixed jemalloc, which is required on darwin
enableJemalloc = enableJemalloc && !stdenv.hostPlatform.isDarwin;
jemalloc = rust-jemalloc-sys';
};
in
rustPlatform.buildRustPackage rec {
pname = "conduwuit";
version = "0.4.6";
src = fetchFromGitHub {
owner = "girlbossceo";
repo = "conduwuit";
rev = "v${version}";
hash = "sha256-ut3IWEueNR/hT7NyGfuK5IYtppC6ArSoJdEfFuD/0vE=";
};
cargoLock = {
lockFile = ./Cargo.lock;
outputHashes = {
"ruma-0.10.1" = "sha256-u4C2VwRBmw8iVaPrkSmF/EKi5U3nWJWVktUDFmQcI1E=";
"rust-librocksdb-sys-0.25.0+9.5.2" = "sha256-wz6QDLoXtY8+EU2DlPf4MbWC67KJK0hZnRswCeomkLQ=";
"rustyline-async-0.4.3" = "sha256-7yYOGZ14SODD4+e9fTGgggUKqTi31479S0lEVKTKLPI=";
"tikv-jemalloc-ctl-0.6.0" = "sha256-guiH6Gw/Oeb6A8Ri1SFcB6CW6mt+9XeA6vfwdS72yDQ=";
"tracing-0.1.40" = "sha256-J6+8hBC/755SU8n1fTiJwBh17Unluv1SXfd5+dDAEhk=";
};
};
nativeBuildInputs = [
pkg-config
rustPlatform.bindgenHook
];
buildInputs =
[
bzip2
zstd
]
++ lib.optional enableJemalloc rust-jemalloc-sys'
++ lib.optional enableLiburing liburing
++ lib.optionals stdenv.hostPlatform.isDarwin [
apple-sdk_15
# aws-lc-sys requires CryptoKit's CommonCrypto, which is available on macOS 10.15+
(darwinMinVersionHook "10.15")
];
env = {
ZSTD_SYS_USE_PKG_CONFIG = true;
ROCKSDB_INCLUDE_DIR = "${rocksdb'}/include";
ROCKSDB_LIB_DIR = "${rocksdb'}/lib";
};
buildNoDefaultFeatures = true;
# See https://github.com/girlbossceo/conduwuit/blob/main/src/main/Cargo.toml
# for available features.
# We enable all default features except jemalloc and io_uring, which
# we guard behind our own (default-enabled) flags.
buildFeatures = [
"brotli_compression"
"element_hacks"
"gzip_compression"
"release_max_log_level"
"sentry_telemetry"
"systemd"
"zstd_compression"
] ++ lib.optional enableJemalloc "jemalloc" ++ lib.optional enableLiburing "io_uring";
passthru = {
updateScript = nix-update-script { };
tests.version = testers.testVersion {
package = conduwuit;
version = "${version}";
};
};
meta = {
description = "Matrix homeserver written in Rust, forked from conduit";
homepage = "https://conduwuit.puppyirl.gay/";
changelog = "https://github.com/girlbossceo/conduwuit/releases/tag/v${version}";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ niklaskorz ];
# Not a typo, conduwuit is a drop-in replacement for conduit.
mainProgram = "conduit";
};
}