Files
rootiest 273580f533 ♻️ refactor(full-scope)!: major revision refactoring
Code layout has been changed and improoved. Annotations are added for documentation. Automated through utility functions and data tables

BREAKING CHANGE: Tested from clean. Now properly uses LuaRocks to install dependencies.
2024-09-04 16:07:12 -04:00

122 lines
2.8 KiB
Bash
Executable File

#!/bin/bash
# Separator variable
separator="␟"
# Ignored player sources for music
ignored_sources=""
# Flags for disabling functionality
disable_wakatime=false
no_music=false
custom_cache_dir=""
# Function to print usage
print_usage() {
echo "Usage: $0 [OPTION]..."
echo "Options:"
echo " -h, --help Print this help message and exit"
echo " -i, --ignore Comma-separated list of sources to ignore"
echo " -d, --disable-wakatime Disable wakatime integration"
echo " -n, --no-music Disable music integration"
echo " -c, --cache-dir Specify a custom cache directory"
exit 0
}
# Parse command-line arguments
while [[ $# -gt 0 ]]; do
case "$1" in
-h | --help)
print_usage
;;
-i | --ignore)
if [[ -n $2 && $2 != -* ]]; then
ignored_sources=$2
shift
else
echo "Error: --ignore requires an argument."
exit 1
fi
;;
-d | --disable-wakatime)
disable_wakatime=true
;;
-n | --no-music)
no_music=true
;;
-c | --cache-dir)
if [[ -n $2 && $2 != -* ]]; then
custom_cache_dir=$2
shift
else
echo "Error: --cache-dir requires an argument."
exit 1
fi
;;
*)
echo "Unknown option: $1"
print_usage
;;
esac
shift
done
# Use custom cache directory if provided, else use Neovim's cache directory
cache_dir="${custom_cache_dir:-\
${NVIM_CACHE_DIR:-\
${XDG_CACHE_HOME:-$HOME/.cache}/nvim}}"
mkdir -p "$cache_dir"
# Lock file path
lock_file="$cache_dir/music_wakatime_update.lock"
# Create a lock file to ensure only one instance of the script runs
if [[ -e $lock_file ]]; then
echo "Another instance of this script is already running."
exit 1
else
touch "$lock_file"
fi
# Function to clean up lock file on exit
cleanup() {
rm -f "$lock_file"
}
trap cleanup EXIT
# Check if playerctl is available
if ! command -v playerctl &>/dev/null; then
echo "Warning: playerctl not found. Disabling music integration."
no_music=true
fi
# Check if wakatime-cli is available
if ! command -v wakatime-cli &>/dev/null; then
echo "Warning: wakatime-cli not found. Disabling wakatime integration."
disable_wakatime=true
fi
# Update the music cache file every second, if not disabled
if ! $no_music; then
while true; do
playerctl --ignore-player "${ignored_sources}" \
metadata \
--format "{{ artist }}${separator}{{ title }}${separator} \
{{ album }}${separator}{{ status }}${separator}{{ volume }}${separator} \
{{ loop }}${separator}{{ shuffle }}" \
>"$cache_dir/music_cache.txt"
sleep 1
done & # Run this loop in the background
fi
# Update the Wakatime cache file every 60 seconds, if not disabled
if ! $disable_wakatime; then
while true; do
wakatime-cli --today >"$cache_dir/wakatime_cache.txt" 2>/dev/null
sleep 60
done & # Run this loop in the background
fi
# Wait for all background processes to finish
wait