2025-07-15 Notes ━━━━━━━━━━━━━━━━ I'm working on hyprland, one thing I am missing from my awesomewm setup is rofi list all running windows. Sometimes I put a browser instance in a different... Date: July 15, 2025 I’m working on hyprland, one thing I am missing from my awesomewm setup is rofi list all running windows. Sometimes I put a browser instance in a different workspace and I cant find it, especially if I’ve full screened something over top of it. first pass ────────── look for brave and go to it or make one [code] #!/usr/bin/env bash  addr=$(hyprctl clients -j | jq -r \  '.[] | select(.class == "brave-browser") | .address' | head -n1)  if [ -n "$addr" ]; then  # Focus the existing browser window  hyprctl dispatch focuswindow address:$addr else  # Launch a new browser window  brave --password-store=basic & fi second pass ─────────── If there are more than one cycle between them. [code] # Get current window address current_addr=$(hyprctl activewindow -j | jq -r '.address') # Get all Brave window addresses brave_windows=($(hyprctl clients -j | jq -r '.[] | select(.class == "brave-browser") | .address')) num_windows=${#brave_windows[@]} if ((num_windows == 0)); then # No Brave windows, launch it brave --password-store=basic & exit fi # Find the index of the current window in brave_windows current_index=-1 for i in "${!brave_windows[@]}"; do if [[ "${brave_windows[$i]}" == "$current_addr" ]]; then current_index=$i break fi done # If we're already in a Brave window, switch to the next one (wrap around) if ((current_index != -1)); then next_index=$(((current_index + 1) % num_windows)) hyprctl dispatch focuswindow address:${brave_windows[$next_index]} else # Not currently in a Brave window — focus the first one hyprctl dispatch focuswindow address:${brave_windows[0]} fi third pass ────────── Generalize it so that I can make keybindings for any app that I can figure out the classname of and provide a start command. [code] #!/usr/bin/env bash  set -euo pipefail  # Args class="${1:-}" shift start_command="$*"  if [[ -z "$class" || -z "$start_command" ]]; then  echo "Usage: $0 "  exit 1 fi  # Current active window current_addr=$(hyprctl activewindow -j | jq -r '.address')  # All windows with matching class matching_windows=($(hyprctl clients -j | jq -r --arg class "$class" '.[] | select(.class == $class) | .address'))  num_windows=${#matching_windows[@]}  if ((num_windows == 0)); then  # None running — start it  eval "$start_command" &  exit fi  # See if currently focused window is in matching list current_index=-1 for i in "${!matching_windows[@]}"; do  if [[ "${matching_windows[$i]}" == "$current_addr" ]]; then  current_index=$i  break  fi done  # Cycle to next window if already in one if ((current_index != -1)); then  next_index=$(((current_index + 1) % num_windows))  hyprctl dispatch focuswindow address:${matching_windows[$next_index]} else  # Not in one — focus first  hyprctl dispatch focuswindow address:${matching_windows[0]} fi finding the classname ───────────────────── [code] ❯ hyprctl clients -j | jq | grep kitty "class": "kitty", "initialClass": "kitty", "initialTitle": "kitty",