nixpkgs/pkgs/by-name/co/conduwuit/package.nix
Artturin e0464e4788 treewide: replace stdenv.is with stdenv.hostPlatform.is
In preparation for the deprecation of `stdenv.isX`.

These shorthands are not conducive to cross-compilation because they
hide the platforms.

Darwin might get cross-compilation for which the continued usage of `stdenv.isDarwin` will get in the way

One example of why this is bad and especially affects compiler packages
https://www.github.com/NixOS/nixpkgs/pull/343059

There are too many files to go through manually but a treewide should
get users thinking when they see a `hostPlatform.isX` in a place where it
doesn't make sense.

```
fd --type f "\.nix" | xargs sd --fixed-strings "stdenv.is" "stdenv.hostPlatform.is"
fd --type f "\.nix" | xargs sd --fixed-strings "stdenv'.is" "stdenv'.hostPlatform.is"
fd --type f "\.nix" | xargs sd --fixed-strings "clangStdenv.is" "clangStdenv.hostPlatform.is"
fd --type f "\.nix" | xargs sd --fixed-strings "gccStdenv.is" "gccStdenv.hostPlatform.is"
fd --type f "\.nix" | xargs sd --fixed-strings "stdenvNoCC.is" "stdenvNoCC.hostPlatform.is"
fd --type f "\.nix" | xargs sd --fixed-strings "inherit (stdenv) is" "inherit (stdenv.hostPlatform) is"
fd --type f "\.nix" | xargs sd --fixed-strings "buildStdenv.is" "buildStdenv.hostPlatform.is"
fd --type f "\.nix" | xargs sd --fixed-strings "effectiveStdenv.is" "effectiveStdenv.hostPlatform.is"
fd --type f "\.nix" | xargs sd --fixed-strings "originalStdenv.is" "originalStdenv.hostPlatform.is"
```
2024-09-25 00:04:37 +03:00

108 lines
3 KiB
Nix

{
lib,
rustPlatform,
fetchFromGitHub,
pkg-config,
bzip2,
zstd,
stdenv,
darwin,
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 [
darwin.apple_sdk.frameworks.Security
];
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";
};
}