Assuming the version of signal-desktop you want has already been packaged, you can “pin” the package, following the instructions from the NixOS Wiki on Pinning Nixpkgs. Specifically, you can do something like this:
environment.systemPackages = with pkgs;
let myPkgs = import (builtins.fetchTarball {
url = "https://github.com/NixOS/nixpkgs/archive/9957cd48326fe8dbd52fdc50dd2502307f188b0d.tar.gz"; #Change this URL accordingly
}) {}; in [
android-tools
chromium
cryptsetup
myPkgs.signal-desktop
...
];
To find the right URL, you can use Nix Package Versions