Deephack's Hyperland config based on omarchy-nix from Henry Sipp and in turn of course inspired by Omarchy.
at main 71 lines 1.5 kB view raw
1#!/usr/bin/env bash 2 3set -euo pipefail 4 5GROUP="" 6MODE="class" # or "group", depending on how you group windows 7 8while getopts "g:m:h" opt; do 9 case "$opt" in 10 g) GROUP="$OPTARG" ;; 11 m) MODE="$OPTARG" ;; 12 h) 13 echo "Usage: $0 -g GROUP [-m group|class|title]" 14 exit 0 15 ;; 16 *) 17 echo "Usage: $0 -g GROUP [-m group|class|title]" 18 exit 1 19 ;; 20 esac 21done 22 23if [ -z "$GROUP" ]; then 24 echo "You must provide a group name with -g" 25 exit 2 26fi 27 28command -v hyprctl >/dev/null || { echo "hyprctl not found."; exit 3; } 29command -v jq >/dev/null || { echo "jq not found."; exit 3; } 30command -v wofi >/dev/null || { echo "wofi not found."; exit 3; } 31 32# Get window info as JSON 33WINDOWS_JSON=$(hyprctl clients -j) 34 35# Filter by mode 36case "$MODE" in 37 group) 38 FILTER="select(.group == \"$GROUP\")" 39 ;; 40 class) 41 FILTER="select(.class == \"$GROUP\")" 42 ;; 43 title) 44 FILTER="select(.title | test(\"$GROUP\"))" 45 ;; 46 *) 47 echo "Invalid mode: $MODE" 48 exit 4 49 ;; 50esac 51 52# Build menu list: address::workspace — title 53WINDOW_LIST=$(echo "$WINDOWS_JSON" | jq -r " 54 .[] 55 | $FILTER 56 | \"\(.address)::[\(.workspace.name)] \(.class) — \(.title)\" 57") 58 59if [ -z "$WINDOW_LIST" ]; then 60 echo "No matching windows for '$GROUP' (mode: $MODE)" | wofi --dmenu -p "Hyprland Windows" 61 exit 0 62fi 63 64CHOICE=$(printf '%s\n' "$WINDOW_LIST" | wofi --dmenu -p "Windows in $GROUP") 65 66[ -z "$CHOICE" ] && exit 0 67 68ADDR=${CHOICE%%::*} 69 70# Focus the chosen window 71hyprctl dispatch focuswindow address:"$ADDR"