nixos-config/pkgs/conduwuit.nix

120 lines
3.1 KiB
Nix
Raw Normal View History

2024-12-21 02:59:10 -05:00
{
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,
nixosTests,
}:
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";
2024-12-21 15:15:30 -05:00
rev = "7f645ff0e9111cc6e05e3abc1abad7d0b1f6a5a9";
hash = "sha256-GgpdkQzJH4uu396DurvaxqrvJe3F25wm2gMqT35z45A=";
2024-12-21 02:59:10 -05:00
};
2024-12-21 15:15:30 -05:00
cargoLock = {
lockFile = ./Cargo.lock;
allowBuiltinFetchGit = true;
# outputHashes = {
# "ruma-0.10.1" = lib.fakeHash;
# "rust-librocksdb-sys-0.31.0+9.9.3" = lib.fakeHash;
# "rustyline-async-0.4.3" = lib.fakeHash;
# };
};
2024-12-21 02:59:10 -05:00
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.
2024-12-22 14:12:25 -05:00
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";
2024-12-21 02:59:10 -05:00
passthru = {
updateScript = nix-update-script { };
tests =
{
version = testers.testVersion {
inherit version;
package = conduwuit;
};
}
// lib.optionalAttrs stdenv.hostPlatform.isLinux {
inherit (nixosTests) conduwuit;
};
};
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";
};
}