# 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 ```bash cargo build --release ``` ## Configuration 1. Copy `config.example.toml` to `config.toml`: ```bash cp config.example.toml config.toml ``` 2. Edit `config.toml` with your settings: ```toml [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" ``` 3. Alternatively, use environment variables (prefixed with `NAVIPOD__`): ```bash 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: ```bash 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 ```bash # 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: ```bash nix-shell ``` This will provide Rust, Cargo, and all necessary build tools. The `shell.nix` file is already configured for this project. ## Building ```bash # 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 ```bash # 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: 1. Make sure you're in `nix-shell` (it provides all necessary libraries) 2. The GUI will automatically use X11 if Wayland is not available 3. If you still have issues, try: ```bash WAYLAND_DISPLAY= WINIT_UNIX_BACKEND=x11 ./target/release/navipod-gui ``` ## Development ```bash # Run in debug mode cargo run -- sync # Run tests cargo test # Check code cargo check ``` ## License MIT OR Apache-2.0