{ lib
, pkgs
, config
, ... }: {
  global = {
    id = "23c46cfc573f4f889af9ba5d4678c2ab";
    fs.esp.uuid = "6695-0740";
    fs.type = "zfs";
    boot.lanzaboote = true;
    gpu.enable = true;
    gpu.type = "prime";
    android.enable = true;
    asusd.enable = true;
  };

  home = {
    plasma.specialise = true;
    gyroflow.enable = true;
    vscode.enable = true;
    libreoffice.enable = true;
    minecraft.enable = true;
    steam.enable = true;
  };

  users.homeModules = [ {
    wayland.windowManager.sway.config = {
      input."1267:16857:ELAN9009:00_04F3:41D9".map_to_output = "DP-3";
      output = {
        eDP-1.scale = "1.5";
        eDP-1.pos = "0 0";
        DP-3.scale = "2.25";
        DP-3.pos = "0 1066";
      };
    };
  } ];

  home.plasma.extraConfig = {
    configFile = {
      kwinrc.Xwayland.Scale = 2.25;
      kcminputrc."Libinput/1267/16857/ELAN9009:00 04F3:41D9".OutputName = "DP-3";
      kcminputrc."Libinput/1267/12962/ASUE140F:00 04F3:32A2 Touchpad".NaturalScroll = true;
      kcminputrc."Libinput/2821/6523/ASUSTeK ROG GLADIUS III".NaturalScroll = true;
    };
  };

  powerManagement.enable = true;
  powerManagement.cpuFreqGovernor = "performance";
  boot.kernelParams = [ "zfs.zfs_arc_max=34359738368" ];
  console.packages =  [ pkgs.terminus_font ];
  console.font = "ter-v32n";
  console.earlySetup = true;

  hardware.nvidia.prime = {
    amdgpuBusId = "PCI:9:0:0";
    nvidiaBusId = "PCI:1:0:0";
  };

  services.greetd.settings.default_session.command = let
    cfg = config.programs.regreet;
  in "${pkgs.dbus}/bin/dbus-run-session ${lib.getExe pkgs.cage} ${lib.escapeShellArgs cfg.cageArgs} -- ${pkgs.writeShellScript "cageResolution" ''
    ${lib.getExe pkgs.wlr-randr} --output DP-3 --scale 2.25
    ${lib.getExe cfg.package}
  ''}";

  hardware.enableRedistributableFirmware = true;
  boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "usbhid" "usb_storage" "sd_mod" ];
  boot.initrd.kernelModules = [ ];
  boot.kernelModules = [ "kvm-amd" ];
  boot.extraModulePackages = [ ];
  hardware.cpu.amd.updateMicrocode = true;
}
