Security wrappers are controlled via security.wrappers. You could turn them all off with security.enableWrappers. Or you can use nixos-option security.wrappers to see which modules define wrappers and disable them individually.
Because users.mutableUsers defaults to true. Set it to false if you don’t want mutable users.
Each of these commands has its own story. In general, if you don’t know why a binary is in your path, follow the symlinks until you find out what package it’s in, then find the module that adds that package to environment.systemPackages, then read the options for that module to find the way to disable it if you really want to (but some of these things you’d be disabling are pretty core; getting rid of absolutely everything you don’t personally use on a NixOS system is kind of a fool’s errand).
Especially since most won’t really be gotten “rid” of, but just live in /nix/store used by random systemd services that you also don’t know exist
sudo-rs at least makes sure sudo doesn’t also exist, so I wouldn’t worry about that. It’s a drop-in replacement.
envionment.systemPackages being a list is kind of a PITA though, since overriding its contents is pretty difficult. There have been proposals to replace it with an attrset that would make this much nicer (imagine e.g. environment.systemPackages.sudo.enable = lib.mkForce false;, or environment.systemPackages.sudo.overrideAttrs = ...). Maybe one day.
There are quite a few listy things in NixOS that would be nice to override in subtractive ways. I wonder if we should have a lib.mkFilter function for this, so you could do something like:
and collect and apply all of the filters at the end of the merge. I don’t think I’ve seen that concept proposed yet, but maybe it’s in one of the libraries people are using as layers on top of the module system?