self: { osConfig, lib, ... }: { config = let inherit (lib) map; inherit (self.lib.hypr) mkBind; inherit (osConfig.services.xserver) xkb; inherit (osConfig.roles.desktop) mainMonitor; miceNames = [ "logitech-g502-x" "logitech-g502-hero-gaming-mouse" ]; mkConf = name: { inherit name; sensitivity = 0; accel_profile = "flat"; }; in { wayland.windowManager.hyprland = { settings = { device = map mkConf miceNames; cursor = { no_hardware_cursors = osConfig.nvidia.enable; hide_on_touch = true; }; exec-once = if mainMonitor != null then ["hyprctl dispatch focusmonitor ${mainMonitor}"] else []; input = { # Keyboard kb_layout = xkb.layout; kb_variant = xkb.variant; numlock_by_default = true; repeat_rate = 25; # Mouse follow_mouse = true; # Touchpad touchpad = { natural_scroll = true; disable_while_typing = false; drag_lock = true; tap-and-drag = true; }; }; bind = map mkBind [ { key = "XF86AudioPlay"; command = "playerctl play-pause"; } { key = "XF86AudioStop"; command = "playerctl stop"; } { key = "XF86AudioNext"; command = "playerctl next"; } { key = "XF86AudioPrev"; command = "playerctl previous"; } ]; }; }; }; # For accurate stack trace _file = ./inputs.nix; }