{pkgs, ...}: {
  # TODO: implement a way to show binds, preferably use vicinae.
  wayland.windowManager.hyprland.settings = {
    bindel = [
      ", XF86MonBrightnessUp, exec, ddcutil setvcp 10 + 10"
      ", XF86MonBrightnessDown, exec, ddcutil setvcp 10 - 10"
    ];
    bindm = [
      "SUPER, mouse:272, movewindow"
      "SUPER, mouse:273, resizewindow"
    ];

    bindd =
      [
        # essential
        "SUPER, Return, Open Terminal, exec, uwsm app -- xdg-terminal-exec"
        "SUPER, Q, Kill active, killactive"
        "SUPER, SPACE, Open Vicinae, exec, vicinae toggle"

        # resize
        "SUPER CTRL, H, Resize Left, resizeactive, -40 0"
        "SUPER CTRL, J, Resize Down, resizeactive, 0 40"
        "SUPER CTRL, K, Resize Up, resizeactive, 0 -40"
        "SUPER CTRL, L, Resize Right, resizeactive, 40 0"

        # move focus
        "SUPER, J, Move focus down, movefocus, d"
        "SUPER, K, Move focus up, movefocus, u"
        "SUPER, H, Move focus left, movefocus, l"
        "SUPER, L, Move focus right, movefocus, r"

        # move window
        "SUPER SHIFT, h, Move window left, movewindow, l"
        "SUPER SHIFT, j, Move window down, movewindow, d"
        "SUPER SHIFT, k, Move window up, movewindow, u"
        "SUPER SHIFT, l, Move window right, movewindow, r"

        # fullscreen
        "SUPER, F, Toggle Fullscreen, fullscreen, 0"
        "SUPER SHIFT, F, Toggle Maximized Fullscreen, fullscreen, 1"

        # layout
        "SUPER, O, Toggle Split, layoutmsg, togglesplit"

        # apps
        "SUPER, W, Open Browser, exec, uwsm app -- firefox" # TODO: must be modular
        # "SUPER, SPACE, Open App Launcher, exec, nc -U $XDG_RUNTIME_DIR/walker/walker.sock"
        "SUPER, T, Toggle Steam, togglespecialworkspace, steam"
        "SUPER SHIFT, T, Move to Steam Special Workspace, movetoworkspace, special:steam"

        "SUPER, M, Toggle Music, togglespecialworkspace, music"
        "SUPER SHIFT, M, Move to Music Special Workspace, movetoworkspace, special:music"

        "SUPER, Y, Toggle YouTube, togglespecialworkspace, youtube"
        "SUPER SHIFT, Y, Move to YouTube Special Workspace, movetoworkspace, special:youtube"

        "SUPER, P, Toggle Preload, togglespecialworkspace, preload"
        "SUPER SHIFT, P, Move to Preload Special Workspace, movetoworkspace, special:preload"

        "SUPER SHIFT, T, Move to Steam Special Workspace, movetoworkspace, special:steam"
        "SUPER CTRL, I, Switch Wallpaper, exec, hakase-wallpaper-switch"

        # Screenshots
        "SUPER, S, Screenshot Region (with edit), exec, screenshot region"
        "SUPER SHIFT, S, Screenshot Active Window, exec, screenshot window"
        "SUPER ALT, S, Quick Screenshot (no edit), exec, screenshot region-save"
        "SUPER ALT SHIFT, S, Screenshot Current Monitor, exec, screenshot screen"

        # TODO:
        # add text clipping from pictures
        # add screen recording

        # Special workspace
        "SUPER, U, Toggle Special Workspace, togglespecialworkspace, custom"
        "SUPER SHIFT, U, Move to Special Workspace, movetoworkspace, special:custom"

        # [Workspaces] Toggle between most recent workspaces
        "SUPER, Tab, Cycle workspaces, workspace, previous"

        # hyprspace - workspace overview
        "SUPER, E, Toggle Workspace Overview, overview:toggle"
      ]
      ++ (
        # Generate binds for Super + [1-5] to switch workspaces on current monitor
        # and Super + Shift + [1-5] to move window to workspace on current monitor
        builtins.concatLists (builtins.genList (
            i: let
              ws = i + 1;
              key = toString ws;
            in [
              "SUPER, ${key}, Switch to workspace ${toString ws}, split:workspace, ${toString ws}"
              "SUPER SHIFT, ${key}, Move window to workspace ${toString ws}, split:movetoworkspace, ${toString ws}"
            ]
          )
          5)
      );
  };
}
