Dual boot from different distro - only boots with fallback initrafms

Hello! I’ve looked for a solution to my problem for a while now but couldn’t find it so I ultimately decided to post. I have used Manjaro for a very long time now but always booting directly from Manjaro’s grub. Now I’ve started running NixOS alongside it but still need to boot into Manjaro often. I would like to use NixOS’s grub to do this.

The issue is that despite Manjaro being present in GRUB, it fails to boot properly unless I navigate to advanced options → fallback initrafms.

Any help to fix this mild issue will be greatly appreciated!

Can you post /boot/grub/grub.cfg ?

Have you tried to implement this other way around? Usually, Manjaro’s grub is more suitable to boot other OS than vice versa.

Manjaro’s /boot/grub/grub.cfg :

#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
insmod part_gpt
insmod part_msdos
if [ -s $prefix/grubenv ]; then
  load_env
fi
if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default="${saved_entry}"
fi

if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
else
  menuentry_id_option=""
fi

export menuentry_id_option

if [ "${prev_saved_entry}" ]; then
  set saved_entry="${prev_saved_entry}"
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
fi

function savedefault {
  if [ -z "${boot_once}" ]; then
    saved_entry="${chosen}"
    save_env saved_entry
  fi
}

function load_video {
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe
    insmod vga
    insmod video_bochs
    insmod video_cirrus
  fi
}

set menu_color_normal=light-gray/black
set menu_color_highlight=green/black

if [ x$feature_default_font_path = xy ] ; then
   font=unicode
else
insmod part_gpt
insmod ext2
search --no-floppy --fs-uuid --set=root f73a8501-2587-4bd7-87ef-495733301de1
    font="/usr/share/grub/unicode.pf2"
fi

if loadfont $font ; then
  set gfxmode=auto
  load_video
  insmod gfxterm
  set locale_dir=$prefix/locale
  set lang=en_US
  insmod gettext
fi
terminal_input console
terminal_output gfxterm
insmod part_gpt
insmod ext2
search --no-floppy --fs-uuid --set=root f73a8501-2587-4bd7-87ef-495733301de1
insmod gfxmenu
loadfont ($root)/usr/share/grub/themes/manjaro/dejavu_sans_12.pf2
loadfont ($root)/usr/share/grub/themes/manjaro/dejavu_sans_14.pf2
loadfont ($root)/usr/share/grub/themes/manjaro/dejavu_sans_16.pf2
loadfont ($root)/usr/share/grub/themes/manjaro/dejavu_sans_24.pf2
loadfont ($root)/usr/share/grub/themes/manjaro/dejavu_sans_48.pf2
loadfont ($root)/usr/share/grub/themes/manjaro/dejavu_sans_bold_16.pf2
loadfont ($root)/usr/share/grub/themes/manjaro/dejavu_sans_mono_12.pf2
loadfont ($root)/usr/share/grub/themes/manjaro/terminus-12.pf2
loadfont ($root)/usr/share/grub/themes/manjaro/terminus-14.pf2
loadfont ($root)/usr/share/grub/themes/manjaro/terminus-16.pf2
loadfont ($root)/usr/share/grub/themes/manjaro/terminus-18.pf2
loadfont ($root)/usr/share/grub/themes/manjaro/terminus-b12.pf2
loadfont ($root)/usr/share/grub/themes/manjaro/terminus-b14.pf2
loadfont ($root)/usr/share/grub/themes/manjaro/terminus-b16.pf2
loadfont ($root)/usr/share/grub/themes/manjaro/terminus-b18.pf2
insmod png
set theme=($root)/usr/share/grub/themes/manjaro/theme.txt
export theme
if [ x$feature_timeout_style = xy ] ; then
  set timeout_style=menu
  set timeout=5
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
  set timeout=5
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/10_linux ###
menuentry 'Manjaro Linux' --class manjaro --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-f73a8501-2587-4bd7-87ef-495733301de1' {
	savedefault
	load_video
	set gfxpayload=keep
	insmod gzio
	insmod part_gpt
	insmod ext2
	search --no-floppy --fs-uuid --set=root f73a8501-2587-4bd7-87ef-495733301de1
	linux	/boot/vmlinuz-5.9-x86_64 root=UUID=f73a8501-2587-4bd7-87ef-495733301de1 ro  verbose apparmor=1 security=apparmor udev.log_priority=3
	initrd	/boot/intel-ucode.img /boot/initramfs-5.9-x86_64.img
}
submenu 'Advanced options for Manjaro Linux' $menuentry_id_option 'gnulinux-advanced-f73a8501-2587-4bd7-87ef-495733301de1' {
	menuentry 'Manjaro Linux (Kernel: 5.9.16-1-MANJARO x64)' --class manjaro --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.9.16-1-MANJARO x64-advanced-f73a8501-2587-4bd7-87ef-495733301de1' {
	savedefault
		load_video
		set gfxpayload=keep
		insmod gzio
		insmod part_gpt
		insmod ext2
		search --no-floppy --fs-uuid --set=root f73a8501-2587-4bd7-87ef-495733301de1
		linux	/boot/vmlinuz-5.9-x86_64 root=UUID=f73a8501-2587-4bd7-87ef-495733301de1 ro  verbose apparmor=1 security=apparmor udev.log_priority=3
		initrd	/boot/intel-ucode.img /boot/initramfs-5.9-x86_64.img
	}
	menuentry 'Manjaro Linux (Kernel: 5.9.16-1-MANJARO x64 - fallback initramfs)' --class manjaro --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.9.16-1-MANJARO x64-fallback-f73a8501-2587-4bd7-87ef-495733301de1' {
		load_video
		set gfxpayload=keep
		insmod gzio
		insmod part_gpt
		insmod ext2
		search --no-floppy --fs-uuid --set=root f73a8501-2587-4bd7-87ef-495733301de1
		linux	/boot/vmlinuz-5.9-x86_64 root=UUID=f73a8501-2587-4bd7-87ef-495733301de1 ro  verbose apparmor=1 security=apparmor udev.log_priority=3
		initrd	/boot/initramfs-5.9-x86_64-fallback.img
	}
	menuentry 'Manjaro Linux (Kernel: 5.4.114-1-MANJARO x64)' --class manjaro --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.114-1-MANJARO x64-advanced-f73a8501-2587-4bd7-87ef-495733301de1' {
	savedefault
		load_video
		set gfxpayload=keep
		insmod gzio
		insmod part_gpt
		insmod ext2
		search --no-floppy --fs-uuid --set=root f73a8501-2587-4bd7-87ef-495733301de1
		linux	/boot/vmlinuz-5.4-x86_64 root=UUID=f73a8501-2587-4bd7-87ef-495733301de1 ro  verbose apparmor=1 security=apparmor udev.log_priority=3
		initrd	/boot/intel-ucode.img /boot/initramfs-5.4-x86_64.img
	}
	menuentry 'Manjaro Linux (Kernel: 5.4.114-1-MANJARO x64 - fallback initramfs)' --class manjaro --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.114-1-MANJARO x64-fallback-f73a8501-2587-4bd7-87ef-495733301de1' {
		load_video
		set gfxpayload=keep
		insmod gzio
		insmod part_gpt
		insmod ext2
		search --no-floppy --fs-uuid --set=root f73a8501-2587-4bd7-87ef-495733301de1
		linux	/boot/vmlinuz-5.4-x86_64 root=UUID=f73a8501-2587-4bd7-87ef-495733301de1 ro  verbose apparmor=1 security=apparmor udev.log_priority=3
		initrd	/boot/initramfs-5.4-x86_64-fallback.img
	}
	menuentry 'Manjaro Linux (Kernel: 4.19.188-1-MANJARO x64)' --class manjaro --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.19.188-1-MANJARO x64-advanced-f73a8501-2587-4bd7-87ef-495733301de1' {
	savedefault
		load_video
		set gfxpayload=keep
		insmod gzio
		insmod part_gpt
		insmod ext2
		search --no-floppy --fs-uuid --set=root f73a8501-2587-4bd7-87ef-495733301de1
		linux	/boot/vmlinuz-4.19-x86_64 root=UUID=f73a8501-2587-4bd7-87ef-495733301de1 ro  verbose apparmor=1 security=apparmor udev.log_priority=3
		initrd	/boot/intel-ucode.img /boot/initramfs-4.19-x86_64.img
	}
	menuentry 'Manjaro Linux (Kernel: 4.19.188-1-MANJARO x64 - fallback initramfs)' --class manjaro --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.19.188-1-MANJARO x64-fallback-f73a8501-2587-4bd7-87ef-495733301de1' {
		load_video
		set gfxpayload=keep
		insmod gzio
		insmod part_gpt
		insmod ext2
		search --no-floppy --fs-uuid --set=root f73a8501-2587-4bd7-87ef-495733301de1
		linux	/boot/vmlinuz-4.19-x86_64 root=UUID=f73a8501-2587-4bd7-87ef-495733301de1 ro  verbose apparmor=1 security=apparmor udev.log_priority=3
		initrd	/boot/initramfs-4.19-x86_64-fallback.img
	}
}

### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/30_uefi-firmware ###
menuentry 'UEFI Firmware Settings' $menuentry_id_option 'uefi-firmware' {
	fwsetup
}
### END /etc/grub.d/30_uefi-firmware ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if [ -f  ${config_directory}/custom.cfg ]; then
  source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
  source $prefix/custom.cfg
fi
### END /etc/grub.d/41_custom ###

### BEGIN /etc/grub.d/60_memtest86+ ###
if [ "${grub_platform}" == "pc" ]; then
    menuentry "Memory Tester (memtest86+)" --class memtest86 --class gnu --class tool {
        search --fs-uuid --no-floppy --set=root  f73a8501-2587-4bd7-87ef-495733301de1
        linux16 /boot/memtest86+/memtest.bin 
    }
fi
### END /etc/grub.d/60_memtest86+ ###

I can switch to NixOS and post that one if it helps

I’ve tried but Manjaro seems unable to detect NixOS or any of its derivations, I’ve tried enabling os-prober as I’ve seen in other threads but it did not do the trick.

There is another problem:
You should update kernel 5.9 to 5.10.

Can you boot with kernel 5.4 or kernel 4.19 ?

If you have an UEFI system, there’s a trivial way to dual-boot: Use separate bootloaders and then choose whether to boot Manjaro or NixOS from your UEFI firmware interface.

I updated but the problem persists, only booting with fallback initrafms. It doesn’t seem to boot regularly even with kernel 5.4 which I believe is the kernel I’m using on NixOS

I have been doing that so far but I really want to use GRUB if only to save myself a couple of keypresses on startup

And what doesn´t seem to work with the normal initramfs ?

And can you execute with the booted OS: mkinitcpio -P ?

I ran mkinitcpio -P on Manjaro but I’m not quite sure what it did.

When I boot into Manjaro from NixOS’s grub it just displays a blank screen, it shows a blank screen despite the boot process being set to verbose.

In this case you should look for help in a NixOS forum, they know their grub better. Manjaro’s grub is highly customized, maybe that’s the case for NixOS as well, who knows?