Add files via upload
This commit is contained in:
Binary file not shown.
@@ -0,0 +1,82 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
BASE_DIR="$HOME/.config/blacklayer"
|
||||||
|
CONF_FILE="$BASE_DIR/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="$BASE_DIR/blacklayer"
|
||||||
|
COUNT_FILE="$BASE_DIR/.blacklayer_count"
|
||||||
|
STATE_DIR="$BASE_DIR/.blacklayer_state"
|
||||||
|
WAYBAR_BIN="/usr/bin/waybar"
|
||||||
|
WAYBAR_CONFIG_DIR="$HOME/.config/waybar"
|
||||||
|
|
||||||
|
|
||||||
|
# -------------------------
|
||||||
|
# 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
|
||||||
|
pkill -f "waybar.*$MONITOR_NAME" 2>/dev/null
|
||||||
|
|
||||||
|
"$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,45 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# -------------------------
|
||||||
|
# Base paths (EN BAŞTA)
|
||||||
|
# -------------------------
|
||||||
|
BASE_DIR="$HOME/.config/blacklayer"
|
||||||
|
PID_FILE="$BASE_DIR/blacklayer_worker.pid"
|
||||||
|
STATE_DIR="$BASE_DIR/blacklayer_state"
|
||||||
|
COUNT_FILE="$BASE_DIR/blacklayer_count"
|
||||||
|
|
||||||
|
WORKER="$BASE_DIR/blacklayer-worker.sh"
|
||||||
|
BLACKLAYER_BIN="$BASE_DIR/blacklayer"
|
||||||
|
|
||||||
|
# Dizini garanti altına al
|
||||||
|
mkdir -p "$STATE_DIR"
|
||||||
|
|
||||||
|
# -------------------------
|
||||||
|
# Worker çalışıyorsa → KAPAT
|
||||||
|
# -------------------------
|
||||||
|
if [ -f "$PID_FILE" ] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then
|
||||||
|
notify-send "Blacklayer" "blacklayer is stopping"
|
||||||
|
echo "[blacklayer] stopping..."
|
||||||
|
|
||||||
|
# Worker'ı kapat
|
||||||
|
kill "$(cat "$PID_FILE")" 2>/dev/null
|
||||||
|
rm -f "$PID_FILE"
|
||||||
|
|
||||||
|
# Tüm blacklayer processlerini kapat
|
||||||
|
pkill -f "$BLACKLAYER_BIN" 2>/dev/null
|
||||||
|
|
||||||
|
# State & count temizliği
|
||||||
|
rm -rf "$STATE_DIR"
|
||||||
|
rm -f "$COUNT_FILE"
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# -------------------------
|
||||||
|
# Çalışmıyorsa → BAŞLAT
|
||||||
|
# -------------------------
|
||||||
|
notify-send "Blacklayer" "blacklayer is starting"
|
||||||
|
echo "[blacklayer] starting..."
|
||||||
|
|
||||||
|
nohup bash "$WORKER" >/dev/null 2>&1 &
|
||||||
|
echo $! > "$PID_FILE"
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
#!/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; }
|
||||||
|
|
||||||
|
BASE_DIR="$HOME/.config/blacklayer"
|
||||||
|
BLACKLAYER_BIN="$BASE_DIR/blacklayer"
|
||||||
|
STATE_DIR="$BASE_DIR/.blacklayer_state"
|
||||||
|
STATE_FILE="$STATE_DIR/$MONITOR"
|
||||||
|
|
||||||
|
WAYBAR_BIN="/usr/bin/waybar"
|
||||||
|
WAYBAR_CONFIG_DIR="$HOME/.config/waybar"
|
||||||
|
WAYBAR_CONFIG="$WAYBAR_CONFIG_DIR/config-$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
|
||||||
|
# Blacklayer kapat
|
||||||
|
pkill -f "$BLACKLAYER_BIN $MONITOR" >/dev/null 2>&1
|
||||||
|
echo "false" > "$STATE_FILE"
|
||||||
|
|
||||||
|
# Waybar tekrar aç
|
||||||
|
if [ -f "$WAYBAR_CONFIG" ]; then
|
||||||
|
"$WAYBAR_BIN" -c "$WAYBAR_CONFIG" >/dev/null 2>&1 &
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
WAYBAR_DIR="$HOME/.config/waybar"
|
||||||
|
BASE_CONFIG="$WAYBAR_DIR/config"
|
||||||
|
|
||||||
|
if [ ! -f "$BASE_CONFIG" ]; then
|
||||||
|
echo "[error] base config not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
command -v hyprctl >/dev/null || {
|
||||||
|
echo "[error] hyprctl not found"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
MONITORS=$(hyprctl -j monitors | jq -r '.[].name')
|
||||||
|
|
||||||
|
for MONITOR in $MONITORS; do
|
||||||
|
TARGET="$WAYBAR_DIR/config-$MONITOR"
|
||||||
|
|
||||||
|
{
|
||||||
|
echo '{'
|
||||||
|
echo " \"output\": [\"$MONITOR\"],"
|
||||||
|
sed '1s/^{//' "$BASE_CONFIG"
|
||||||
|
} > "$TARGET"
|
||||||
|
|
||||||
|
echo "[ok] generated $TARGET for $MONITOR"
|
||||||
|
done
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Ortam değişkenleri
|
||||||
|
export XDG_RUNTIME_DIR="/run/user/$(id -u)"
|
||||||
|
export WAYLAND_DISPLAY="wayland-1"
|
||||||
|
|
||||||
|
WAYBAR_BIN="/usr/bin/waybar"
|
||||||
|
CONFIG_DIR="$HOME/.config/waybar"
|
||||||
|
|
||||||
|
# Tüm config-* dosyalarını al
|
||||||
|
for CONFIG in "$CONFIG_DIR"/config-*; do
|
||||||
|
echo "[waybar] starting with $CONFIG"
|
||||||
|
"$WAYBAR_BIN" -c "$CONFIG" &
|
||||||
|
done
|
||||||
Reference in New Issue
Block a user