From c7ee0658a72f6f84404ef0a2dfe30abf5a7717a8 Mon Sep 17 00:00:00 2001 From: Nathan Woodburn Date: Mon, 9 Sep 2024 15:45:27 +1000 Subject: [PATCH] feat: Add op music and blur --- README.md | 1 + blur.sh | 22 +++++++++ music.sh | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++++ opacity.sh | 25 ++++++++++ 4 files changed, 183 insertions(+) create mode 100755 blur.sh create mode 100755 music.sh create mode 100755 opacity.sh diff --git a/README.md b/README.md index 17c5b50..f53c0bf 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ This script is used for copying the contents of a file to the clipboard. ### Usage ```sh copy +... | copy ``` ### Dependencies diff --git a/blur.sh b/blur.sh new file mode 100755 index 0000000..a9ce3b5 --- /dev/null +++ b/blur.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# Check if there is an argument + +blur=true +if [ -z "$1" ]; then + blur=true +else + # Check if argument is true or false (or 1 or 0) + if [[ $1 == "true" || $1 == "1" ]]; then + blur=true + elif [[ $1 == "false" || $1 == "0" ]]; then + blur=false + else + echo "Error: The blur value must be true or false" + exit 1 + fi +fi + +# Set the blur value +echo "Setting the blur to $blur" +alacritty msg config window.blur=$blur diff --git a/music.sh b/music.sh new file mode 100755 index 0000000..7f7d077 --- /dev/null +++ b/music.sh @@ -0,0 +1,135 @@ +#!/bin/bash + +# Maximum title length +MAX_TITLE_LENGTH=20 +MAX_ARTIST_LENGTH=20 + +verbose=0 + +# Check if any argument is passed +if [ "$#" -ne 0 ]; then + arg="$1" + if [ "$arg" == "play" ]; then + playerctl play + elif [ "$arg" == "pause" ]; then + playerctl pause + elif [ "$arg" == "next" ]; then + playerctl next + elif [ "$arg" == "prev" ]; then + playerctl previous + elif [ "$arg" == "verbose" ]; then + verbose=1 + else + echo "Invalid argument. Please use one of the following: play, pause, next, prev" + exit 0 + fi + if [ "$#" -eq 2 ]; then + if [ "$2" == "verbose" ]; then + verbose=1 + fi + fi +fi + + +# Check if playerctl is available +if ! command -v playerctl &> /dev/null; then + echo "playerctl is not installed. Please install it to use this script." + exit 1 +fi + +# Get all player names and statuses +players=$(playerctl -a -l) +active_players=() +brave="" + +# Loop through each player and check its status +for player in $players; do + status=$(playerctl -p "$player" status 2>/dev/null) + # Check if player name contains brave + if [[ "$player" == *"brave"* ]]; then + brave=$player + continue + fi + + if [[ "$status" == "Playing" || "$status" == "Paused" ]]; then + active_players+=("$player:$status") + fi +done + +# Function to truncate a string to a certain length +truncate_string() { + local string="$1" + local max_length="$2" + if [ ${#string} -gt $max_length ]; then + echo "${string:0:$max_length}..." + else + echo "$string" + fi +} + +# Check how many active players we found +active_count=${#active_players[@]} + +if [ "$active_count" -eq 1 ]; then + # If exactly one player is active, print its metadata + IFS=":" read -r player status <<< "${active_players[0]}" + title=$(playerctl -p "$player" metadata --format '{{title}}') + # If title == Vilos Player, get the title from the brave player + if [ "$title" == "Vilos" ]; then + title=$(playerctl -p "$brave" metadata --format '{{title}}') + truncated_title=$(truncate_string "$title" $(($MAX_TITLE_LENGTH+$MAX_ARTIST_LENGTH))) + if [ "$status" == "Paused" ]; then + echo "🎵 $truncated_title (Paused)" + else + echo "🎵 $truncated_title" + fi + exit 0 + fi + artist=$(playerctl -p "$player" metadata --format '{{artist}}') + truncated_title=$(truncate_string "$title" $MAX_TITLE_LENGTH) + truncated_artist=$(truncate_string "$artist" $MAX_ARTIST_LENGTH) + + if [ "$status" == "Paused" ]; then + echo "🎵 $truncated_title [$truncated_artist] (Paused)" + else + echo "🎵 $truncated_title [$truncated_artist]" + fi + +elif [ "$active_count" -gt 1 ]; then + # Count to see how many playing players there are + playing_count=0 + output="" + + for player in "${active_players[@]}"; do + IFS=":" read -r player status <<< "$player" + if [ "$status" == "Playing" ]; then + playing_count=$((playing_count + 1)) + title=$(playerctl -p "$player" metadata --format '{{title}}') + if [ "$title" == "Vilos" ]; then + title=$(playerctl -p "$brave" metadata --format '{{title}}') + truncated_title=$(truncate_string "$title" $(($MAX_TITLE_LENGTH+$MAX_ARTIST_LENGTH))) + output+="🎵 $truncated_title" + else + artist=$(playerctl -p "$player" metadata --format '{{artist}}') + truncated_title=$(truncate_string "$title" $MAX_TITLE_LENGTH) + truncated_artist=$(truncate_string "$artist" $MAX_ARTIST_LENGTH) + output+="🎵 $truncated_title [$truncated_artist]" + fi + fi + done + if [ "$playing_count" -eq 1 ]; then + echo "$output" + else + echo "Multiple players playing" + if [ "$verbose" -eq 1 ]; then + for player in "${active_players[@]}"; do + IFS=":" read -r player status <<< "$player" + title=$(playerctl -p "$player" metadata --format '{{title}}') + artist=$(playerctl -p "$player" metadata --format '{{artist}}') + echo "$player: $title - $artist" + echo "Status: $status" + done + fi + fi + +fi diff --git a/opacity.sh b/opacity.sh new file mode 100755 index 0000000..88225d0 --- /dev/null +++ b/opacity.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +# Check if the argument is a number between 0 and 1 +if [[ $1 =~ ^[0-9](\.[0-9]+)?$ ]]; then + if (( $(echo "$1 > 1" | bc -l) )); then + echo "Error: The opacity value must be between 0 and 1" + exit 1 + fi + opacity=$1 +# Also allow decimals with a leading dot +elif [[ $1 =~ ^\.[0-9]+$ ]]; then + if (( $(echo "$1 > 1" | bc -l) )); then + echo "Error: The opacity value must be between 0 and 1" + exit 1 + fi + opacity=0$1 +else + echo "Error: The opacity value must be a number" + exit 1 +fi + +# Set the opacity value +echo "Setting the opacity to $opacity" +alacritty msg config window.opacity=$opacity +