Setting system to x86_64-linux in the let-in for outputs doesn’t really make sense if not all your nixosConfigurations are x86_64-linux. I would move the system let-in to the individual nixosConfigurations (also note that I changed the system reference in the home-manager configuration):
A couple more points: nixpkgs.lib.nixosSystem can take a system argument. Then you don’t have to import pkgs yourself, because nixpkgs.lib.nixosSystem will automatically import the pkgs from the input it’s from. This also makes it possible to use the nixpkgs.config options (which will have no effect if you use an imported pkgs). There you can set allowUnfree (nixpkgs.config.allowUnfree = true;).
The system special arg is also superfluous, because pkgs has the attribute system, so you can just use pkgs.system.
Since quite recently I would use nixpkgs.hostPlatform = "x86_64-linux";
This way your main flake can be system agnostic.
I have as well aarch64-linu and 86_64-linu in my configs.
If you need the system somewhere you can then refere to it like this:
Using hostname in a conditional will make your config unmaintainable very quickly.
And yes as mentioned above passing system to lib.nixosSystem is deprecated, and nixpkgs.hostPlatform is the current method. Passing pkgs is discouraged as well unless you use readOnlyPkgs.
Yes. If you also need the home-manager configuration for aarch64-linux, you should create a separate one with the same config (except pkgs being for aarch64-linux, of course). The reason is that the same home-manager configuration with pkgs for different systems will result in different store paths.