OEM logo blinks; Plymouth not shown correctly

Problem:

  1. Machine boots up
  2. Greeted by the OEM logo followed by the Systemd-Boot (timeout is curently set to 0) menu
  3. NixOS is supposed to show plymouth animation and continue the boot process but instead the OEM logo appears again and blink 2 times
  4. Up to this point the boot process had finished before plymouth could actually play the animation (plymouth is only shown for half of a second and it goes away because the login manager has to utilize the display)

Notes:
I’m not sure what could be the issue here but I’ll be happy to provide logs of anything if needed.

I know that Nix is different than Arch but I think I used to have intel or nvidia’s frame buffer in the kernel options but I can’t remember or find it anymore.

Well, if the timeout is zero, then the systemd-boot menu certainly should not be showing up, so that is surprising.

As for plymouth not showing up in time, there’s two factors at play here.

  1. Scripted stage 1 starts plymouth sort of late. It’s done last in boot.initrd.preLVMCommands, so an awful lot happens on the console before it shows up. Systemd stage 1 (boot.initrd.systemd.enable) starts it much earlier, but you still need to add quiet to your kernel params for silent boot, and possibly set the kernel loglevel to 0.
  2. systemd-stage-1/plymouth: Password prompt takes a long time to appear · Issue #266804 · NixOS/nixpkgs · GitHub Plymouth is picky about graphics. The EFI framebuffer can be used, but its graphics implementation is simple-drm, which plymouth purposefully avoids using until a timeout of 8 seconds is reached. So plymouth actually doesn’t take over graphics until either that timeout is reached or a better graphics driver is found. So you can add your graphics driver to initrd (e.g. boot.initrd.availableKernelModules = ["amdgpu"];), but this will still cause at least one flicker when the kernel does modesetting to set the resolution. Or you can tell plymouth to allow using simple-drm by adding plymouth.use-simpledrm to your kernel params, but this might have undesirable visuals when the graphics driver is loaded in stage 2.
1 Like

yes the menu doesn’t show up, I had the timeout set to 3 later on I changed it to 0 and the menu doesn’t show up anymore; Sorry if I sounded a little confusing

To add to this I went ahead and added all my graphics (i915, nvidia, nvidia_uvm, nvidia_drm, nvidia_modeset) and the OEM logo it did flicker like once after that the plymouth animation was shown right away but I wasn’t able to login to my user, and the screen just either freezes or gets blank

I’ll try this and let you know

Hi sorry for the late response I’ve been busy with work. I couldn’t find a way to use the use-simpledrm for plymouth, maybe it isn’t available anymore? I feel like my issue is likely related to the kernel being LTS because I’ve always used the latest kernel in Arch but I’m not sure. Last time I tried to switch kernels my nvidia drivers had issues so I had to stick to the LTS kernel which NixOS provides

Not sure what to try next, Any suggestions? Thanks.

It’s a kernel param. You just add it to boot.kernelParams or add it in the boot menu with the e key.

Not likely. But if you want to be sure you can set boot.kernelPackages = pkgs.linuxPackages_latest; in your configuration.nix.