{ config, lib, pkgs, ... }: with lib; let cfg = config.boot.loader.systemd-boot; efi = config.boot.loader.efi; gummibootBuilder = pkgs.substituteAll { src = ./systemd-boot-builder.py; isExecutable = true; inherit (pkgs) python3; systemd = config.systemd.package; nix = config.nix.package.out; timeout = if config.boot.loader.timeout != null then config.boot.loader.timeout else ""; inherit (efi) efiSysMountPoint canTouchEfiVariables; }; in { imports = [ (mkRenamedOptionModule [ "boot" "loader" "gummiboot" "enable" ] [ "boot" "loader" "systemd-boot" "enable" ]) ]; options.boot.loader.systemd-boot = { enable = mkOption { default = false; type = types.bool; description = "Whether to enable the systemd-boot (formerly gummiboot) EFI boot manager"; }; }; config = mkIf cfg.enable { assertions = [ { assertion = (config.boot.kernelPackages.kernel.features or { efiBootStub = true; }) ? efiBootStub; message = "This kernel does not support the EFI boot stub"; } ]; boot.loader.grub.enable = mkDefault false; system = { build.installBootLoader = gummibootBuilder; boot.loader.id = "systemd-boot"; requiredKernelConfig = with config.lib.kernelConfig; [ (isYes "EFI_STUB") ]; }; }; }