Many times just doing an update-grub may find Windows and add it to grub, but a lot of times it won't.
sudo vi /etc/grub.d/40_custom
menuentry "Windows 10" {
Change Windows 10 to whatever you want to call it. For example if it was for Windows 11 you'd probably want to call it "Windows 11" to avoid confusion.
set root='(hd0,0)'
chainloader + 1
}
The set root= part wil also vary. If the drive that contains windows is known to hd0 as grub then keep it the same, but if you have other drives, it could be hd1,hd2 etc... and depending on your partition table setup the second part after the "," 0 means partition 1 but sometimes it may be msdos1.
Here's an example of booting Windows from the second hd on msdos3 partiton AKA partition #3
menuentry "Windows 10" {
set root='(hd0,msdos3)'
chainloader + 1
}
sudo update-grub
grub, dual, bootingmany, update, custom, entry, sudo, vi, etc, _custom, menuentry, quot, hd, chainloader, confusion, wil, vary, contains, depending, partition, msdos, booting, partiton, aka,