{ inputs, lib, pkgs, ... }: let inherit (builtins) map genList toString; inherit (lib.meta) getExe getExe'; in { programs.hyprland.settings = { # Keybinds bind = # workspaces # split-workspace is because of the split-workspace plugin map ( i: let mod = a: b: a - (b * (a / b)); key = toString (mod i 10); workspace = toString i; in "$mainMod, ${key}, split:workspace, ${workspace}" ) (genList (i: i + 1) 10) # split-movetoworkspacesilent ++ map ( i: let mod = a: b: a - (b * (a / b)); key = toString (mod i 10); workspace = toString i; in "$mainMod SHIFT, ${key}, split:movetoworkspacesilent, ${workspace}" ) (genList (i: i + 1) 10) ++ [ "$mainMod, RETURN, exec, foot" "$mainMod, Q, killactive" "$mainMod, F, fullscreen, 0" "$mainMod, D, exec, ${pkgs.procps}/bin/pkill fuzzel || ${getExe pkgs.fuzzel}" "$mainMod, SPACE, togglefloating, active" "$mainMod ALT, L, exec, ${getExe pkgs.hyprlock}" # Screenshotting "$mainMod, S, exec, ${getExe pkgs.grimblast} copy area" # only copy "$mainMod SHIFT, S, exec, ${getExe pkgs.grimblast} save area - | ${getExe pkgs.satty} -f -" # edit with satty # Extract text from screen "$mainMod, T, exec, ${getExe pkgs.grimblast} save area - | ${getExe pkgs.tesseract} - - | ${getExe' pkgs.wl-clipboard "wl-copy"}" # File manager "$mainMod, E, exec, ${pkgs.xfce.thunar}/bin/thunar" # Toggle the three different special workspaces. "$mainMod, N, togglespecialworkspace, nixos" "$mainMod, X, togglespecialworkspace, keepassxc" "$mainMod, V, togglespecialworkspace, audio" # Reload hyprland "$mainMod, R, exec, ${getExe' pkgs.hyprland "hyprctl"} reload" # Restart waybar "$mainMod CONTROL, B, exec, ${pkgs.procps}/bin/pkill waybar || ${getExe pkgs.waybar}" "$mainMod CONTROL, Q, exec, ${pkgs.procps}/bin/pkill quickshell || ${getExe' inputs.quickshell.packages.${pkgs.stdenv.system}.default "quickshell"}" ]; binde = [ # window focus "$mainMod, H, movefocus, l" "$mainMod, J, movefocus, d" "$mainMod, K, movefocus, u" "$mainMod, L, movefocus, r" # Move Windows "$mainMod SHIFT, H, movewindow, l" "$mainMod SHIFT, J, movewindow, d" "$mainMod SHIFT, K, movewindow, u" "$mainMod SHIFT, L, movewindow, r" ]; # Media controls bindl = let volumectl = getExe' pkgs.avizo "volumectl"; playerctl = getExe pkgs.playerctl; play-pause = "${playerctl} play-pause"; stop = "${playerctl} stop"; prev = "${playerctl} previous"; next = "${playerctl} next"; toggle-mute = "${volumectl} toggle-mute"; toggle-mic-mute = "${volumectl} toggle-mute"; in [ ", XF86AudioMedia, exec, ${play-pause}" ", XF86AudioPlay, exec, ${play-pause}" ", XF86AudioStop, exec, ${stop}" ", XF86AudioPrev, exec, ${prev}" ", XF86AudioNext, exec, ${next}" ", XF86AudioMute, exec, ${toggle-mute}" ", XF86AudioMicMute, exec, ${toggle-mic-mute}" ]; # locked + repeat bindle = let volumectl = getExe' pkgs.avizo "volumectl"; lightctl = getExe' pkgs.avizo "lightctl"; volume_up = "${volumectl} -u up"; volume_down = "${volumectl} -u down"; brightness_up = "${lightctl} up"; brightness_down = "${lightctl} down"; in [ ", XF86AudioRaiseVolume, exec, ${volume_up}" ", XF86AudioLowerVolume, exec, ${volume_down}" ", XF86MonBrightnessUp, exec, ${brightness_up}" ", XF86MonBrightnessDown, exec, ${brightness_down}" ]; # Mouse settings bindm = [ "$mainMod, mouse:272, movewindow" "$mainMod, mouse:273, resizewindow" ]; # Some more movement-related settings binds = { pass_mouse_when_bound = false; movefocus_cycles_fullscreen = false; }; }; }