concord 2.3.2

A terminal user interface client for Discord
Documentation
{
  lib,
  stdenv,
  craneLib,
  pkg-config,
  opus,
  alsa-lib,
  src,
  pname,
  version,
  description,
  homepage,
}:

let
  commonArgs = {
    inherit pname version src;

    cargoExtraArgs = "--locked --features voice-playback";

    # audiopus_sys and ALSA use pkg-config to find system libraries.
    # Providing Opus here avoids falling back to bundled Opus CMake builds,
    # which are sensitive to the host CMake version.
    nativeBuildInputs = [ pkg-config ];

    # Networking uses rustls + webpki-roots, so we do not need openssl or a
    # system CA bundle here. Darwin stdenv provides the SDK by default, so avoid
    # legacy darwin.apple_sdk framework stubs.
    buildInputs = [
      opus
    ] ++ lib.optionals stdenv.isLinux [
      alsa-lib
    ];

    # The unit tests in this repo do not require network or a TTY, but disable
    # them by default to keep `nix build` fast and reproducible. Run `cargo test`
    # inside `nix develop` for the full test suite.
    doCheck = false;
  };

  cargoArtifacts = craneLib.buildDepsOnly commonArgs;
in
craneLib.buildPackage (commonArgs // {
  inherit cargoArtifacts;

  meta = {
    inherit description homepage;
    license = lib.licenses.gpl3Only;
    mainProgram = "concord";
    platforms = lib.platforms.unix;
  };
})