I was initially writing this script with bash but it has been much better to do it with gambas scripting.
What it does....
If you have ManjaroLinux on a disk but it's not your main disk and not the disk grub is installed from then the os-probe get's some details wrong about manjaro and makes a grub.cfg file that will only boot manjaro in "fallback" mode.
The reason is this...
On the Manjaro disk it's grub.cfg file will have a line like this at the end of the ManjaroLinux menu entry.
initrd /boot/intel-ucode.img /boot/initramfs-5.8-x86_64.img
But if your grub is set up on another drive it's grub.cfg will look like this..
initrd /boot/intel-ucode.img
I've made the simple fix before, more than once though as it reverts to the "wrong" config every time update-grub is run on the main OS.
So a simple script to fix it is born

So run this script from your main OS and it will auto-detect your Manjaro drive (if mounted) and read it's grub.cfg file to get the correct initrd line. (or you can manually select the Manjaro grub.cfg file if not detected.
It then reads the grub.cfg file from your running OS and Changes the initrd lines to be correct.
If run as root it will save the /boot/grub/grub.cfg automatically and job done.
If not run as root it will save a new modified grub.cfg file to your desktop for you to copy manually.
Wishing Well

(Ps. the Message() requesters show a gtk warning in the cli, ignore it. Benoit is looking into it.
change Use "gb.gui" to Use "gb.qt5" to use qt)
File Fix-manjaro-grub-entries.gbs
#!/usr/bin/env gbs3 ' Gambas script file Use "gb.gui" Public sMGrubLine As String Public Sub Main() If Access("/boot/grub/grub.cfg", gb.Write) = False Then If Message.Warning("Warning no write access!\n\nRun this script as root to save\nyour grub.cfg file directly.\nOtherwise the file will be saved to your Desktop", "Continue", "Cancel") <> 1 Then Quit 1 Endif Dim sVar, sText As String Shell "lsblk -o MOUNTPOINT,FSTYPE|grep /|grep ext4|awk '{print $1}'" To sVar sVar = Trim(sVar) Dialog.Path = "" For Each sVar In Split(sVar, gb.Lf) If Exist(sVar &/ "etc/os-release") Then sText = File.Load(sVar &/ "etc/os-release") If InStr(sText, "Manjaro") Then Print "\nFound Manjaro on disk: " & sVar If Message.Question("Found Manjaro on..\n" & sVar & "\n\nUse /boot/grub/grub.cfg\nfrom this Drive?", "Yes", "Choose grub.cfg file") = 1 Then Dialog.Path = sVar &/ "boot/grub/grub.cfg" Goto SkipChooser Endif Endif Endif Next Print "Manjaro not auto-detected, opening file requester.." Message("Select the\n/boot/grub/grub.cfg file\non your Manjaro harddrive") With Dialog .Title = "Choose grub.cfg" .Path = "/media" &/ User.Name .Filter = ["*.cfg", "Grub cfg Files"] If .OpenFile() Then Return End With SkipChooser: Print "\nUsing '" & Dialog.Path & "'" sMGrubLine = GetManjaroLine(Dialog.Path) If Not sMGrubLine Then Message.Error("Error.\nCould not find initrd line from\n" & Dialog.Path) Endif EditGrub() End Public Sub GetManjaroLine(sFile As String) As String Dim sLines As String[] = Split(File.Load(sFile), gb.Lf) Dim bActive As Boolean, sLine As String For iCount As Integer = 0 To sLines.Max sLine = sLines[iCount] If InStr(sLine, "--class manjaro") Then bActive = True Continue Endif If Not bActive Then Continue If InStr(sLine, "initrd") Then Print "\nFound initrd on line " & (iCount + 1) & " in Manjaro grub.cfg\n" & sLine Return sLine Break Endif Next End Public Sub EditGrub() If Not Exist("/boot/grub/grub.cfg") Then Print "/bot/grub/grub.cfg not found, aborting." Quit 1 Endif Dim sLines As String[] = Split(File.Load("/boot/grub/grub.cfg"), gb.Lf) Dim bActive As Boolean Dim iLine As Integer = 0 Dim sLine As String For iLine = 0 To sLines.Max If InStr(sLines[iLine], "menuentry 'Manjaro Linux") And (Not InStr(sLines[iLine], "fallback")) Then Print "\nFound menuentry: " & Split(sLines[iLine], "'")[1] bActive = True Continue Endif If Not bActive Then Continue If InStr(sLines[iLine], "initrd") Then Print "Changing grub.cfg Line: " & (iLine + 1) sLines[iLine] = "\t" & sMGrubLine bActive = False Endif Next If Access("/boot/grub/grub.cfg", gb.Write) = True Then Print "Root permissions granted, saving '/boot/grub/grub.cfg'" File.Save("/boot/grub/grub.cfg", sLines.Join(gb.Lf)) Else Print "Root permissions not granted, saving as " & User.Home &/ "Desktop/grub.cfg" File.Save(User.Home &/ "Desktop/grub.cfg", sLines.Join(gb.Lf)) Endif Catch Print "An error occured..\n" & Error.Text End