Files
Arch_Hyprland_dots/.config/blacklayer/call-blacklayer.sh
T
2026-01-18 14:35:27 +03:00

90 lines
2.9 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
CONF_FILE="$HOME/.config/blacklayer/blacklayer.conf"
[ -f "$CONF_FILE" ] && source "$CONF_FILE"
# -------------------------
# .conf dan gelen degerler/Default değerler
# -------------------------
LOOP_INTERVAL="${LOOP_INTERVAL:-60}"
COUNT_THRESHOLD="${COUNT_THRESHOLD:-5}"
WAYLAND_DISPLAY="${WAYLAND_DISPLAY:-wayland-1}"
EVENT_POLL_INTERVAL="${EVENT_POLL_INTERVAL:-3}"
EVENT_DRIVEN="${EVENT_DRIVEN:-$HOME/.config/blacklayer/event-driven.sh}"
BLACKLAYER_BIN="$HOME/blacklayer"
COUNT_FILE="$HOME/.blacklayer_count"
STATE_DIR="$HOME/.blacklayer_state"
if pgrep -f "bash $0" | grep -v $$ >/dev/null; then
echo "Script zaten çalışıyor, tüm blacklayer'ler kapatılıyor..."
pkill -9 -f "$BLACKLAYER_BIN"
# State ve count sıfırla
echo "0" > "$COUNT_FILE"
for f in "$STATE_DIR"/*; do
echo "false" > "$f"
done
exit 0
fi
# -------------------------
# Sonsuz döngü
# -------------------------
while true; do
export XDG_RUNTIME_DIR="/run/user/$(id -u)"
[ -z "$HYPRLAND_INSTANCE_SIGNATURE" ] && \
export HYPRLAND_INSTANCE_SIGNATURE="$(ls "$XDG_RUNTIME_DIR/hypr/" 2>/dev/null | head -n1)"
export WAYLAND_DISPLAY
mkdir -p "$STATE_DIR"
[ ! -f "$COUNT_FILE" ] && echo "0" > "$COUNT_FILE"
chmod 600 "$STATE_DIR"/* 2>/dev/null || true
JSON="$(hyprctl -j monitors 2>/dev/null)"
echo "$JSON" | jq empty >/dev/null 2>&1 || { sleep "$LOOP_INTERVAL"; continue; }
# -------------------------
# Focused kontrol ve state update
# -------------------------
echo "$JSON" | jq -r '.[] | .name + " " + (.focused|tostring)' | while read -r MONITOR_NAME FOCUSED; do
STATE_FILE="$STATE_DIR/$MONITOR_NAME"
[ ! -f "$STATE_FILE" ] && echo "false" > "$STATE_FILE"
ISWORKING=$(<"$STATE_FILE")
[ "$FOCUSED" = "true" ] && echo "true" > "$STATE_FILE"
done
# -------------------------
# Count artır
# -------------------------
COUNT=$(<"$COUNT_FILE")
COUNT=$((COUNT + 1))
echo "$COUNT" > "$COUNT_FILE"
# -------------------------
# 5. çağrıda blacklayer açma
# -------------------------
if [ "$COUNT" -ge "$COUNT_THRESHOLD" ]; then
echo "$JSON" | jq -r '.[] | .name' | while read -r MONITOR_NAME; do
STATE_FILE="$STATE_DIR/$MONITOR_NAME"
ISWORKING=$(<"$STATE_FILE")
if [ "$ISWORKING" = "false" ] && ! pgrep -f "$BLACKLAYER_BIN $MONITOR_NAME" >/dev/null 2>&1; then
"$BLACKLAYER_BIN" "$MONITOR_NAME" &
nohup bash -c "$EVENT_DRIVEN $MONITOR_NAME $EVENT_POLL_INTERVAL" >/dev/null 2>&1 &
echo "true" > "$STATE_FILE"
fi
done
# 5. okumadan sonra tüm state ve count sıfırlama
echo "0" > "$COUNT_FILE"
for STATE in "$STATE_DIR"/*; do
echo "false" > "$STATE"
done
fi
sleep "$LOOP_INTERVAL"
done