#!/bin/bash # # A script to display Hyprland keybindings defined in your configuration # using wofi for an interactive search menu. # # --- CONFIGURATION --- # Set the path to your keybindings file. # The script will check keybindings in 'hyprland.conf'. HYPRLAND_CONF="$HOME/.config/hypr/hyprland.conf" # --- SCRIPT LOGIC --- # Determine which configuration file to use if [ -f "$HYPRLAND_CONF" ]; then CONFIG_FILE="$HYPRLAND_CONF" else # If no config file is found, show an error in wofi and exit echo "Error: Configuration file not found." | wofi -dmenu -p "Hyprland Error" exit 1 fi # Process the configuration file to extract and format keybindings # 1. `grep` finds all lines starting with 'bind' (allowing for leading spaces). # 2. The first `sed` removes comments (anything after a '#'). # 3. `awk` does the heavy lifting of formatting the output. # - It sets the field separator to a comma ','. # - It removes the 'bind... =' part from the beginning of the line. # - It joins the key combination (e.g., "SUPER + Q"). # - It joins the command that the key executes. # - It prints everything in a nicely aligned format. # 4. The final `sed` cleans up any leftover commas from the end of lines. grep '^[[:space:]]*bind' "$CONFIG_FILE" | sed 's/\#.*//' | awk -F, '{ # Remove the "bind... =" part and any surrounding whitespace sub(/^[[:space:]]*bind[^=]*=[[:space:]]*/, "", $1); # Combine the modifier and key (first two fields) key_combo = $1 " + " $2; gsub(/^[ \t]+|[ \t]+$/, "", key_combo); # Trim whitespace # Reconstruct the command from the remaining fields action = ""; for (i = 3; i <= NF; i++) { action = action $i (i < NF ? "," : ""); } gsub(/^[ \t]+|[ \t]+$/, "", action); # Trim whitespace # Print only if an action exists if (action != "") { printf "%-35s → %s\n", key_combo, action; } }' | sed 's/,$//' | flock --nonblock /tmp/.wofi.lock -c "wofi -dmenu -i --width 60% --height 70% -p 'Hyprland Keybindings'"