{
  inputs,
  pkgs,
  config,
  ...
}:
let
  base16 = config.modules.base16;
in
{
  home.packages = [
    pkgs.hyprcursor
    pkgs.rose-pine-cursor
  ];
  home.pointerCursor = {
    enable = true;
    name = "rose-pine-hyprcursor";
    package = pkgs.rose-pine-hyprcursor;
    hyprcursor.enable = true;
  };
  wayland.windowManager.hyprland.settings = {
    env = [
      "XCURSOR_THEME,BreezeX-RosePine-Linux"
      "XCURSOR_SIZE,24"
      "HYPRCURSOR_SIZE,24"
      "LIBVA_DRIVER_NAME,nvidia"
      "__GLX_VENDOR_LIBRARY_NAME,nvidia"
      "WEBKIT_DISABLE_DMABUF_RENDERER,1" # maybe disable if nixos fixes alcom
    ];
    general = {
      gaps_in = 1;
      gaps_out = 1;
      border_size = 1;
      "col.active_border" =
        "rgb(${toString base16.rgb."base06".r},${toString base16.rgb."base06".g},${toString base16.rgb."base06".b})";
      "col.inactive_border" =
        "rgb(${toString base16.rgb."base03".r},${toString base16.rgb."base03".g},${toString base16.rgb."base03".b})";
      resize_on_border = false;
      allow_tearing = true;
      layout = "dwindle";
    };
    decoration = {
      rounding = 4;
      rounding_power = 1;
      active_opacity = 1.0;
      inactive_opacity = 1.0;

      shadow = {
        enabled = false;
      };

      blur = {
        enabled = true;
        passes = 1;
        new_optimizations = true;
        ignore_opacity = false;
      };
    };
    animations = {
      enabled = true;
      bezier = [
        "easeOutQuint,0.23,1,0.32,1"
        "easeInOutCubic,0.65,0.05,0.36,1"
        "linear,0,0,1,1"
        "almostLinear,0.5,0.5,0.75,1.0"
        "quick,0.15,0,0.1,1"
      ];
      animation = [
        "global, 1, 10, default"
        "border, 1, 5.39, easeOutQuint"
        "windows, 1, 2.79, easeOutQuint"
        "windowsIn, 1, 1, easeOutQuint, popin 87%"
        "windowsOut, 1, 1, linear, popin 87%"
        "windowsMove, 1, 1, easeInOutCubic"
        "fadeIn, 1, 0.5, almostLinear"
        "fadeOut, 1, 0.5, almostLinear"
        "fade, 1, 1, quick"
        "layers, 1, 3.81, easeOutQuint"
        "layersIn, 1, 4, easeOutQuint, fade"
        "layersOut, 1, 1.5, linear, fade"
        "fadeLayersIn, 1, 1.79, almostLinear"
        "fadeLayersOut, 1, 1.39, almostLinear"
        "workspaces, 1, 1, almostLinear, slide"
        "workspacesIn, 1, 1, easeInOutCubic, slide"
        "workspacesOut, 1, 1, easeInOutCubic, slide"
        "zoomFactor, 1, 7, quick"
      ];
    };
    dwindle = {
      pseudotile = true;
      preserve_split = true;
    };
    # master = {
    # 	new_status = master;
    # };
    misc = {
      force_default_wallpaper = -1;
      disable_hyprland_logo = false;
      enable_anr_dialog = false;
      vfr = true;
    };
    "$mainMod" = "SUPER";
    bind = [
      "$mainMod, C, killactive"
      "$mainMod, M, exec, uwsm stop"
      "$mainMod, E, exec, $fileManager"
      "$mainMod, V, togglefloating,"
      "$mainMod, P, pseudo, # dwindle"
      "$mainMod, J, togglesplit, # dwindle"
      "$mainMod, left, movefocus, l"
      "$mainMod, right, movefocus, r"
      "$mainMod, up, movefocus, u"
      "$mainMod, down, movefocus, d"
      "$mainMod, L, exec, wlogout"
      (
        "$mainMod, S, exec, "
        + ''wayfreeze --after-freeze-cmd 'grim -g "$(slurp -d)" - | wl-copy -t image/png;killall wayfreeze' --hide-cursor''
      )
      "$mainMod, F, fullscreen"
      "$mainMod, mouse_down, workspace, e+1"
      "$mainMod, mouse_up, workspace, e-1"
      ", home, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
      ", end, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
      ", F8, pass, class:^(com\.obsproject\.Studio)$"
      "$mainMod, 0, workspace, 10"
      "$mainMod SHIFT, 0, movetoworkspace, 10"
    ]
    ++ (builtins.concatLists (
      builtins.genList (
        i:
        let
          ws = i + 1;
        in
        [
          "$mainMod, ${toString ws}, workspace, ${toString ws}"
          "$mainMod SHIFT, ${toString ws}, movetoworkspace, ${toString ws}"
        ]
      ) 9
    ));
    bindm = [
      "$mainMod, mouse:272, movewindow"
      "$mainMod, mouse:273, resizewindow"
    ];
    windowrule = [
      "match:class .*, suppress_event maximize"
      "match:class ^(gamescope)$, workspace 5"
      "match:class ^(gamescope)$, fullscreen true"
      "match:class ^(gamescope)$, immediate true"
      "match:class ^(steam)$, workspace 6 silent"
      "match:class ^(vesktop)$, workspace 8 silent"
      "match:class ^(org.telegram.desktop)$, workspace 8 silent"
      "match:class ^(com.obsproject.Studio)$, workspace 10 silent"
      "match:initial_title ^(OBS Studio Crash Detected)$, pin true"
      "match:initial_title ^(Discord Popout)$, workspace 1 silent"
    ];
    layerrule = [
      "match:namespace ^(notifications)$, no_screen_share true"
      # "match:namespace ^(quickshell)$, blur true"
    ];
    # exec-once = [
    # ];
    # we need to auto launch: quickshell, steam, ar_rpc (maybe), vesktop, telegram, qbit, and obs
  };
}
