{
  inputs,
  pkgs,
  lib,
  config,
  ...
}:
{
  options.hyprland.enable = lib.mkEnableOption "Hyprland";
  config = {
    home.packages = with pkgs; [
      cliphist
      dunst
      # hyprlock
      hyprpaper
      rofi-wayland
      slurp
      swww
      waybar
      wl-clipboard
      catppuccin-cursors.macchiatoLavender
      bibata-cursors
      # For potentially fixing some issues
      libsForQt5.qt5.qtwayland
      libsForQt5.qt5ct
    ];

    wayland.windowManager.hyprland = {
      enable = true;
      package = pkgs.unstable.hyprland;
      settings = {
        "$mainMod" = "SUPER";
        "$shiftMainMod" = "SUPER_SHIFT";
        "$term" = "kitty";

        monitor = [ ];
        input = {
          kb_layout = "no";
          follow_mouse = 1;
        };

        env = [ "XDG_SESSION_TYPE,wayland" ];

        decoration = {
          rounding = 0;
          drop_shadow = true;
          shadow_range = 4;
          shadow_render_power = 3;
          blur = {
            enabled = true;
            size = 3;
            passes = 1;
            xray = true;
          };
        };

        general = {
          gaps_in = 4;
          gaps_out = 10;
          border_size = 2;
          layout = "dwindle";
        };

        animations = {
          enabled = true;
          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"
          ];
        };
        dwindle = {
          pseudotile = true;
          preserve_split = true;
        };
        master = {
          new_status = "master";
        };
        misc.force_default_wallpaper = -1;

        windowrulev2 = [
          "opacity 0.95 override 0.7 override,class:^(Alacritty)$"
          "opacity 0.95 override 0.7 override,class:^(kitty)$"
        ];

        workspace = [
          "name:mumble, monitor:$mon_top, persistent:true, default:true"
          "name:left, monitor:$mon_left, persistent:true, default:true"
          "name:right, monitor:$mon_right, persistent:true, default:true"
          "name:main 1, monitor:$mon_center, persistent:true, default:true"
          "name:main 2, monitor:$mon_center, persistent:true, default:true"
        ];

        bindm = [ "ALT,mouse:272,movewindow" ];

        bindr = [
          # mumble ptt release
          # ",code:202,exec,mumble rpc stoptalking"
          # ",code:202,exec,pamixer --source 63 -m"
          # ",code:202,exec,sleep 0.5 && pamixer --default-source -m"
        ];

        bind = [
          # term
          "$mainMod,Return,exec,$term"

          # rofi
          "$mainMod,D,exec,rofi-launcher"
          "$mainMod,P,exec,rofi-rbw"

          # hyprland
          "$mainMod,Q,killactive,"
          "CTRLALT,Delete,exit,"
          "$mainMod,Space,togglefloating,"
          "$mainMod,F,fullscreen,"

          # focus
          "$mainMod,l,movefocus,l"
          "$mainMod,h,movefocus,r"
          "$mainMod,k,movefocus,u"
          "$mainMod,j,movefocus,d"

          # move
          "$mainMod,h,movewindow,l"
          "$mainMod,l,movewindow,r"
          "$mainMod,k,movewindow,u"
          "$mainMod,j,movewindow,d"

          # Force opacity
          "$shiftMainMod,o,exec, hl-no-opacity"

          # mumble ptt click
          # ",code:202,exec,mumble rpc starttalking"
          #",code:202,pass,^(info\.mumble\.Mumble)$"
          # ",code:202,exec,pamixer --default-source -u"
          ",code:202,pass,^discord$"

          # worspace switching
          "$mainMod,1,workspace,name:main 1"
          "$mainMod,2,workspace,name:main 2"
          "$mainMod,3,workspace,3"
          "$mainMod,4,workspace,4"
          "$mainMod,5,workspace,5"
          "$mainMod,6,workspace,6"
        ];

        exec-once = [
          "waybar"
          "hyprpaper & sleep 2 && randomwp"
          "easyeffects --gapplication-service"
          # "dunst"
        ];
      };
    };
  };
}