{ pkgs, lib, config, pkgs-nur-hadi, ... }: let colors = config.lib.stylix.colors; mkMenu = menu: let configFile = pkgs.writeText "config.yaml" ( lib.generators.toYAML { } { anchor = "bottom-right"; border = "#${colors.base0D}80"; background = "#${colors.base01}EE"; color = "#${colors.base05}"; margin_right = 15; margin_bottom = 15; rows_per_column = 5; inherit menu; } ); in pkgs.writeShellScriptBin "menu" '' exec ${lib.getExe pkgs.wlr-which-key} ${configFile} ''; gui = exe: "uwsm app -- ${exe}"; term = exe: "uwsm app -- ${pkgs.ghostty}/bin/ghostty -e ${exe}"; appsMenu = mkMenu [ { key = "f"; desc = "Firefox"; cmd = gui "${pkgs.firefox}/bin/firefox"; } { key = "o"; desc = "Obsidian"; cmd = gui "${pkgs.obsidian}/bin/obsidian"; } { key = "t"; desc = "TickTick"; cmd = gui "${pkgs.ticktick}/bin/ticktick"; } { key = "n"; desc = "OnlyOffice"; cmd = gui "${pkgs.onlyoffice-desktopeditors}/bin/onlyoffice-desktopeditors"; } { key = "v"; desc = "Vesktop"; cmd = gui "${pkgs.vesktop}/bin/vesktop"; } { key = "l"; desc = "VLC"; cmd = gui "${pkgs.vlc}/bin/vlc"; } ]; devMenu = mkMenu [ { key = "z"; desc = "Zed"; cmd = gui "${pkgs.zed-editor}/bin/zed"; } { key = "c"; desc = "VSCodium"; cmd = gui "${pkgs.vscodium}/bin/codium"; } { key = "g"; desc = "Ghostty"; cmd = gui "${pkgs.ghostty}/bin/ghostty"; } { key = "f"; desc = "Fastfetch"; cmd = term "${pkgs.fastfetch}/bin/fastfetch"; } { key = "d"; desc = "Dysk"; cmd = term "${pkgs.dysk}/bin/dysk"; } { key = "w"; desc = "Wikiman"; cmd = term "${pkgs.wikiman}/bin/wikiman"; } { key = "s"; desc = "STTR"; cmd = term "${pkgs.sttr}/bin/sttr"; } ]; gamingMenu = mkMenu [ { key = "l"; desc = "Lutris"; cmd = gui "${pkgs.lutris}/bin/lutris"; } { key = "p"; desc = "ProtonUp-Qt"; cmd = gui "${pkgs.protonup-qt}/bin/protonup-qt"; } { key = "g"; desc = "GOverlay"; cmd = gui "${pkgs.goverlay}/bin/goverlay"; } ]; utilityMenu = mkMenu [ { key = "B"; desc = "Blueman"; cmd = gui "${pkgs.blueman}/bin/blueman-manager"; } { key = "x"; desc = "Bluetoothctl"; cmd = term "${pkgs.bluez}/bin/bluetoothctl"; } { key = "w"; desc = "WiFi TUI"; cmd = term "${pkgs.wifitui}/bin/wifitui"; } { key = "m"; desc = "Wiremix"; cmd = term "${pkgs.wiremix}/bin/wiremix"; } { key = "u"; desc = "USBGuard TUI"; cmd = term "${pkgs-nur-hadi.usbguard-tui}/bin/usbguard-tui"; } { key = "c"; desc = "Caligula"; cmd = term "${pkgs.caligula}/bin/caligula"; } { key = "h"; desc = "Browsh"; cmd = term "${pkgs.browsh}/bin/browsh"; } { key = "p"; desc = "Peaclock"; cmd = term "${pkgs.peaclock}/bin/peaclock"; } { key = "o"; desc = "Cbonsai"; cmd = term "${pkgs.cbonsai}/bin/cbonsai"; } { key = "i"; desc = "Pipes"; cmd = term "${pkgs.pipes}/bin/pipes"; } { key = "t"; desc = "Tealdeer"; cmd = term "${pkgs.tealdeer}/bin/tldr"; } { key = "s"; desc = "Hyprlock"; cmd = gui "${pkgs.hyprlock}/bin/hyprlock"; } ]; systemMenu = mkMenu [ { key = "l"; desc = "Lock"; cmd = "hyprlock"; } { key = "w"; desc = "Restart Waybar"; cmd = "pkill -x waybar; waybar"; } { key = "r"; desc = "Restart Walker"; cmd = "systemctl --user restart walker.service"; } { key = "e"; desc = "Restart Elephant"; cmd = "systemctl --user restart elephant.service"; } { key = "s"; desc = "Suspend"; cmd = "systemctl suspend"; } { key = "p"; desc = "Power Off"; cmd = "systemctl poweroff"; } { key = "b"; desc = "Reboot"; cmd = "systemctl reboot"; } ]; in { wayland.windowManager.hyprland.settings = { "$mod" = "SUPER"; "$shiftMod" = "SUPER_SHIFT"; bind = [ # Applications ( "$shiftMod, A, exec, " + lib.getExe (mkMenu [ { key = "a"; desc = "Apps"; cmd = lib.getExe appsMenu; } { key = "d"; desc = "Dev"; cmd = lib.getExe devMenu; } { key = "g"; desc = "Gaming"; cmd = lib.getExe gamingMenu; } { key = "u"; desc = "Utilities"; cmd = lib.getExe utilityMenu; } { key = "s"; desc = "System"; cmd = lib.getExe systemMenu; } ]) ) "$mod,B, exec, uwsm app -- ${config.programs.librewolf.package}/bin/helium" # Browser # Power ( "$mod, X, exec, " + lib.getExe (mkMenu [ { key = "l"; desc = "Lock"; cmd = "hyprlock"; } { key = "s"; desc = "Suspend"; cmd = "systemctl suspend"; } { key = "r"; desc = "Reboot"; cmd = "systemctl reboot"; } { key = "p"; desc = "Power Off"; cmd = "systemctl poweroff"; } { key = "n"; desc = "Nightshift"; cmd = "nightshift-toggle"; } { key = "c"; desc = "Restart Waybar"; cmd = "pkill -x waybar; waybar"; } ]) ) # Quick launch "$mod,RETURN, exec, uwsm app -- ${pkgs.ghostty}/bin/ghostty" # Ghostty (terminal) "$mod,E, exec, uwsm app -- ${pkgs.thunar}/bin/thunar" # Thunar "$mod, SPACE, exec, walker" # Launcher "$mod, N, exec, ${lib.getExe pkgs.grimblast} save area" # Save screenshot "$mod, D, exec, ${lib.getExe pkgs.grimblast} copy area" # Copy screenshot # Windows "$mod,Q, killactive," # Close window "$mod,F, fullscreen" # Toggle Fullscreen "$shiftMod,F, togglefloating," # Toggle Floating # Focus Windows "$mod,H, movefocus, l" # Move focus left "$mod,J, movefocus, d" # Move focus Down "$mod,K, movefocus, u" # Move focus Up "$mod,L, movefocus, r" # Move focus Right "$shiftMod,H, focusmonitor, -1" # Focus previous monitor "$shiftMod,J, layoutmsg, removemaster" # Remove from master "$shiftMod,K, layoutmsg, addmaster" # Add to master "$shiftMod,L, focusmonitor, 1" # Focus next monitor # Utilities "$shiftMod, S, exec, ${lib.getExe pkgs.grimblast} copy area" # Capture region ", Print, exec, ${lib.getExe pkgs.grimblast} copy area" # Capture region "$shiftMod+Alt, S, exec, ${lib.getExe pkgs.grimblast} save area" # Capture region ] ++ (builtins.concatLists ( builtins.genList ( i: let ws = i + 1; in [ "$mod,code:1${toString i}, workspace, ${toString ws}" "$mod SHIFT,code:1${toString i}, movetoworkspace, ${toString ws}" ] ) 9 )); bindm = [ "$mod,mouse:272, movewindow" # Move Window (mouse) "$mod,R, resizewindow" # Resize Window (mouse) ]; bindl = [ # Brightness ", XF86MonBrightnessUp, exec, ${lib.getExe pkgs.brightnessctl} set 5%+" ", XF86MonBrightnessDown, exec, ${lib.getExe pkgs.brightnessctl} set 5%-" # Media ", XF86AudioPlay, exec, ${lib.getExe pkgs.playerctl} play-pause" ", XF86AudioPause, exec, ${lib.getExe pkgs.playerctl} play-pause" ", XF86AudioNext, exec, ${lib.getExe pkgs.playerctl} next" ", XF86AudioPrev, exec, ${lib.getExe pkgs.playerctl} previous" ", XF86AudioStop, exec, ${lib.getExe pkgs.playerctl} stop" # Sound ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" ", XF86AudioRaiseVolume, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ 0; wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+" ", XF86AudioLowerVolume, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ 0; wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-" ]; }; }