make mpv service
This commit is contained in:
parent
2b9b903803
commit
41be339450
@ -24,6 +24,7 @@ ipython:.ipython/profile_default/ipython_config.py
|
|||||||
gdb:.config/gdb
|
gdb:.config/gdb
|
||||||
sandbox:
|
sandbox:
|
||||||
chromium:.local/bin/pchromium .local/share/applications/pchromium.desktop
|
chromium:.local/bin/pchromium .local/share/applications/pchromium.desktop
|
||||||
scripts:.local/bin/httpstatus .local/bin/apco .local/bin/bb .local/bin/emoji .local/bin/mksh .local/bin/nato .local/bin/pastas .local/bin/timer .local/bin/tryna .local/bin/trynafail .local/bin/bak .local/bin/cleanup-directory .local/bin/cleanup-directory-log .local/bin/cleanup-downloads .local/bin/gobuild .local/bin/json .local/bin/open .local/bin/py .local/bin/sha .local/bin/showtips .local/bin/weather .local/bin/radio .local/bin/rmt .local/bin/scratch .local/bin/player .local/bin/wake .local/bin/myip .local/bin/genpass .local/bin/gensalt .local/bin/django-create-project .local/bin/mirror-site .local/bin/split-file .local/bin/extract .local/bin/destroy .local/bin/serveit .local/bin/highlight-logs %copypasta
|
scripts:.local/bin/httpstatus .local/bin/apco .local/bin/bb .local/bin/emoji .local/bin/mksh .local/bin/nato .local/bin/pastas .local/bin/timer .local/bin/tryna .local/bin/trynafail .local/bin/bak .local/bin/cleanup-directory .local/bin/cleanup-directory-log .local/bin/cleanup-downloads .local/bin/gobuild .local/bin/json .local/bin/open .local/bin/py .local/bin/sha .local/bin/showtips .local/bin/weather .local/bin/radio .local/bin/rmt .local/bin/scratch .local/bin/wake .local/bin/myip .local/bin/genpass .local/bin/gensalt .local/bin/django-create-project .local/bin/mirror-site .local/bin/split-file .local/bin/extract .local/bin/destroy .local/bin/serveit .local/bin/highlight-logs %copypasta
|
||||||
|
music:.local/bin/mpv-service.sh .config/systemd/user/mpv.service .local/bin/player
|
||||||
copypasta:.local/bin/copy .local/bin/pasta
|
copypasta:.local/bin/copy .local/bin/pasta
|
||||||
all:%less %t %note %tmux %zsh %nvim %git"
|
all:%less %t %note %tmux %zsh %nvim %git"
|
||||||
|
|||||||
18
home/user/.config/systemd/user/mpv.service
Normal file
18
home/user/.config/systemd/user/mpv.service
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=MPV Audio Player Service
|
||||||
|
Documentation=man:mpv(1)
|
||||||
|
After=sound.target graphical-session.target
|
||||||
|
Wants=sound.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=%h/.local/bin/mpv-service.sh
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5
|
||||||
|
Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=%t/bus
|
||||||
|
Environment=XDG_RUNTIME_DIR=%t
|
||||||
|
StandardOutput=journal
|
||||||
|
StandardError=journal
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
15
home/user/.local/bin/mpv-service.sh
Executable file
15
home/user/.local/bin/mpv-service.sh
Executable file
@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
SOCKET_PATH="/tmp/mpv-${USER}.sock"
|
||||||
|
|
||||||
|
rm -f "${SOCKET_PATH}"
|
||||||
|
|
||||||
|
cleanup() {
|
||||||
|
echo "Stopping MPV service..."
|
||||||
|
rm -f "${SOCKET_PATH}"
|
||||||
|
pkill -P $$ mpv || true
|
||||||
|
}
|
||||||
|
trap cleanup EXIT TERM INT
|
||||||
|
|
||||||
|
exec mpv --idle --no-video --input-ipc-server="${SOCKET_PATH}" --ytdl-format=worstaudio
|
||||||
@ -14,12 +14,11 @@ usage() {
|
|||||||
Usage: ${PROG} <command> [args]
|
Usage: ${PROG} <command> [args]
|
||||||
|
|
||||||
Commands:
|
Commands:
|
||||||
run music [PATH] Play local music (default: ~/Music)
|
radio <CHANNEL> Switch to a radio station
|
||||||
run radio <CHANNEL> Start a radio station
|
local, music [PATH] Switch to local music playlist (default: ~/Music)
|
||||||
radio <CHANNEL> Switch current playing instance to a radio station
|
|
||||||
next, n Next track
|
next, n Next track
|
||||||
prev, p Previous track
|
prev, p Previous track
|
||||||
pause, space Toggle pause
|
pause, stop, toggle, s Toggle pause
|
||||||
help Show this message
|
help Show this message
|
||||||
|
|
||||||
Radio Channels:
|
Radio Channels:
|
||||||
@ -50,32 +49,6 @@ send_cmd() {
|
|||||||
printf '{ "command": %s }\n' "${1}" | socat - "${SOCKET_PATH}" >/dev/null
|
printf '{ "command": %s }\n' "${1}" | socat - "${SOCKET_PATH}" >/dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
launch_mpv() {
|
|
||||||
rm -f "${SOCKET_PATH}"
|
|
||||||
|
|
||||||
trap 'rm -f "${SOCKET_PATH}"' INT HUP EXIT TERM
|
|
||||||
|
|
||||||
exec mpv --input-ipc-server="${SOCKET_PATH}" --no-video --ytdl-format=worstaudio "${@}"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
play_playlist() {
|
|
||||||
playlist="${1:-${HOME}/Music}"
|
|
||||||
shift || true
|
|
||||||
|
|
||||||
launch_mpv --shuffle "$@" -- "${playlist}"
|
|
||||||
}
|
|
||||||
|
|
||||||
play_radio() {
|
|
||||||
channel="${1:-}"
|
|
||||||
if [ -z "${channel}" ]; then
|
|
||||||
die "Radio channel required. Usage: ${PROG} run radio <channel>"
|
|
||||||
fi
|
|
||||||
|
|
||||||
url="$(get_radio_url "${channel}")"
|
|
||||||
launch_mpv "${url}"
|
|
||||||
}
|
|
||||||
|
|
||||||
tune_radio() {
|
tune_radio() {
|
||||||
channel="${1:-}"
|
channel="${1:-}"
|
||||||
if [ -z "${channel}" ]; then
|
if [ -z "${channel}" ]; then
|
||||||
@ -84,7 +57,34 @@ tune_radio() {
|
|||||||
|
|
||||||
url="$(get_radio_url "${channel}")"
|
url="$(get_radio_url "${channel}")"
|
||||||
send_cmd "[\"loadfile\", \"${url}\", \"replace\"]"
|
send_cmd "[\"loadfile\", \"${url}\", \"replace\"]"
|
||||||
echo "📻 Switched to: ${channel}"
|
echo "📻 Switched to radio: ${channel}"
|
||||||
|
}
|
||||||
|
|
||||||
|
play_local_playlist() {
|
||||||
|
playlist_path="${1:-${HOME}/Music}"
|
||||||
|
|
||||||
|
if [ ! -e "${playlist_path}" ]; then
|
||||||
|
die "Path not found: ${playlist_path}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if command -v realpath >/dev/null 2>&1; then
|
||||||
|
playlist_path="$(realpath "${playlist_path}")"
|
||||||
|
fi
|
||||||
|
|
||||||
|
escaped_path=$(printf '%s' "${playlist_path}" | sed 's/\\/\\\\/g; s/"/\\"/g')
|
||||||
|
send_cmd '["set", "pause", "yes"]'
|
||||||
|
sleep 0.1
|
||||||
|
send_cmd "[\"loadfile\", \"${escaped_path}\", \"replace\"]"
|
||||||
|
sleep 0.1
|
||||||
|
send_cmd '["set", "pause", "yes"]'
|
||||||
|
sleep 0.1
|
||||||
|
send_cmd '["playlist-shuffle"]'
|
||||||
|
sleep 0.1
|
||||||
|
send_cmd '["playlist-next"]'
|
||||||
|
sleep 0.1
|
||||||
|
send_cmd '["set", "pause", "no"]'
|
||||||
|
|
||||||
|
echo "🎵 Switched to local playlist: ${playlist_path}"
|
||||||
}
|
}
|
||||||
|
|
||||||
handle_control() {
|
handle_control() {
|
||||||
@ -98,7 +98,7 @@ handle_control() {
|
|||||||
send_cmd '["playlist-prev"]'
|
send_cmd '["playlist-prev"]'
|
||||||
echo "⬅️ Prev"
|
echo "⬅️ Prev"
|
||||||
;;
|
;;
|
||||||
pause|space)
|
pause|stop|toggle|t|s)
|
||||||
send_cmd '["cycle", "pause"]'
|
send_cmd '["cycle", "pause"]'
|
||||||
echo "⏯️ Pause toggled"
|
echo "⏯️ Pause toggled"
|
||||||
;;
|
;;
|
||||||
@ -113,19 +113,13 @@ ACTION="${1:-}"
|
|||||||
shift 2>/dev/null || true
|
shift 2>/dev/null || true
|
||||||
|
|
||||||
case "${ACTION}" in
|
case "${ACTION}" in
|
||||||
run)
|
radio|tune)
|
||||||
subcmd="${1:-help}"
|
|
||||||
shift || true
|
|
||||||
case "${subcmd}" in
|
|
||||||
music) play_playlist "$@" ;;
|
|
||||||
radio) play_radio "$@" ;;
|
|
||||||
*) usage; exit 1 ;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
radio)
|
|
||||||
tune_radio "$@"
|
tune_radio "$@"
|
||||||
;;
|
;;
|
||||||
next|n|prev|p|pause|space)
|
local|music|m)
|
||||||
|
play_local_playlist "$@"
|
||||||
|
;;
|
||||||
|
next|n|prev|p|pause|stop|toggle|t|s)
|
||||||
handle_control "${ACTION}"
|
handle_control "${ACTION}"
|
||||||
;;
|
;;
|
||||||
help|"")
|
help|"")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user