When I worked for Prisma, you can check our rust setup from the public flake:
https://github.com/prisma/prisma-engines/blob/main/flake.nix
CD to the project and nix-direnv loads the flake. Get to work.
Now when I'm working in Grafbase, our flake is a bit different:
https://github.com/grafbase/grafbase/blob/main/flake.nix
Instead of the Rust overlay, we use rustup and rust-toolchain.toml. This makes it easier to enforce the same Rust version for nix and non-nix users.
Both ways work really well. The deal is to define the rust env per project instead of defining it globally. Use direnv to make it working seamlessly.
As long as you get a public IP address, a domain name and TLS certificate, you can federate with other servers.
I run mine in a small Hetzner box. Two gigabytes of RAM, two AMD cores, it's almost like doing nothing even I'm federating a ton of messages all the time regarding the logs.