{"id":15813826,"url":"https://github.com/toothbrush/spotiqueue","last_synced_at":"2025-04-07T15:09:57.462Z","repository":{"id":14553123,"uuid":"368726728","full_name":"toothbrush/Spotiqueue","owner":"toothbrush","description":"Dead-simple queue-oriented client for Spotify","archived":false,"fork":false,"pushed_at":"2024-11-03T10:26:08.000Z","size":52064,"stargazers_count":85,"open_issues_count":2,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-01T22:12:10.089Z","etag":null,"topics":["guile","macos","minimalist","scheme","spotify"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/toothbrush.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2021-05-19T02:53:04.000Z","updated_at":"2025-02-06T01:53:02.000Z","dependencies_parsed_at":"2025-01-02T01:15:59.549Z","dependency_job_id":null,"html_url":"https://github.com/toothbrush/Spotiqueue","commit_stats":{"total_commits":672,"total_committers":3,"mean_commits":224.0,"dds":0.004464285714285698,"last_synced_commit":"3eed329457575ddf7a2f4142273e8a885f30340c"},"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/toothbrush%2FSpotiqueue","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/toothbrush%2FSpotiqueue/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/toothbrush%2FSpotiqueue/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/toothbrush%2FSpotiqueue/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/toothbrush","download_url":"https://codeload.github.com/toothbrush/Spotiqueue/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247675607,"owners_count":20977378,"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":["guile","macos","minimalist","scheme","spotify"],"created_at":"2024-10-05T04:06:31.247Z","updated_at":"2025-04-07T15:09:57.441Z","avatar_url":"https://github.com/toothbrush.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Spotiqueue\n\nA terribly simple macOS app for keyboard-based, queue-oriented Spotify use.  Many years ago i built\na version which relied on a now-deprecated library — Spotify doesn't publish `libspotify` any more,\nwhich is a shame.  The old Spotiqueue is [archived for\nposterity](https://github.com/toothbrush/spotiqueue-old); this version does pretty much exactly the\nsame as the old one did, and more, although i'd like to think it's a bit more refined.\n\nSpotiqueue now also has support for the [GNU Guile](https://www.gnu.org/software/guile/) extension\nlanguage built in: this means you can extend its behaviour with arbitrary Scheme!  More details\nbelow.  Beware of rough edges. Scratches my itch, no other guarantees granted.\n\n![Obligatory screenshot to give an idea what the app does.](img/screenshot.png)\n\n## Usage, a crash course\n\nSpotiqueue is intended to be keyboard-driven.  As such, you may be surprised that clicking and\ndragging doesn't work.  Read on for instructions!\n\nThe left-hand pane is your queue of tracks to be played.  The top track is next, and once it has\nstarted playing, it's removed from the queue.  The right-hand pane is for search results.\n\n* **Searching**: To search, enter text (such as `britney spears` or `sandstorm`) into the search\n  field, and press `⏎` (Return, Enter, whatever you call it).  This will focus the search results\n  pane and tracks matching your query will start to populate.  There's also a filter field at the\n  bottom of the search pane — it understands Regex and will narrow the search results.\n* **Navigating**: Use the arrow keys to navigate: up and down, or press the left arrow to select the\n  queue, or the right arrow to select the search results pane.  Use shift to select multiple items.\n* **Playing**: Pressing `⏎` (Return) on a single item plays it immediately.  Pressing `⏎` with\n  multiple tracks selected adds them to the top of the queue and starts playing them.\n\nOf course, you may want to manipulate the queue.\n\n* When you're in the search pane, `⌘←` enqueues at the bottom, and `⌘⇧←` enqueues at the top of the\n  queue.\n* When you're in the queue pane, holding `⌘` (the command key) and using the navigation keys moves\n  selected tracks up or down in the queue.\n* Space bar pauses and unpauses (unless search field has focus).\n* `⌘N` skips to the next track. Also useful for starting playback.\n\nNote that instead of the arrows, you can use Vim-like movement keys too!\n\n* Left and right arrows or `h`, `l` switch focus between queue and search results.\n* Supports some Vim keys (e.g., `j`,`k`,`g`,`G`).\n* Tab cycles through search (or hit `⌘F` or `⌘L` to search), search results, and queue.\n\n### More detail on keybindings\n\nThe basic Vim and Emacs movement keys are supported instead of using arrow keys.\n\n| Key                             |                 | Description                                                                  |\n|:--------------------------------|:----------------|:-----------------------------------------------------------------------------|\n| left, right, `h`, `l`           | search or queue | Focus between search and queue                                               |\n| up, down, `j`, `k`              | search or queue | Move up or down                                                              |\n| `/`                             | search          | Focus the filter field                                                       |\n| Enter                           | search          | Place selected items at the top of the queue and immediately play first item |\n| Enter                           | queue           | Play the selected item, removing items above it                              |\n| `⌘F` or `⌘L`                    | global          | Focus the search bar                                                         |\n| `⌘Q`                            | global          | Quit Spotiqueue                                                              |\n| `⌘O`                            | global          | List all of your saved playlists                                             |\n| `⌘P`                            | global          | List all of your saved tracks                                                |\n| `⌘N`                            | global          | Play next track from queue                                                   |\n| `⌘;` or  `⌘→`                   | search or queue | Browse details of selected item (see description below)                      |\n| `⌘h` or  `⌘←`                   | search          | Enqueue selection at the bottom of the queue                                 |\n| `⌘⇧h` or  `⌘⇧←`                 | search          | Enqueue selection at the top of the queue                                    |\n| `?`                             | global          | Show current track's album in search results                                 |\n| `TAB`                           | global          | Cycle focus search field -\u003e search results -\u003e queue                          |\n| `x`, `d`, `Delete`, `Backspace` | queue           | Remove selected item(s) from queue                                           |\n| `x`, `d`, `Delete`, `Backspace` | search          | Only when viewing user's playlists: delete playlist                          |\n| `⌘S`                            | search          | Save current search results to new playlist                                  |\n| `⌘S`                            | queue           | Save current queue to new playlist                                           |\n| `^b`, `^f`, `^u`, `^d`          | search or queue | Scroll up/down by full or half page                                          |\n| `⌘C`                            | search or queue | Place highlighted items on clipboard                                         |\n| `⌘⇧C`                           | search or queue | Place highlighted items' album link on clipboard                             |\n| `⌘V`                            | queue           | Paste items on clipboard into the queue                                      |\n| `^⌥s`                           | global          | Shuffle the contents of the queue                                            |\n\nNote:\n* `^` is Control\n* `⌥` is Alt\n* `⌘` is Command\n* `⇧` is Shift\n\n### Browsing details\n\nFor any item in a list you can press `⌘;` or `⌘→`, to \"dive deeper\".  If the item you selected is a\ntrack, the search pane will be populated by the album it's on.  If you dive deeper after having\nopened an album, you'll get all the artist's tracks.  When playlists are listed in the search\nresults, diving deeper will return all the tracks of the playlist.\n\n## But wait, there's more!  Or, writing Scheme to extend Spotiqueue\n\nWhat it currently supports:\n\n* Setting arbitrary keybindings — if you don't like my choices, change them!\n* Hooks — get a callback when the track ends, when items are copied to the clipboard, etc.\n* Remote control — easily hook up media keys, network access, whatever you want.  The sky's the\n  limit.\n\nIf you already know Scheme and just want to get started, place a file in your home directory, and\nit'll automatically get loaded next time Spotiqueue starts up:\n\n```\n~/.config/spotiqueue/init.scm\n```\n\nFor more details, check out [the example `init.scm` file](./examples/paul-config.scm), which i use\nmyself.  You'll probably also want to look at [the Scheme internals of Spotiqueue](./guile/spotiqueue/).\n\n```bash\n# To adopt the example config file:\nmkdir -p ~/.config/spotiqueue\n(cd ~/.config/spotiqueue; ln -sv ~/src/Spotiqueue/examples/paul-config.scm init.scm)\n```\n\n## Download and install\n\nIf you don't like hassling about with Xcode (quite rightly so), you can find compiled versions\n[on the Github releases page](https://github.com/toothbrush/Spotiqueue/releases).  Unfortunately, for now you need at least\nmacOS 10.15, because the app makes heavy use of the Combine framework.\n\nIf you use [Homebrew](https://brew.sh/), you can simply run:\n\n```sh\nbrew install --cask toothbrush/toothbrush/spotiqueue\n```\n\n## Development\n\nHave a look at [HACKING.md](./HACKING.md) for a run-through of the development tools required.\n\n\u003e Copyright © 2021 paul at denknerd dot org\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftoothbrush%2Fspotiqueue","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftoothbrush%2Fspotiqueue","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftoothbrush%2Fspotiqueue/lists"}