{
  lib,
  pkgs,
  ...
}: {
  imports = [
    (import ./swaylock.nix)
    (import ./swayidle.nix)
    (import ./waybar.nix)
  ];
  xdg.portal = {
    enable = true;
    configPackages = [pkgs.hyprland];
    extraPortals = [pkgs.xdg-desktop-portal-hyprland pkgs.xdg-desktop-portal-gtk];
  };

  wayland.windowManager.hyprland = {
    enable = true;
    systemd.enable = true;
    settings = {
      input = {
        touchpad = {
          natural_scroll = true;
          scroll_factor = 0.5;
        };
      };
      gestures = {
        workspace_swipe = true;
        workspace_swipe_numbered = true;
      };
      decoration = {
        rounding = 5;
        drop_shadow = false;
      };
      bezier = [
        "overshot, 0.05, 0.9, 0.1, 1.1"
        "linear, 0.0, 0.0, 1.0, 1.0"
      ];
      animations = {
        enabled = true;
        animation = [
          "windows,    1, 1, default, popin"
          "border,     1, 1, default"
          "fade,       1, 1, default"
          "workspaces, 1, 3, overshot"
          "borderangle,1, 50, linear, loop"
        ];
      };
      bind = [
        "SUPER, h, movefocus,l"
        "SUPER, l, movefocus,r"
        "SUPER,       j,     layoutmsg,cyclenext"
        "SUPER,       k,     layoutmsg,cycleprev"
        "SUPER,       space, layoutmsg,swapwithmaster master"
        "SUPER,       F,     fullscreen,"
        "SUPER,       V,     togglefloating,"
        "SUPER,       W,     layoutmsg, orientationprev"
        "SUPER_SHIFT, W,     layoutmsg, orientationnext"
        "SUPER_SHIFT, V,     togglegroup,"
        "SUPER_SHIFT, h,     changegroupactive,b"
        "SUPER_SHIFT, h,     moveintogroup,l"
        "SUPER_SHIFT, l,     moveintogroup,r"
        "SUPER_SHIFT, l,     changegroupactive,f"
        "SUPER,       Y,     togglespecialworkspace"
        "SUPER_SHIFT, Y,     movetoworkspace, special"
        "SUPER_SHIFT, X,     killactive"
        "SUPER,       slash, focuswindow, brave-browser"
        "SUPER,       n,     focuswindow, Logseq"
        "SUPER, R, submap, resize"
        "SUPER,1,workspace,1"
        "SUPER,2,workspace,2"
        "SUPER,3,workspace,3"
        "SUPER,4,workspace,4"
        "SUPER,5,workspace,5"
        "SUPER,6,workspace,6"
        "SUPER,7,workspace,7"
        "SUPER,8,workspace,8"
        "SUPER,9,workspace,9"
        "SUPER,0,workspace,10"
        "SUPER,left,workspace,r-1"
        "SUPER,right,workspace,r+1"
        "SUPER_SHIFT,1,movetoworkspace,1"
        "SUPER_SHIFT,2,movetoworkspace,2"
        "SUPER_SHIFT,3,movetoworkspace,3"
        "SUPER_SHIFT,4,movetoworkspace,4"
        "SUPER_SHIFT,5,movetoworkspace,5"
        "SUPER_SHIFT,6,movetoworkspace,6"
        "SUPER_SHIFT,7,movetoworkspace,7"
        "SUPER_SHIFT,8,movetoworkspace,8"
        "SUPER_SHIFT,9,movetoworkspace,9"
        "SUPER_SHIFT,0,movetoworkspace,10"
      ];
      bindm = [
        "SUPER, mouse:272, movewindow"
        "SUPER, mouse:273, resizewindow"
      ];
      env = [
        "GDK_BACKEND,wayland,x11"
        "QT_QPA_PLATFORM,wayland;xcb"
        "SDL_VIDEODRIVER,wayland"
        "CLUTTER_BACKEND,wayland"
        "XDG_CURRENT_DESKTOP,Hyprland"
        "XDG_SESSION_TYPE,wayland"
        "XDG_SESSION_DESKTOP,Hyprland"
        "QT_AUTO_SCREEN_SCALE_FACTOR,1"
        "QT_WAYLAND_DISABLE_WINDOWDECORATION,1"
        "NIXOS_OZONE_WL,1"
        "WLR_NO_HARDWARE_CURSORS,1"
      ];
      windowrule = [
        "float, title:wlogout"
        "idleinhibit always, vrmonitor"
        "idleinhibit focus, steam_app"
      ];
      workspace = [
        "11, default:true"
      ];
      general = {
        gaps_out = 10;
        resize_on_border = true;
        layout = "master";
        # "col.active_border" = "rgb(FFFF00) rgb(00FFFF) rgb(FF00FF)";
        border_size = lib.mkDefault 5;
      };
      master = {
        mfact = 0.7;
        new_on_top = true;
      };
      misc = {
        vrr = 2;
        focus_on_activate = true;
      };
    };
    # https://wiki.hyprland.org/Configuring/Variables/
    extraConfig = ''
      submap = resize
        binde = ,right,resizeactive,10 0
        binde = ,left,resizeactive,-10 0
        binde = ,up,resizeactive,0 -10
        binde = ,down,resizeactive,0 10
        binde = ,k,resizeactive,0 -10
        binde = ,j,resizeactive,0 10
        binde = ,l,splitratio,0.05
        binde = ,h,splitratio,-0.05
        binde = SHIFT,l,splitratio,0.3
        binde = SHIFT,h,splitratio,-0.3

        bind = ,   escape, submap,reset
        bind = ,    enter, submap,reset
        bind = SUPER,   R, submap,reset
        bind = CONTROL, C, submap,reset
      submap = reset
    '';
  };

  services.mako = {
    enable = true;
  };

  programs.waybar.settings.mainBar.modules-left = ["hyprland/workspaces" "hyprland/window"];
}
