nixpkgs-immich/pkgs/applications/networking/instant-messengers/jami/default.nix
2024-09-17 10:23:40 -06:00

292 lines
5.9 KiB
Nix

{
stdenv,
lib,
pkg-config,
fetchFromGitLab,
gitUpdater,
ffmpeg_6,
# for daemon
autoreconfHook,
perl, # for pod2man
alsa-lib,
asio,
dbus,
sdbus-cpp,
fmt,
gmp,
gnutls,
llhttp,
jack,
jsoncpp,
libarchive,
libgit2,
libnatpmp,
libpulseaudio,
libupnp,
yaml-cpp,
msgpack-cxx,
openssl,
restinio,
secp256k1,
speex,
udev,
webrtc-audio-processing,
zlib,
# for client
cmake,
git,
networkmanager, # for libnm
python3,
qttools, # for translations
wrapQtAppsHook,
libnotify,
qt5compat,
qtbase,
qtdeclarative,
qrencode,
qtmultimedia,
qtnetworkauth,
qtpositioning,
qtsvg,
qtwebengine,
qtwebchannel,
wrapGAppsHook3,
withWebengine ? true,
# for pjsip
fetchFromGitHub,
pjsip,
# for opendht
opendht,
}:
stdenv.mkDerivation rec {
pname = "jami";
version = "20240627.0";
src = fetchFromGitLab {
domain = "git.jami.net";
owner = "savoirfairelinux";
repo = "jami-client-qt";
rev = "stable/${version}";
hash = "sha256-aePF1c99ju9y7JEgC+F2BPfpSAZlLd5OI5Jm6i9VlQQ=";
fetchSubmodules = true;
};
pjsip-jami = pjsip.overrideAttrs (old: rec {
version = "8fc165b833eea6e3c88d67a541385424b129fd3f";
src = fetchFromGitHub {
owner = "savoirfairelinux";
repo = "pjproject";
rev = version;
hash = "sha256-uA6ZJYUgAu3cK4CKCGtqaI0KPM/0szExPS2pCOflz5A=";
};
configureFlags = [
"--disable-sound"
"--enable-video"
"--enable-ext-sound"
"--disable-speex-aec"
"--disable-g711-codec"
"--disable-l16-codec"
"--disable-gsm-codec"
"--disable-g722-codec"
"--disable-g7221-codec"
"--disable-speex-codec"
"--disable-ilbc-codec"
"--disable-opencore-amr"
"--disable-silk"
"--disable-sdl"
"--disable-ffmpeg"
"--disable-v4l2"
"--disable-openh264"
"--disable-resample"
"--disable-libwebrtc"
"--with-gnutls=yes"
] ++ lib.optionals stdenv.isLinux [ "--enable-epoll" ];
buildInputs = old.buildInputs ++ [ gnutls ];
});
opendht-jami =
(opendht.overrideAttrs {
src = fetchFromGitHub {
owner = "savoirfairelinux";
repo = "opendht";
rev = "074e05cc3254d5d73b0d96ee772a6e01bb3113e5";
hash = "sha256-WuaURlC7eDDxvnM3YuyU9CNrwnE4WBQUIEw3z/0zjN8=";
};
}).override
{
enableProxyServerAndClient = true;
enablePushNotifications = true;
};
dhtnet = stdenv.mkDerivation {
pname = "dhtnet";
version = "unstable-2024-05-17";
src = fetchFromGitLab {
domain = "git.jami.net";
owner = "savoirfairelinux";
repo = "dhtnet";
rev = "77331098ff663a5ac54fae7d0bedafe076c575a1";
hash = "sha256-55LEnI1YgVujCtv1dGOFtJdvnzB2SKqwEptaHasZB7I=";
};
nativeBuildInputs = [
cmake
pkg-config
];
buildInputs = [
asio
fmt
gnutls
llhttp
jsoncpp
libupnp
msgpack-cxx
opendht-jami
openssl
pjsip-jami
python3
restinio
];
cmakeFlags = [
"-DBUILD_SHARED_LIBS=Off"
"-DBUILD_BENCHMARKS=Off"
"-DBUILD_TOOLS=Off"
"-DBUILD_TESTING=Off"
];
meta = with lib; {
description = "Lightweight Peer-to-Peer Communication Library";
license = licenses.gpl3Only;
platforms = platforms.linux;
maintainers = [ maintainers.linsui ];
};
};
daemon = stdenv.mkDerivation {
pname = "jami-daemon";
inherit src version meta;
sourceRoot = "${src.name}/daemon";
nativeBuildInputs = [
autoreconfHook
pkg-config
perl
];
buildInputs = [
alsa-lib
asio
dbus
dhtnet
sdbus-cpp
fmt
ffmpeg_6
gmp
gnutls
llhttp
jack
jsoncpp
libarchive
libgit2
libnatpmp
libpulseaudio
libupnp
yaml-cpp
msgpack-cxx
opendht-jami
openssl
pjsip-jami
restinio
secp256k1
speex
udev
webrtc-audio-processing
zlib
];
enableParallelBuilding = true;
};
qwindowkit = fetchFromGitHub {
owner = "stdware";
repo = "qwindowkit";
rev = "79b1f3110754f9c21af2d7dacbd07b1a9dbaf6ef";
hash = "sha256-iZfmv3ADVjHf47HPK/FdrfeAzrXbxbjH3H5MFVg/ZWE=";
fetchSubmodules = true;
};
postPatch = ''
sed -i -e '/GIT_REPOSITORY/,+1c SOURCE_DIR ''${CMAKE_CURRENT_SOURCE_DIR}/qwindowkit' extras/build/cmake/contrib_tools.cmake
sed -i -e 's/if(DISTRO_NEEDS_QMSETUP_PATCH)/if(TRUE)/' CMakeLists.txt
cp -R --no-preserve=mode,ownership ${qwindowkit} qwindowkit
'';
preConfigure = ''
echo 'const char VERSION_STRING[] = "${version}";' > src/app/version.h
# Currently the daemon is still built seperately but jami expects it in CMAKE_INSTALL_PREFIX
# This can be removed in future versions when JAMICORE_AS_SUBDIR is on
mkdir -p $out
ln -s ${daemon} $out/daemon
'';
dontWrapGApps = true;
nativeBuildInputs = [
wrapGAppsHook3
wrapQtAppsHook
pkg-config
cmake
git
python3
qttools
];
buildInputs = [
ffmpeg_6
libnotify
networkmanager
qtbase
qt5compat
qrencode
qtnetworkauth
qtdeclarative
qtmultimedia
qtpositioning
qtsvg
qtwebchannel
] ++ lib.optionals withWebengine [ qtwebengine ];
cmakeFlags = lib.optionals (!withWebengine) [ "-DWITH_WEBENGINE=false" ];
qtWrapperArgs = [
# With wayland the titlebar is not themed and the wmclass is wrong.
"--set-default QT_QPA_PLATFORM xcb"
];
preFixup = ''
qtWrapperArgs+=("''${gappsWrapperArgs[@]}")
'';
passthru.updateScript = gitUpdater { rev-prefix = "stable/"; };
meta = with lib; {
homepage = "https://jami.net/";
description = "Free and universal communication platform that respects the privacy and freedoms of its users";
mainProgram = "jami";
license = licenses.gpl3Plus;
platforms = platforms.linux;
maintainers = [ maintainers.linsui ];
};
}