mirror of
https://github.com/prdlk/dotfiles.git
synced 2026-11-02 19:32:43 +00:00
55 lines
2.0 KiB
Bash
55 lines
2.0 KiB
Bash
#!/bin/bash
|
|||
|
|
|
||
|
|
# omarchy:summary=Launch a floating pinned app (youtube) or bring its window to the focused monitor's bottom-left corner.
|
||
|
|
|
||
|
|
set -uo pipefail
|
||
|
|
|
||
|
|
# Usage: omarchy-summon [youtube]
|
||
|
|
#
|
||
|
|
# Each profile is one app kept as a picture-in-picture window: the window
|
||
|
|
# rule in hypr/hyprland.lua floats, pins, sizes and parks it when it first
|
||
|
|
# opens, so a plain launch is enough when no window exists. When one does,
|
||
|
|
# this script carries it to the focused monitor and hands it to omarchy-pip
|
||
|
|
# to fit it there again: the two panels differ in logical size, and Hyprland
|
||
|
|
# keeps a floating window's pixel size and offset across a monitor move.
|
||
|
|
#
|
||
|
|
# PATTERN is an ERE over the window class. A web app's picture-in-picture
|
||
|
|
# overlay shares the class, so windows titled Picture-in-Picture are skipped
|
||
|
|
# (Omarchy's own pip rule owns those).
|
||
|
|
case ${1:-youtube} in
|
||
|
|
youtube)
|
||
|
|
# Chromium derives the class from the app URL, and the same web app has
|
||
|
|
# shown up under more than one host spelling (youtube.com vs
|
||
|
|
# www.youtube.com) once a video is playing, so match the family.
|
||
|
|
PATTERN='^brave-(www\.)?youtube\.com__.*$'
|
||
|
|
LAUNCH="gtk-launch YouTube"
|
||
|
|
;;
|
||
|
|
*)
|
||
|
|
echo "usage: ${0##*/} [youtube]" >&2
|
||
|
|
exit 2
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
|
||
|
|
# Lua dispatcher first, classic name as the pre-lua fallback (same shape as
|
||
|
|
# the other omarchy-* scripts here).
|
||
|
|
hypr_dispatch() {
|
||
|
|
local lua="$1"
|
||
|
|
shift
|
||
|
|
hyprctl dispatch "$lua" >/dev/null 2>&1 || hyprctl dispatch "$@" >/dev/null
|
||
|
|
}
|
||
|
|
|
||
|
|
ADDRESS=$(hyprctl clients -j | jq -r --arg re "$PATTERN" '
|
||
|
|
first(.[] | select((.class | test($re)) and ((.title | test("Picture.?in.?[Pp]icture")) | not)))
|
||
|
|
| .address // empty')
|
||
|
|
|
||
|
|
if [[ -z $ADDRESS ]]; then
|
||
|
|
exec setsid uwsm-app -- $LAUNCH >/dev/null 2>&1
|
||
|
|
fi
|
||
|
|
|
||
|
|
WINDOW="address:$ADDRESS"
|
||
|
|
MON_NAME=$(hyprctl monitors -j | jq -r '.[] | select(.focused) | .name')
|
||
|
|
[[ -n $MON_NAME ]] || exit 1
|
||
|
|
|
||
|
|
hypr_dispatch "hl.dsp.window.move({ monitor = \"$MON_NAME\", window = \"$WINDOW\" })" movewindow "mon:$MON_NAME,$WINDOW"
|
||
|
|
omarchy-pip on "$WINDOW"
|
||
|
|
hypr_dispatch "hl.dsp.focus({ window = \"$WINDOW\" })" focuswindow "$WINDOW"
|