{ 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] "''
      ];

      xwayland.force_zero_scaling = true;

      input = {
        kb_layout = "us";
        kb_variant = "";
        kb_model = "";
        kb_options = "compose:menu";
        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"
      ];

    };
  };
  };
}