{ pkgs, lib, config, ... }:
lib.mkIf config.desktop.hyprland.enable {
  home-manager.users.willifan = {
    wayland.windowManager.hyprland = {
      enable = true;
      systemd.variables = [ "--all" ];
      package = pkgs.hyprland;
      settings = {


        "$SCRIPTS" = "$XDG_CONFIG_HOME/desktop-utils/scripts";

        misc = {
          disable_hyprland_logo = true;
        };

        monitor = [
          ", preffered, auto, 1"
        ] ++ lib.optionals config.desktop.hyprland.hardware.Lenni.enable [
          "eDP-1, preferred, 0x0, 1.6"
        ] ++ lib.optionals config.desktop.hyprland.hardware.Puenktchen.enable [
          "desc:ViewSonic Corporation VX2705-2KP W6Z205100250, 2560x1440@144Hz, 0x384, 1.25"
          "desc:ViewSonic Corporation VX2705-2KP W6Z210400766, 2560x1440@144Hz, 2048x384, 1.25"
          "desc:BNQ BenQ BL2283 CAM01567019, 1920x1080@60Hz, 4096x0, 1.0, transform, 3"
        ];
        # Execute your favorite apps at launch
        exec-once = [
          ''hyprctl dispatch exec "[workspace 1 silent] zen"''
          ''hyprctl dispatch exec "[workspace 2 silent] kitty"''
          #''hyprctl dispatch exec "[workspace 3 silent] "''
          #''hyprctl dispatch exec "[workspace 4 silent] "''
          #''hyprctl dispatch exec "[workspace 8 silent] "''
          ''hyprctl dispatch exec "[workspace 9 silent] vesktop"''
          ''hyprctl dispatch exec "[workspace special:ctrl silent] thunar"''
          ''hyprctl dispatch exec "[workspace special:alt silent] obsidian"''
          #''hyprctl dispatch exec "[workspace special:altgr silent]"''
          #''hyprctl dispatch exec "[workspace special:strg silent] "''
          ''${lib.getExe pkgs.ewwbar}''
        ];

        xwayland.force_zero_scaling = true;

        input = {
          kb_layout = "eu";
          kb_variant = "";
          kb_model = "";
          kb_options = "";
          kb_rules = "";


          follow_mouse = 1;

          touchdevice.transform = lib.mkIf config.desktop.hyprland.hardware.Lillie.enable 3;

          touchpad.natural_scroll = "yes";

          sensitivity = -0.8; # -1.0 - 1.0, 0 means no modification.
          numlock_by_default = 1;
          special_fallthrough = true;
        };



        general = {

          gaps_in = 2;
          gaps_out = 5;
          border_size = 2;
          #        "col.active_border" = "rgba(ffa44bee)";
          #        "col.inactive_border" = "rgba(595959aa)";

          layout = "dwindle";

          resize_on_border = true;
        };

        decoration = {

          rounding = 10;

          blur = {
            enabled = false;
            size = 3;
            passes = 1;
            new_optimizations = 1;
          };

          shadow.enabled = true;
          shadow.range = 4;
          shadow.render_power = 3;
          #        "col.shadow" = "rgba(1a1a1aee)";
        };

        misc = {
          vfr = true;
          mouse_move_enables_dpms = true;
        };

        animations = {
          enabled = "yes";

          bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";

          animation = [
            "windows, 1, 7, myBezier"
            "windowsOut, 1, 7, default, popin 80%"
            "border, 1, 10, default"
            "borderangle, 1, 8, default"
            "fade, 1, 7, default"
            "workspaces, 1, 6, default"
            "specialWorkspace, 1, 8, default, slidefadevert 20%"
          ];
        };

        dwindle = {
          pseudotile = "yes"; # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
          preserve_split = "yes"; # you probably want this
        };

        gestures = {
          workspace_swipe = "on";
          workspace_swipe_create_new = "false";
          workspace_swipe_touch = lib.mkIf config.desktop.hyprland.hardware.Lillie.enable "true";
        };

        device = lib.mkIf config.desktop.hyprland.hardware.Lenni.enable {
          name = "pixa3854:00-093a:0274-touchpad";
          sensitivity = 0;
          natural_scroll = "yes";
        };

        windowrule = [
          "idleinhibit fullscreen, ^(firefox)$"
          "float, ^(thunar)$"
          "stayfocused, title:^(Enpass Assistant)$"
          "pin, title:^(Enpass Assistant)$"
          "center, title:^(Enpass Assistant)$"
          "float, ^(Enpass)$"
          "center, ^(Enpass)$"
        ];

        windowrulev2 = [
          "center, xwayland:(1)"
          "nofocus,class:^jetbrains-(?!toolbox),floating:1,title:^win\d+$"
          ''workspace +0, workspace:name:special:ctrl, floating:0''
          ''float, workspace:name:special:altgr, onworkspace:w[2]''
          ''float, workspace:name:special:strg, onworkspace:w[1]''
          ''workspace +0, workspace:name:special:strg, floating:0''
        ];

        "$mainMod" = "SUPER";

        bind = [
          ''$mainMod, Q, exec, kitty''
          ''$mainMod, C, killactive, ''
          ''$mainMod, M, exit, ''
          ''$mainMod, E, exec, thunar''
          ''$mainMod, V, togglefloating, ''
          ''$mainMod, R, exec, fuzzel''
          ''$mainMod, P, exec, Enpass''
          ''$mainMod, F, fullscreen''

          # Move focus with mainMod + arrow keys
          ''$mainMod, h, movefocus, l''
          ''$mainMod, l, movefocus, r''
          ''$mainMod, k, movefocus, u''
          ''$mainMod, j, movefocus, d''

          '', XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle''
          '', XF86AudioPrev, exec, playerctl previous''
          '', XF86AudioPlay, exec, playerctl play-pause''
          '', XF86AudioNext, exec, playerctl next''
          '', print, exec, grim -g "$(slurp)" - | wl-copy -t image/png''

          # Switch workspaces with mainMod + [0-9]
          ''$mainMod, 1, exec, $SCRIPTS/workspaces.sh 1''
          ''$mainMod, 2, exec, $SCRIPTS/workspaces.sh 2''
          ''$mainMod, 3, exec, $SCRIPTS/workspaces.sh 3''
          ''$mainMod, 4, exec, $SCRIPTS/workspaces.sh 4''
          ''$mainMod, 5, exec, $SCRIPTS/workspaces.sh 5''
          ''$mainMod, 6, exec, $SCRIPTS/workspaces.sh 6''
          ''$mainMod, 7, exec, $SCRIPTS/workspaces.sh 7''
          ''$mainMod, 8, exec, $SCRIPTS/workspaces.sh 8''
          ''$mainMod, 9, exec, $SCRIPTS/workspaces.sh 9''

          # Move active window to a workspace with mainMod + SHIFT + [0-9]
          ''$mainMod SHIFT, 1, movetoworkspace, 1''
          ''$mainMod SHIFT, 2, movetoworkspace, 2''
          ''$mainMod SHIFT, 3, movetoworkspace, 3''
          ''$mainMod SHIFT, 4, movetoworkspace, 4''
          ''$mainMod SHIFT, 5, movetoworkspace, 5''
          ''$mainMod SHIFT, 6, movetoworkspace, 6''
          ''$mainMod SHIFT, 7, movetoworkspace, 7''
          ''$mainMod SHIFT, 8, movetoworkspace, 8''
          ''$mainMod SHIFT, 9, movetoworkspace, 9''

          # Monitor focus
          ''$mainMod ALT, 1, focusmonitor, 0''
          ''$mainMod ALT, 2, focusmonitor, 1''
          ''$mainMod ALT, 3, focusmonitor, 2''
          ''$mainMod ALT, 4, focusmonitor, 3''
          ''$mainMod ALT, 5, focusmonitor, 4''
          ''$mainMod ALT, 6, focusmonitor, 5''
          ''$mainMod ALT, 7, focusmonitor, 6''
          ''$mainMod ALT, 8, focusmonitor, 7''
          ''$mainMod ALT, 9, focusmonitor, 8''
          ''$mainMod ALT, 0, focusmonitor, 9''

          # Scroll through existing workspaces with mainMod + scroll
          ''$mainMod, mouse_down, workspace, e+1''
          ''$mainMod, mouse_up, workspace, e-1''
        ];

        binde = [
          '', XF86AudioLowerVolume, exec, $SCRIPTS/volume.sh -5''
          '', XF86AudioRaiseVolume, exec, $SCRIPTS/volume.sh 5''
        ];

        bindel = [
          '', XF86MonBrightnessDown, exec, $SCRIPTS/brightness.sh -4800''
          '', XF86MonBrightnessUp, exec, $SCRIPTS/brightness.sh 4800''
        ];

        bindr = [
          ''SUPERCTRL, Control_L, togglespecialworkspace, ctrl''
          ''SUPERALT, Alt_L, togglespecialworkspace, alt''
          ''SUPERALT, ALT_R, togglespecialworkspace, altgr''
          ''SUPERCTRL, Control_R, togglespecialworkspace, strg''
        ];

        bindm = [
          # Move/resize windows with mainMod + LMB/RMB and dragging
          ''$mainMod, mouse:272, movewindow''
          ''$mainMod, mouse:273, resizewindow''
        ];

        # ------------------------------------------
        #  ########################################
        #  #######	    Workspaces	    ###########
        #  ########################################
        # ------------------------------------------

        workspace = [
          "1, persistent:true"
          "2, persistent:true"
          "3, persistent:true"
          "4, persistent:true"
          "5, persistent:true"
          "6, persistent:true"
          "7, persistent:true"
          "8, persistent:true"
          "8, persistent:true"
          "9, persistent:true"

          "name:special:ctrl, persistent:true"
          "name:special:alt, persistent:true"
          "name:special:altgr, persistent:true"
          "name:special:strg, persistent:true"
        ];

      };
    };
  };
}