dotfiles/scripts/radio
rpriven 5b6af65def
Organize scripts and clean up dotfiles
Changes:
- Added 80+ scripts with organized structure
  - payloads/ for third-party pentesting tools
  - pentesting/ for custom security scripts
  - Daily drivers remain flat for fast access
- Converted wes() function to proper script
- Removed .sh extensions from pentesting scripts
- Cleaned up aliases (removed 31 redundant lines)
- Added kanata/, build artifacts to gitignore
- Removed old fre.sh scripts and empty a.out
- Updated configs: helix, tmux, zsh, ulauncher, redshift

Security: All sensitive data excluded via gitignore
2025-11-07 14:48:21 -07:00

111 lines
4.1 KiB
Bash
Executable file

#!/usr/bin/env bash
set -euo pipefail
# Script Name: radio
# Description: Internet radio station wrapper with curated stations
# Source: Inspired by https://evanhahn.com/scripts-i-wrote-that-i-use-all-the-time/
# Usage: radio <station-name>
# radio list
# Check for mpv
if ! command -v mpv &>/dev/null; then
echo "Error: mpv not found. Install with: sudo apt install mpv" >&2
exit 1
fi
# Curated radio stations
declare -A stations=(
# Rock & Metal
["metal"]="http://listen.181fm.com/181-greatoldies_128k.mp3|Heavy Metal & Hard Rock"
["rock"]="http://listen.181fm.com/181-rock_128k.mp3|Classic Rock"
# Cyberpunk / Synthwave / Darkwave
["cyberpunk"]="https://stream.nightride.fm/nightride.mp3|Nightride FM - Synthwave/Retrowave/Outrun"
["darksynth"]="https://stream.nightride.fm/darksynth.mp3|Darksynth/Cyberpunk/Synthmetal"
["chillsynth"]="https://stream.nightride.fm/chillsynth.mp3|Chillsynth/Chillwave/Instrumental"
["datawave"]="https://stream.nightride.fm/datawave.mp3|Glitchy Synthwave/IDM"
["spacesynth"]="https://stream.nightride.fm/spacesynth.mp3|Spacesynth/Space Disco"
["horrorsynth"]="https://stream.nightride.fm/horrorsynth.mp3|Horrorsynth/Witch House"
["industrial"]="https://stream.nightride.fm/ebsm.mp3|Industrial/EBM/Midtempo"
# Electronic / Techno
["techno"]="http://stream.laut.fm/technobase|Techno Base - Coding Beats"
["dnb"]="https://stream.nightride.fm/rektfm.mp3|Drum & Bass/Dubstep/Techno/Trance"
["lofi"]="https://stream.nightride.fm/chillsynth.mp3|Lo-Fi Chill Beats"
# Meditation / Ambient / Relaxation
["meditation"]="https://streaming.radionomy.com/-zenoflm-|Zen FM - Meditation & Relaxation"
["ambient"]="https://somafm.com/dronezone130.pls|SomaFM Drone Zone - Ambient"
["sleep"]="https://somafm.com/deepspaceone130.pls|SomaFM Deep Space One"
["nature"]="https://streaming.radionomy.com/NatureSoundsRelaxation|Nature Sounds"
# Classical
["classical"]="https://stream.live.vc.bbcmedia.co.uk/bbc_radio_three|BBC Radio 3 - Classical"
["piano"]="http://stream.laut.fm/piano-classics|Piano Classics"
)
# List available stations
if [[ $# -eq 0 ]] || [[ "$1" == "list" ]]; then
echo "📻 Available Radio Stations:"
echo ""
echo "🤘 ROCK & METAL:"
echo " radio metal - Heavy Metal & Hard Rock"
echo " radio rock - Classic Rock"
echo ""
echo "🌃 CYBERPUNK / SYNTHWAVE:"
echo " radio cyberpunk - Nightride FM (Synthwave/Retrowave)"
echo " radio darksynth - Darksynth/Cyberpunk/Synthmetal"
echo " radio chillsynth - Chillsynth/Chillwave"
echo " radio datawave - Glitchy Synthwave/IDM"
echo " radio spacesynth - Spacesynth/Space Disco"
echo " radio horrorsynth- Horrorsynth/Witch House"
echo " radio industrial - Industrial/EBM"
echo ""
echo "🎧 ELECTRONIC / TECHNO:"
echo " radio techno - Techno Base (Coding Beats)"
echo " radio dnb - Drum & Bass/Dubstep/Trance"
echo " radio lofi - Lo-Fi Chill Beats"
echo ""
echo "🧘 MEDITATION / AMBIENT:"
echo " radio meditation - Zen FM"
echo " radio ambient - SomaFM Drone Zone"
echo " radio sleep - Deep Space Ambient"
echo " radio nature - Nature Sounds"
echo ""
echo "🎹 CLASSICAL:"
echo " radio classical - BBC Radio 3"
echo " radio piano - Piano Classics"
echo ""
exit 0
fi
station="$1"
# Check if station exists
if [[ -z "${stations[$station]:-}" ]]; then
echo "Error: Station '$station' not found" >&2
echo "Run 'radio list' to see available stations" >&2
exit 1
fi
# Parse station URL and description
IFS='|' read -r url description <<< "${stations[$station]}"
echo "📻 Tuning in to: $description"
echo "🔊 Playing... (Ctrl+C to stop)"
echo ""
# Play with mpv (only fallback to VLC if mpv is not installed or stream fails to start)
if ! command -v mpv &>/dev/null; then
echo "mpv not found. Trying VLC..." >&2
if command -v vlc &>/dev/null; then
vlc "$url" 2>/dev/null
exit $?
else
echo "Error: Neither mpv nor VLC is installed" >&2
exit 1
fi
fi
# mpv will return non-zero for user interruption (Ctrl+C), which is normal
mpv --no-video --volume=50 "$url"