Add files via upload
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
#!/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
|
||||
@@ -0,0 +1,23 @@
|
||||
#!/usr/bin/env bash
|
||||
# Kullanım: event-driven.sh <MONITOR_NAME> <POLL_INTERVAL>
|
||||
MONITOR="$1"
|
||||
POLL_INTERVAL="${2:-3}" # default 3s
|
||||
[ -z "$MONITOR" ] && { echo "Monitor arg missing"; exit 1; }
|
||||
|
||||
BLACKLAYER_BIN="$HOME/blacklayer"
|
||||
STATE_DIR="$HOME/.blacklayer_state"
|
||||
STATE_FILE="$STATE_DIR/$MONITOR"
|
||||
|
||||
while true; do
|
||||
sleep "$POLL_INTERVAL"
|
||||
|
||||
JSON="$(hyprctl -j monitors 2>/dev/null)"
|
||||
echo "$JSON" | jq empty >/dev/null 2>&1 || continue
|
||||
|
||||
FOCUSED=$(echo "$JSON" | jq -r ".[] | select(.name==\"$MONITOR\") | .focused")
|
||||
if [ "$FOCUSED" = "true" ]; then
|
||||
pkill -f "$BLACKLAYER_BIN $MONITOR" >/dev/null 2>&1
|
||||
echo "false" > "$STATE_FILE"
|
||||
exit 0
|
||||
fi
|
||||
done
|
||||
Reference in New Issue
Block a user