As you write in your comment this is for a new installation, so I assume it will come with grub2.
Actually, always booting Windows with grub1 was difficult in my experience. The addition of a new kernel, to the list of kernels versions to select from (e.g. after an kernel upgrade of linux), would change the position of the Windows entry. This caused a hard-coded
GRUB_DEFAULT point to something else (most often the memory test inserted by the grub installre between the list of linux kernels and the windows entry in the list). With grub1 I solved this issue by having a script that purged any but the latest 3 kernels, thereby keeping the Windows position fixed.
So make sure you go with grub2 as it makes things easier because of 2 features:
- grub2 allows submenus, so that the value of
GRUB_DEFAULT doesn't become invalid after a kernel-upgrade (which pushes old kernels in the submenu)
- grub2 generates the menu entries through scripts (in
/etc/grub.d on Ubuntu)
I recommend to make the change to the scripts to force Windows to be the first option in the menu: in
30_os-prober (which generates the windows entry) to something like
09_os-prober. This script is then executed before
10_linux as the scripts are executed sorted by filename and the windows entry will always be on top. And the top is the default if nothing else is specified.
update-grub to create the menu in
/boot/grub, so that takes care of always booting Windows.
As for not having the menu not to be shown you want to use
GRUB_HIDDEN_TIMEOUT and some others in
# wait 5 seconds for a key-press before showing the menu
# do not show the countdown counter
# after hidden timeout is done wait 0 seconds -> boot without menu
The above combination waits 5 seconds without output (countdown) or a menu and then boots the first entry. (Again: run
update-grub after changing that).