{ pkgs, config, lib, ... }: with lib; let cfg = config.eb.boot; in { options.eb.boot = { type = mkOption { description = "Type of boot. Default bios."; default = null; type = types.enum [ "bios" "uefi" ]; }; qemu = mkOption { description = "Set to true if running in qemu"; default = false; type = types.bool; }; grubInstallDevice = mkOption { description = "The disk to install Grub to"; type = types.nullOr types.str; default = null; }; }; config = mkMerge [ { fileSystems."/" = { device = "/dev/disk/by-label/nixos"; fsType = "ext4"; }; swapDevices = [{ device = "/dev/disk/by-label/swap"; }]; } (mkIf (cfg.type == "bios") { boot.loader = { grub = { enable = true; version = 2; device = cfg.grubInstallDevice; efiSupport = false; useOSProber = true; extraEntries = '' menuentry "Reboot" { reboot } menuentry "Power off" { halt } ''; }; }; }) (mkIf (cfg.type == "uefi") { boot.loader = { systemd-boot = { enable = true; editor = false; configurationLimit = 10; }; efi.canTouchEfiVariables = true; }; fileSystems."/boot" = { device = "/dev/disk/by-label/boot"; fsType = "vfat"; }; }) (mkIf (cfg.qemu) { boot.initrd.postDeviceCommands = '' # Set the system time from the hardware clock to work around a # bug in qemu-kvm > 1.5.2 where the VM clock is initialized # to the *boot time* of the host. hwclock -s ''; services.qemuGuest.enable = true; }) ]; }