{...}: {
  # Enable Hyprland compositor
  wayland.windowManager.hyprland = {
    enable = true;
    xwayland.enable = true;
    systemd.variables = ["--all"];
    settings = {
      misc = {
        enable_anr_dialog = false;
      };
      # Monitor config for home desk layout
      monitor = [
        "eDP-2, 2560x1600@165, 0x0, auto" # main laptop monitor
        "desc:Lenovo Group Limited LEN G24-10 U5B4KL78, 1920x1080@119.98, -960x-1080, auto" # left external monitor
        "desc:Lenovo Group Limited LEN G24-10 U5B4ZAM2, 1920x1080@119.98, 960x-1080, auto" # right external monitor
      ];
      workspace = [
        "name:comms, monitor:desc:Lenovo Group Limited LEN G24-10 U5B4KL78, default:true"
        "name:bg_noise, monitor:desc:Lenovo Group Limited LEN G24-10 U5B4ZAM2, default:true"
        "name:main, monitor:eDP-2, default:true"
      ];

      # Define SUPER key as mod key
      "$mod" = "SUPER";

      # Set keyboard layout
      input = {
        kb_layout = "gb";
        follow_mouse = 1;
        mouse_refocus = false;
        touchpad = {
          disable_while_typing = true;
        };
      };
      gestures = {
        workspace_swipe = true;
      };

      # Allow using SUPER + left click to move windows and SUPER + right click to resize windows
      bindm = [
        "$mod, mouse:272, movewindow"
        "$mod, mouse:273, resizewindow"
      ];
      exec-once = [
        "[workspace name:comms silent; move -100%,100%] telegram-desktop"
        "[workspace name:comms silent; move -100%,-100%] signal-desktop --enable-features=UseOzonePlatform --ozone-platform=wayland"
        "[workspace name:comms silent; move 100%,100%] floorp https://web.whatsapp.com https://instagram.com"
        "[workspace name:comms silent; move 100%,-100%] vesktop"

        "[workspace name:bg_noise] floorp https://www.youtube.com/playlist?list=WL"

        "[workspace name:main] alacritty"

        "nm-applet --indicator"
        "blueman-applet"
        "trayscale"
      ];

      # Declare all keybinds
      bind = [
        # Keybind for setting fullscreen
        "$mod, F11, fullscreen"
        # Keybinds for starting programs
        "$mod, F, exec, floorp"
        "$mod, 1, exec, alacritty"
        "$mod, D, exec, vesktop"
        "$mod, space, exec, zsh -c 'wofi --show drun, run'"

        # Screenshot tool
        ", Print, exec, grimblast copy area"
        "SHIFT, Print, exec, grimblast save area"

        # Screen locking tool
        "$mod, l, exec, hyprlock"

        # Window management
        "$mod, x, killactive"
        "$mod, tab, togglefloating"

        # Workspace swipe but with $mod+scroll
        "$mod, mouse_up, workspace, r+1"
        "$mod, mouse_down, workspace, r-1"
        # Send window to next workspace
        "$mod SHIFT, mouse_up, movetoworkspace, r+1"
        "$mod SHIFT, mouse_down, movetoworkspace, r-1"
      ];

      # Prevent xwayland apps from looking pixellated, cursor scaling to compensate for this is defined in home.nix
      xwayland = {
        force_zero_scaling = true;
      };
    };
  };
}