{
  pkgs,
  lib,
  ...
}: {
  services.libinput.enable = true;
  hardware.graphics.enable = true;

  xdg.portal = {
    enable = true;
    wlr.enable = true;
    extraPortals = with pkgs; [xdg-desktop-portal-gtk];
    xdgOpenUsePortal = true;

    # warning: xdg-desktop-portal 1.17 reworked how portal implementations are loaded, you
    # should either set `xdg.portal.config` or `xdg.portal.configPackages`
    # to specify which portal backend to use for the requested interface.
    #
    # https://github.com/flatpak/xdg-desktop-portal/blob/1.18.1/doc/portals.conf.rst.in
    #
    # If you simply want to keep the behaviour in < 1.17, which uses the first
    # portal implementation found in lexicographical order, use the following:
    #
    # xdg.portal.config.common.default = "*";
    config.common.default = "*";
  };

  environment = {
    sessionVariables.NIXOS_OZONE_WL = "1";

    systemPackages = with pkgs; [
      qt5.qtwayland
      qt6.qtwayland
    ];
  };

  programs = {
    gtklock = {
      enable = lib.mkDefault true;

      config = {};
      modules = [];
    };
  };
}
