main
Ghetto Blaster π»
A terminal-based podcast player with vim-style keybindings, built in Rust with ratatui.
Features
- π΅ Native Rust Audio: No external dependencies (mpv not required!)
- β‘ Instant Startup: Async RSS loading with real-time feed updates
- πΎ Offline Caching: Episodes cache to
~/Music/{feed}/for instant replay - ποΈ Winamp-inspired Media Console: Real-time controls, volume, seek, progress
- π± Smart Feed Management: Loading indicators (β³ Loading, β Loaded, β Error)
- πΎπ Cache Indicators: See which episodes are cached vs streaming
- β¨οΈ Vim-style Navigation: hjkl movement, space for pause, ESC to go back
- π Background Loading: TUI appears instantly while feeds load
- π Real-time UI: Progress tracking, volume control, playback status
- π₯οΈ Cross-platform: Works on macOS, Linux, and Windows
Quick Install
One-liner (recommended)
curl -sSL https://raw.githubusercontent.com/xlgmokha/ghetto-blaster/main/scripts/install.sh | bash
GitHub Releases
Download pre-built binaries from Releases
From Source
git clone https://github.com/xlgmokha/ghetto-blaster
cd ghetto-blaster
cargo build --release
sudo cp target/release/ghetto-blaster /usr/local/bin/
Cargo Install
cargo install --git https://github.com/xlgmokha/ghetto-blaster
Usage
cargo run
On first run, it creates a config file at ~/.config/ghetto-blaster.yml with some default feeds.
Keybindings
Feed List:
j/korβ/β- Navigate feedsEnter- Select feed and view episodesr- Refresh all feedsq- Quit
Episode List:
j/korβ/β- Navigate episodesEnterorSpace- Play episodehorβorEsc- Back to feed listq- Quit
During Playback (mpv controls):
Space- Pause/unpauseβ/β- Seek backward/forward 10s0/9- Volume down/upm- Muteq- Stop
Configuration
Edit ~/.config/ghetto-blaster.yml:
feeds:
"My Podcast": "https://example.com/feed.xml"
"Another Show": "https://another.example/rss"
radio:
"CBC Radio": "https://radio-stream-url"
music_dirs:
- "~/Music"
Architecture
main.rs: TUI setup and event loopapp.rs: Application state and navigation logicconfig.rs: YAML configuration managementfeed.rs: RSS parsing and episode dataplayer.rs: mpv process management
Development
# Check compilation
cargo check
# Run with debug info
RUST_LOG=debug cargo run
# Run tests
cargo test
TODO
- Search functionality
- Download episodes for offline listening
- Playback position saving/resuming
- Episode marking (played/unplayed)
- Background downloads
- Playlist management
License
MIT