[VIBECODED!] A native Rust application to sync songs and albums from your self-hosted Navidrome instance to your iPod running either stock OS or Rockbox 🎸
|
|
||
|---|---|---|
| src | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| config.example.toml | ||
| README.md | ||
| shell.nix | ||
NaviPod
A native Rust application to sync songs and albums from your self-hosted Navidrome instance to your iPod running either stock OS or Rockbox.
Features
- 🎵 Sync songs and albums from Navidrome
- 📱 Support for iPod stock OS
- 🎸 Support for Rockbox firmware
- ⚙️ Configurable sync options
- 🔄 Incremental sync support
Installation
cargo build --release
Configuration
-
Copy
config.example.tomltoconfig.toml:cp config.example.toml config.toml -
Edit
config.tomlwith your settings:[navidrome] url = "http://localhost:4533" username = "your_username" password = "your_password" [ipod] mount_point = "/media/ipod" firmware = "rockbox" # or "stock" [sync] albums = true playlists = false format = "mp3" -
Alternatively, use environment variables (prefixed with
NAVIPOD__):export NAVIPOD__NAVIDROME__URL="http://localhost:4533" export NAVIPOD__NAVIDROME__USERNAME="your_username" export NAVIPOD__NAVIDROME__PASSWORD="your_password" export NAVIPOD__IPOD__MOUNT_POINT="/media/ipod" export NAVIPOD__IPOD__FIRMWARE="rockbox"
Note: Navidrome must have JSON API enabled (default in recent versions). The application uses Subsonic API with f=json parameter.
Usage
GUI Application
Launch the graphical interface:
navipod-gui
The GUI provides:
- Input fields for Navidrome URL, username, and password
- Firmware type selector (Stock/Rockbox)
- Mount point browser
- Real-time sync status and progress
- Error display
Command Line
# Sync all configured content
navipod sync
# Sync specific album
navipod sync --album "Album Name"
# List available albums
navipod list-albums
# Check iPod connection
navipod check
Requirements
- Rust 1.70+ (and Cargo)
- C compiler (for building native dependencies)
- iPod mounted and accessible
- Navidrome instance running and accessible
- Navidrome with JSON API support (enabled by default)
NixOS Setup
If you're using NixOS, enter the development shell:
nix-shell
This will provide Rust, Cargo, and all necessary build tools. The shell.nix file is already configured for this project.
Building
# On NixOS, first enter the development shell:
nix-shell
# Build in release mode
cargo build --release
# The binaries will be at:
# - target/release/navipod (CLI)
# - target/release/navipod-gui (GUI)
Running the GUI
# Make sure you're in nix-shell first:
nix-shell
# After building, run:
./target/release/navipod-gui
# Or use cargo run:
cargo run --bin navipod-gui
Note: If you encounter Wayland or X11 library errors:
- Make sure you're in
nix-shell(it provides all necessary libraries) - The GUI will automatically use X11 if Wayland is not available
- If you still have issues, try:
WAYLAND_DISPLAY= WINIT_UNIX_BACKEND=x11 ./target/release/navipod-gui
Development
# Run in debug mode
cargo run -- sync
# Run tests
cargo test
# Check code
cargo check
License
MIT OR Apache-2.0