Windows doesn't show up in systemd-boot entries

I had this problem too.

I have 2 SSDs: one for Linux and one for Windows.

I use Linux as my main OS and right now I’m using systemd-boot as bootloader.

Everything was working except I needed to enter the firmware menu everytime I needed to boot Windows because it didn’t show up in the startup entries. This is the only way I solved it.

1. Find the partition containing the Windows boot.

In my case is nvme0n1p1.

[deafgod@chronos]$ lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINTS
zram0       253:0    0    4G  0 disk  [SWAP]
nvme1n1     259:0    0  1.8T  0 disk  
├─nvme1n1p1 259:1    0  511M  0 part  /boot
└─nvme1n1p2 259:2    0  1.8T  0 part  
  └─luksdev 254:0    0  1.8T  0 crypt /
nvme0n1     259:3    0  1.8T  0 disk  
├─nvme0n1p1 259:4    0  100M  0 part  
├─nvme0n1p2 259:5    0   16M  0 part  
├─nvme0n1p3 259:6    0  1.8T  0 part  
└─nvme0n1p4 259:7    0  674M  0 part  

2. Mount it on a folder.

In my case: sudo mount /dev/nvme0n1p1 /home/deafgod/win_boot/

Now in the folder where you mounted the partition you can see this structure:

[deafgod@chronos deafgod]$ tree /home/deafgod/win_boot/ -L 3
win_boot/
├── EFI
│   ├── Boot
│   │   └── bootx64.efi
│   └── Microsoft
│       ├── Boot
│       └── Recovery
└── System Volume Information

7 directories, 1 file

3. You need to copy the EFI/Microsoft/ folder in /boot/EFI/ of your linux disk that is used by systemd-boot.

WARNING: I used the /boot/EFI folder because my Linux boot partition is mounted on the /boot folder as you can see from the output of the previous lsblk command.

In my case:

sudo cp -r /home/deafgod/win_boot/EFI/Microsoft /boot/EFI

Now your /boot/EFI folder should have this structure:

/boot/EFI
├── BOOT
│   └── BOOTX64.EFI
├── Linux
├── Microsoft
│   ├── Boot
│   └── Recovery
└── systemd
    └── systemd-bootx64.efi

7 directories, 2 files

If you reboot your computer, there should be a new entry in the bootloader.