Not saying my practice is the best one, but here's what I do:
- EFI system partition is mounted on /boot
- kernel is held here. In case of distros like NixOS etc that keep around old kernels, a small ESP might run out of space. I make mine at least 1GB.
- the rest of the disk is one luks2 volume
- inside the encrypted volume, there's a BTRFS volume
- there's a subvolume for /home
- and a subvolume for every distro I have (which is usually 1, but sometimes I tinker or switch)
- Kernel command line parameters specify the btrfs subvol with the right distro to boot.
- for NixOS, you need a bootloader (to choose the right kernel). Systemd-boot works well, and its configuration is easily readable. I never figured out how to work with GRUB2, its configuration is just too confusing.
- or if you like Arch, dispense with bootloaders and just use EFISTUB. You can put kernel cmdline params into EFI bootloader options with
efibootmgr
.
Simple yet complete. Efficient, and extensible - for example, now that everything is a subvolume, I can easily snapshot it, then create backups with rsync off the snapshot, to avoid inconsistent state between backed-up files.