{ lib, config, pkgs, ... }: {

  imports = [ 
      # Desktop Environments
        # Common configuration
        ../../../desktops/common.nix
        # Hyprland
        ../../../desktops/hyprland.nix
        # Gnome
        # ../../../desktops/gnome.nix 
        # KDE
        # ../../../desktops/kde.nix

  ];

  # 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

  hardware = {
    opengl.enable = true;
    opengl.driSupport32Bit = true;
    opengl.driSupport = true;
    # opengl.extraPackages = with pkgs; [ nvidia-vaapi-driver ];
    # https://nixpk.gs/pr-tracker.html?pr=244060
    nvidia = {
      open = false;
      dynamicBoost.enable = true;
      package = config.boot.kernelPackages.nvidiaPackages.stable;
      # powerManagement.finegrained = true;
      powerManagement.enable = true;
      nvidiaSettings = 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.variables = {
   #   GBM_BACKEND = "nvidia-drm";
   #   LIBVA_DRIVER_NAME = "nvidia";
   #   __GLX_VENDOR_LIBRARY_NAME = "nvidia";
   # };


  environment.systemPackages = with pkgs; [ 
    # Fingerprint software
    fprintd 
    # nVidia graphcis options
    vulkan-loader
    vulkan-validation-layers
    vulkan-tools
    gwe

    # nvtop for use with nvidia cards
    nvtop-nvidia
    
    # Game related things
    gamemode

    # wine install
    # support both 32- and 64-bit applications
    wineWowPackages.stable
    # support 32-bit only
    wine
    # support 64-bit only
    # (wine.override { wineBuild = "wine64"; })
    # wine-staging (version with experimental features)
    wineWowPackages.staging
    # winetricks (all versions)
    winetricks
    # native wayland support (unstable)
    wineWowPackages.waylandFull
  ];
}