{ pkgs, ... }:
{
  # ======================================================
  #  ____              _   _                 _           
  # | __ )  ___   ___ | |_| | ___   __ _  __| | ___ _ __ 
  # |  _ \ / _ \ / _ \| __| |/ _ \ / _` |/ _` |/ _ \ '__|
  # | |_) | (_) | (_) | |_| | (_) | (_| | (_| |  __/ |   
  # |____/ \___/ \___/ \__|_|\___/ \__,_|\__,_|\___|_|   
  #
  # Bootloader
  # UEFI enabled GRUB2 setup
  # with full disk encryption and swap with hibernation

  # Bootloader
  boot.loader = {
    efi = {
      canTouchEfiVariables = false;
      efiSysMountPoint = "/boot";
    };
    grub = {
      enable = true;
      efiSupport = true;
      extraEntriesBeforeNixOS = true;
      efiInstallAsRemovable = true; # in case canTouchEfiVariables doesn't work for your system
      device = "nodev";
      useOSProber = true;
    };
  };

  boot.kernelPackages = pkgs.linuxPackages_latest;

  # extra enabled kernel modules
  boot.kernelModules = [
    "sg" # for generic SCSI devices such as /dev/sg0
  ];

  # Kernel parameter on boot
  boot.kernelParams = [
    "quiet"
    "splash"
    "psi=1"
    "boot_delay=0"
  ];

  # Setup keyfile
  boot.initrd.secrets = {
    "/crypto_keyfile.bin" = null;
  };
}
