I had this problem that when my laptop booted up, no networking was available. It turned out that iwd was started before the interface `wlp2s0` was ready and never detected it afterwards. Restarting iwd every time was annoying so I went to look for a solution.
I found one here.
I added two lines in a systemd override file (`systemctl edit iwd`):
[Unit] BindsTo=sys-subsystem-net-devices-wlp2s0.device After=sys-subsystem-net-devices-wlp2s0.device
After this changes, networking is available on boot.