{ config, lib, pkgs, modulesPath, desktop, username, ... }: {
  imports = [ 
    (modulesPath + "/installer/scan/not-detected.nix")
    ../../common/services/powertop.nix 
    ../../common/modules/secureboot.nix
  ];
  # steam, nvidia-x11, etc
  nixpkgs.config.allowUnfree = true;

  boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "thunderbolt" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ];
  boot.initrd.kernelModules = [ ];
  boot.kernelModules = [ "kvm-intel" "acpi_call" ];
  boot.extraModulePackages = with config.boot.kernelPackages; [ acpi_call ];

  # This expects the following:
  # /boot is "VFAT"  fstype with label "BOOT"
  # /     is "btrfs" fstype with label "ROOT"
  # swap  is "swap"  fstype with label "SWAP"

  fileSystems."/" = {
    device = "/dev/disk/by-label/ROOT";
    fsType = "btrfs";
    options = [ "subvol=@" ];
  };

  boot.initrd.luks.devices."DISK".device = "/dev/nvme0n1p1";
  
  fileSystems."/boot" = {
    device = "/dev/disk/by-label/BOOT";
    fsType = "vfat";
  };

  # Enable Swap on LUKS
  boot.initrd.luks.devices."SWAP" = {
    device = "/dev/nvme0n1p2";
    keyFile = "/crypto_keyfile.bin";
  };

  # Set up the keyfile
  boot.initrd.secrets."/crypto_keyfile.bin" = null;
  # Hibernation resume device
  boot.resumeDevice = "/dev/disk/by-label/SWAP";
  # Confirm the swap devices
  swapDevices = [ { device = "/dev/disk/by-label/SWAP"; } ];

  networking.useDHCP = lib.mkDefault true;
  nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
  powerManagement.cpuFreqGovernor = lib.mkDefault "ondemand";
  hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;

  # Set your time zone.
  time.timeZone = "Asia/Tokyo";

  # Set the networking hostname:
  networking.hostName = "nixos-laptop";

  # Configure the fingerprint reader
  services.fprintd = { 
    enable = true;
    tod.enable = true;
    tod.driver = pkgs.libfprint-2-tod1-vfs0090;
  };

  # Enable nVidia PRIME Render Offload and OpenGL
  # https://github.com/NixOS/nixos-hardware/blob/master/lenovo/thinkpad/p1/3th-gen/nvidia.nix

  # https://libreddit.kavin.rocks/r/NixOS/comments/x04dyv/optimus_help/
  # boot.kernelParams = [ "nomodeset" ];

  # nVidia information:
  # https://github.com/NixOS/nixpkgs/pull/211300 
  # https://github.com/NixOS/nixpkgs/pull/244060

  # Try gamescope:
  programs.gamescope.enable = true;
  programs.steam.gamescopeSession.enable = true;

  hardware = {
    opengl = {
      enable = true;
      driSupport32Bit = true;
      driSupport = true;
    };
    nvidia = {
      open = false;
      nvidiaSettings = true;
      dynamicBoost.enable = true;
      package = config.boot.kernelPackages.nvidiaPackages.latest;
      powerManagement.finegrained = true;
      powerManagement.enable = true;
      modesetting.enable = true;
      prime = {
        offload = {
          enable = true;
          enableOffloadCmd = true;
        };
        intelBusId  = lib.mkDefault "PCI:0:2:0";
        nvidiaBusId = lib.mkDefault "PCI:1:0:0";
      };
    };
  };

  environment.systemPackages = with pkgs; [ 
    # Fingerprint software
    fprintd

    # nVidia gpu options
    vulkan-loader
    vulkan-validation-layers
    vulkan-tools
    gwe
    nvtop-nvidia

    # Game related things
    gamemode

    # WINE
    wineWowPackages.stable
    winetricks
    wineWowPackages.waylandFull
  ];

}