If you use nixos-generate-config to generate your initial configuration, what you get is almost good enough to boot. You need to add or change a few lines.

The boot.loader.grub.device entry should read:

boot.loader.grub.device = "/dev/xvda";

And the following two lines insure that the serial console is used:

boot.loader.grub.extraConfig = "serial --unit=0 --speed=115200 ; terminal_input serial console ; terminal_output serial console";
boot.kernelParams = ["console=ttyS0"];

You'll probably want to add static addresses for your network interface. If you want IPv6, you'll have to add static addresses, since we don't have autoconfiguration.