added some files
This commit is contained in:
parent
0eac06068b
commit
5e0aef0275
3 changed files with 150 additions and 0 deletions
72
music-notify
Executable file
72
music-notify
Executable file
|
|
@ -0,0 +1,72 @@
|
|||
#!/usr/bin/env python3
|
||||
import subprocess, threading, urllib.request
|
||||
import dbus, dbus.service, dbus.mainloop.glib
|
||||
from gi.repository import GLib
|
||||
|
||||
class MusicNotifier:
|
||||
def __init__(self):
|
||||
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
|
||||
bus = dbus.SessionBus()
|
||||
obj = bus.get_object("org.freedesktop.Notifications", "/org/freedesktop/Notifications")
|
||||
self.iface = dbus.Interface(obj, "org.freedesktop.Notifications")
|
||||
self.notif_id = dbus.UInt32(0)
|
||||
|
||||
bus.add_signal_receiver(
|
||||
self.on_action,
|
||||
dbus_interface="org.freedesktop.Notifications",
|
||||
signal_name="ActionInvoked"
|
||||
)
|
||||
|
||||
def get_art(self, url):
|
||||
if not url:
|
||||
return ""
|
||||
try:
|
||||
if url.startswith("file://"):
|
||||
return url[7:]
|
||||
path = "/tmp/music_art.jpg"
|
||||
urllib.request.urlretrieve(url, path)
|
||||
return path
|
||||
except:
|
||||
return ""
|
||||
|
||||
def notify(self, artist, title, art_url, status):
|
||||
art = self.get_art(art_url)
|
||||
play_label = "⏸ Pause" if status == "Playing" else "▶ Play"
|
||||
actions = ["prev", "⏮ Zurück", "toggle", play_label, "next", "⏭ Weiter"]
|
||||
hints = {"image-path": dbus.String(art)} if art else {}
|
||||
|
||||
self.notif_id = self.iface.Notify(
|
||||
"music", self.notif_id, art,
|
||||
title, artist,
|
||||
actions, hints, 0
|
||||
)
|
||||
|
||||
def on_action(self, notif_id, action):
|
||||
if notif_id != self.notif_id:
|
||||
return
|
||||
cmds = {"prev": "previous", "toggle": "play-pause", "next": "next"}
|
||||
if action in cmds:
|
||||
subprocess.run(["playerctl", cmds[action]])
|
||||
|
||||
def monitor(self):
|
||||
proc = subprocess.Popen(
|
||||
["playerctl", "--follow", "metadata", "--format",
|
||||
"{{artist}}||{{title}}||{{mpris:artUrl}}||{{status}}"],
|
||||
stdout=subprocess.PIPE, text=True
|
||||
)
|
||||
prev = ""
|
||||
for line in proc.stdout:
|
||||
parts = line.strip().split("||")
|
||||
if len(parts) != 4:
|
||||
continue
|
||||
artist, title, art_url, status = parts
|
||||
if title != prev:
|
||||
prev = title
|
||||
self.notify(artist, title, art_url, status)
|
||||
|
||||
def run(self):
|
||||
threading.Thread(target=self.monitor, daemon=True).start()
|
||||
GLib.MainLoop().run()
|
||||
|
||||
if __name__ == "__main__":
|
||||
MusicNotifier().run()
|
||||
39
wallpaper-niri
Executable file
39
wallpaper-niri
Executable file
|
|
@ -0,0 +1,39 @@
|
|||
#!/bin/bash
|
||||
# wallpaper-picker.sh (Niri version)
|
||||
|
||||
WALLPAPER_DIR="$HOME/Pictures/wallpaper"
|
||||
EXTENSIONS="jpg|jpeg|png|gif|webp|bmp|tiff|tga|svg|avif"
|
||||
|
||||
declare -A wall_map
|
||||
while IFS= read -r path; do
|
||||
name=$(basename "$path")
|
||||
wall_map["$name"]="$path"
|
||||
done < <(find "$WALLPAPER_DIR" -maxdepth 1 -type f \
|
||||
-regextype posix-extended -iregex ".*\.($EXTENSIONS)" | sort)
|
||||
|
||||
chosen=$(printf '%s\n' "${!wall_map[@]}" | sort | \
|
||||
wofi \
|
||||
--dmenu \
|
||||
--prompt " Wallpaper" \
|
||||
--insensitive \
|
||||
--no-actions \
|
||||
--width 500 \
|
||||
--height 400 \
|
||||
)
|
||||
|
||||
[[ -z "$chosen" ]] && exit 0
|
||||
|
||||
full_path="${wall_map[$chosen]}"
|
||||
[[ ! -f "$full_path" ]] && {
|
||||
notify-send "wallpaper-picker" "Not found: $full_path" --urgency=critical
|
||||
exit 1
|
||||
}
|
||||
|
||||
awww img "$full_path" --transition-type grow --transition-step 90
|
||||
|
||||
persist="$HOME/.config/niri/wallpaper-restore.sh"
|
||||
mkdir -p "$(dirname "$persist")"
|
||||
printf '#!/bin/bash\nawww-daemon &\nsleep 0.5\nawww img "%s" --transition-type simple\n' "$full_path" > "$persist"
|
||||
chmod +x "$persist"
|
||||
|
||||
notify-send "Wallpaper" "$chosen" --urgency=low
|
||||
39
wallpaper-picker
Executable file
39
wallpaper-picker
Executable file
|
|
@ -0,0 +1,39 @@
|
|||
|
||||
#!/bin/bash
|
||||
# wallpaper-picker.sh
|
||||
|
||||
WALLPAPER_DIR="$HOME/Pictures/wallpaper"
|
||||
EXTENSIONS="jpg|jpeg|png|gif|webp|bmp|tiff|tga|svg|avif"
|
||||
|
||||
declare -A wall_map
|
||||
while IFS= read -r path; do
|
||||
name=$(basename "$path")
|
||||
wall_map["$name"]="$path"
|
||||
done < <(find "$WALLPAPER_DIR" -maxdepth 1 -type f \
|
||||
-regextype posix-extended -iregex ".*\.($EXTENSIONS)" | sort)
|
||||
|
||||
chosen=$(printf '%s\n' "${!wall_map[@]}" | sort | \
|
||||
wofi \
|
||||
--dmenu \
|
||||
--prompt " Wallpaper" \
|
||||
--insensitive \
|
||||
--no-actions \
|
||||
--width 500 \
|
||||
--height 400 \
|
||||
)
|
||||
|
||||
[[ -z "$chosen" ]] && exit 0
|
||||
|
||||
full_path="${wall_map[$chosen]}"
|
||||
[[ ! -f "$full_path" ]] && {
|
||||
notify-send "wallpaper-picker" "Not found: $full_path" --urgency=critical
|
||||
exit 1
|
||||
}
|
||||
|
||||
awww img "$full_path" --transition-type grow --transition-step 90
|
||||
|
||||
persist="$HOME/.config/hypr/wallpaper-restore.sh"
|
||||
printf '#!/bin/bash\nawww-daemon &\nsleep 0.5\nawww img "%s" --transition-type simple\n' "$full_path" > "$persist"
|
||||
chmod +x "$persist"
|
||||
|
||||
notify-send "Wallpaper" "$chosen" --urgency=low
|
||||
Loading…
Reference in a new issue