{
  inputs,
  config,
  pkgs,
  ...
}:
{
  nix.settings = {
    substituters = [ "https://hyprland.cachix.org" ];
    trusted-public-keys = [ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" ];
  };

  programs.hyprland = {
    enable = true;
    package = inputs.hyprland.packages.${pkgs.system}.hyprland;
    xwayland.enable = true;
  };

  services = {
    greetd = {
      enable = true;
      settings = {
        default_session = {
          command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd Hyprland";
          user = "greeter";
        };
      };
    };
    xserver = {
      enable = true;
      layout = "us";
      xkbVariant = "";
      excludePackages = [ pkgs.xterm ];
      libinput.enable = true;
      displayManager.gdm = {
        enable = true;
        wayland = true;
      };
    };
  };

  environment = {
    sessionVariables = {
      WLR_NO_HARDWARE_CURSORS = "1";
      NIXOS_OZONE_WL = "1";
    };
    systemPackages = with pkgs; [
      dunst # notification daemon
      gnome-icon-theme
      hyprcursor # cursor theme
      hyprpaper # wallpaper
      hyprpicker # color picker
      hyprpolkitagent # is a polkit authentication daemon. It is required for GUI applications to be able to request elevated privileges
      hyprsunset # blue light filter
      kitty # terminal
      libnotify # notification daemon
      # mpvpaper # wallpaper
      rofi-wayland # app launcher
      # swaybg # wallpaper
      # swww # wallpaper
      (pkgs.waybar.overrideAttrs (oldAttrs: {
        mesonFlags = oldAttrs.mesonFlags ++ [ "-Dexperimental=true" ];
      }))
      # wofi # app launcher
      # wpaperd # wallpaper
    ];
  };

  hardware = {
    opengl.enable = true;
  };

  sound.enable = true;
  xdg.portal = {
    enable = true;
    extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
  };
}