/etc/grub.d/40_custom file

Grub2 allows to add custom entries. An example Windows on partition /dev/sda1

sudo nano /etc/grub.d/40_custom

.. the contents

menuentry "Windows " {
set root='(hd0,1)'
chainloader +1

… save and quit
Ctrl o
Ctrl x
… update grub

sudo update-grub


Menuentry for UEFI Windows where Windows boot files are on GPT partition 2 to the /EFI/Microsoft.orig/Boot folder

menuentry 'Windows 10' {
insmod part_gpt
insmod fat
set root='hd0,gpt2'
chainloader /EFI/Microsoft.orig/Boot/bootmgfw.efi


Grub4Dos menuentry for /dev/sda1 fat32

menuentry "grub4dos " {
insmod fat
set root='(hd0,1)'
linux /grub.exe --config-file=/menu.lst

reactOS menuentry for /dev/sda1

menuentry "ReactOS" {
set root=(hd0,1)
chainloader +1
parttool (hd0,1) boot+
multiboot /freeldr.sys


Read also:
To chainload Grub2 via Grub4Dos

To get Windows boot using Grub4Dos

Android on partition /dev/sda2

menuentry "Android-x86" {
set root='(hd0,2)'
linux /android-8.1-r2/kernel root=/dev/sda2 androidboot.selinux=permissive vmalloc=192M SRC=/android-8.1-r2
initrd /android-8.1-r2/initrd.img