AI makes this even easier, but you can usually find a similar package on nixpkgs and just modify it to suit the needs of that particular application.
I'll say this. Recently I reinstalled arch to see if I liked the freedom of it more. Within a week I reinstalled NixOS (which thanks to version control meant I was able to reinitialize it to be back in the exact state it was in beforehand).
More packages than any other package manager you're likely to encounter.
If something isn't packaged for nix, it's often simple to package yourself. Even when this isn't simple, it's often simple to use nix to bring the build dependencies into your environment and then follow the usual (non-nix) build instructions.
I'm a lowly self-taught hobbyist who works in an entirely unrelated industry. If I can do it, you can.
You can setup an FHS environment, this is often the strategy used when packaging closed-source binary packages. An example in nixpkgs is steam-run [0], I also used a similar approach to package Xilinx ISE [1] in a flake.
[0] - https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by...
Obviously the ideal is built from source. This has a lot of benefits. It allows you to overlay the package very easily - modify its source to be a fork, change compile options, etc. It allows you to expose its dependencies. Stuff like that.