{"id":29064517,"url":"https://github.com/ducks/shelltrax","last_synced_at":"2026-05-26T20:31:19.526Z","repository":{"id":298918965,"uuid":"1001189373","full_name":"ducks/shelltrax","owner":"ducks","description":"A cmus (terminal-based music player) clone written in Rust","archived":false,"fork":false,"pushed_at":"2025-06-16T22:56:50.000Z","size":60,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-16T23:33:02.305Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ducks.png","metadata":{"files":{"readme":"README.dev.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-13T01:11:58.000Z","updated_at":"2025-06-16T22:56:53.000Z","dependencies_parsed_at":"2025-06-16T23:33:10.737Z","dependency_job_id":"2f012b77-fece-444b-93e7-09e8abb6ec89","html_url":"https://github.com/ducks/shelltrax","commit_stats":null,"previous_names":["ducks/rustmus","ducks/shelltrax"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/ducks/shelltrax","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ducks%2Fshelltrax","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ducks%2Fshelltrax/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ducks%2Fshelltrax/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ducks%2Fshelltrax/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ducks","download_url":"https://codeload.github.com/ducks/shelltrax/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ducks%2Fshelltrax/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262227890,"owners_count":23278266,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-06-27T09:07:15.371Z","updated_at":"2026-05-26T20:31:19.487Z","avatar_url":"https://github.com/ducks.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Developer Guide: shelltrax\n\nThis document is for contributors and maintainers of `shelltrax`.\nFor user-facing instructions, see [README.md](./README.md).\n\n---\n\n## Project Structure\n\n```text\nsrc/\n├── app.rs          # Core state and logic for App, Screens, Player\n├── browser.rs      # Directory browsing logic\n├── library.rs      # Library view, album/artist/track state\n├── player.rs       # MP3 playback using rodio\n├── screens/        # UI rendering per screen\n├── ui.rs           # Layout split, keybindings, etc.\n├── persistence.rs  # JSON load/save for artist + track library\n```\n\n## Key Features \u0026 State\n\n- `App` tracks the active screen (`Library`, `Browser`, etc.)\n- Library state is split into:\n  - Left pane: artists and albums (with expandable tree)\n  - Right pane: visible tracks, selectable with Tab\n- Tracks are tagged using `id3` crate on `.mp3` files\n- Playback uses `rodio::Sink` with a manual autoplay toggle\n\n---\n\n## Keybindings\n\n| Key           | Action                          |\n|---------------|---------------------------------|\n| `1`           | Go to Library                   |\n| `5`           | Go to Browser                   |\n\n\n### Browser View\n\n| Key           | Action                          |\n|---------------|---------------------------------|\n| `a`           | Add file/dir to playlist        |\n\n### Library View\n\n| Key           | Action                          |\n|---------------|---------------------------------|\n| `Tab`         | Toggle focus left/right         |\n| `Enter`       | Play selected track             |\n| `c`           | Toggle pause/resume             |\n| `n`           | Next song                       |\n| `p`           | Toggle autoplay                 |\n| `Backspace`   | Go up a directory (Browser)     |\n| `Space`       | Toggle artist/album view        |\n| `Up/Down`     | Navigate lists                  |\n\n---\n\n## Persistence\n\n- Library state is saved to `library.json`\n- Autoloaded during `App::new()` if it exists\n- Only `.mp3` files are supported for now\n- Duplicates are ignored silently\n\n---\n\n## Future Todos\n\n- Add `flac` support via `symphonia` or similar\n- Implement seeking via Symphonia → rodio integration\n- Support playlist screen and queue\n- Playback progress bar and time display\n- Configurable keybindings\n- Better error handling/logging\n- Autplay\n\n---\n\n## Contributing\n\nPull requests welcome! Please:\n- Run `cargo fmt`\n- Ensure it builds with `cargo check`\n- Test playback, UI, and persistence\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fducks%2Fshelltrax","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fducks%2Fshelltrax","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fducks%2Fshelltrax/lists"}