Deephack's Hyperland config based on omarchy-nix from Henry Sipp and in turn of course inspired by Omarchy.
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"