- Rust 57%
- QML 35%
- C++ 6.1%
- CMake 1.3%
- Shell 0.5%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
## Lyrics - Clicking a line of lyrics with LRC timestamps seeks to where it starts. `Lyrics::start_of` gives the line's time, and `Player.seekToLyricsLine` seeks there and does nothing for lyrics without timestamps. - In `LyricsView.qml`, a `TapHandler` on each line seeks, so a drag still scrolls, and a `HoverHandler` shows a pointing hand and brightens the line. Both are off for lyrics without timestamps. A click also ends the pause after a manual scroll, so the view follows the song again straight away. - Works in the lyrics beside the player bar and in the Lyrics tab. ## App icon and tray icon - `data/app.strawly.music.svg` is the note on its own, without the green square, and larger. The bore is written as filled outlines with the even-odd rule rather than a mask, so every SVG reader draws it. - Two monochrome copies, `app.strawly.music-mono-light.svg` (`#fcfcfc`, for dark panels) and `-mono-dark.svg` (`#232629`, for light panels), are installed into the hicolor theme next to the app icon. - Settings → Tray icon is a dropdown with Color, Monochrome light and Monochrome dark. `Tray.iconStyle` is saved under `tray/iconStyle`, and the tray's icon name follows it at once through ksni's `NewIcon` signal. Color is the default. ## Release announcements - A new `announce` job in `build-and-release.yml` posts each release to the Music Alerts channel on chat.strawly.app, in a topic named "Strawly Music <version>", with the notes from `release-notes.sh`. Prereleases are not posted. It needs the `ZULIP_BOT_EMAIL` and `ZULIP_BOT_API_KEY` Actions secrets, described in `DEVELOPMENT.md`. ## 1.0.0 release prep - Version 1.0.0 in `Cargo.toml`, `Cargo.lock` and `CMakeLists.txt`. The README's install command names no version. - A 1.0.0 entry in `data/app.strawly.music.metainfo.xml`. The bug tracker link and a new contact link point to the Music Feedback channel on chat.strawly.app. `appstreamcli validate` passes. - The changes are under `[1.0.0] - 2026-10-22` in `CHANGELOG.md`, with the compare links updated. `FEATURES.md` covers clicking a line of lyrics and the tray icon. `ROADMAP.md` drops the icon and the website, which are done. ## Checked `check.sh` passes in `org.kde.Sdk//6.11`, with all 3 tests. A new test covers the start time of a lyrics line. `.forgejo/release-notes.sh 1.0.0` prints the notes. The Flatpak builds, installs and reports version 1.0.0. The tray publishes the right icon name for each of the three styles, checked over D-Bus on a test bus. Tested by hand on Plasma 6 (Wayland) with the installed build. Reviewed-on: #22 |
||
| .forgejo | ||
| data | ||
| LICENSES | ||
| src | ||
| tests | ||
| .gitignore | ||
| .qmlls.ini | ||
| app.strawly.music.yml | ||
| cargo-sources.json | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CHANGELOG.md | ||
| CMakeLists.txt | ||
| DEVELOPMENT.md | ||
| FEATURES.md | ||
| LICENSE.md | ||
| README.md | ||
| ROADMAP.md | ||
Strawly Music (Desktop)
A small KDE music player built around playlist files. It plays and shuffles a playlist or all your music, and edits playlists. It runs on Wayland only, such as a Plasma 6 session.
- Playlists are plain files. Each playlist is an
.m3u8file in your playlist folder, with paths relative to the file. There is no library database, so a sync tool such as Nextcloud can share the same playlists with the Strawly Music Android app. - Only the basics. It plays, shuffles and repeats, edits playlists and shows the queue. No streaming, no online lookups, no store.
- Fits the Plasma desktop. Built with Kirigami, it follows the Plasma theme, works with the media keys and the Media Player widget, and can close to the tray.
- Reads only what you give it. The Flatpak has no file system or network access. It reads only the folders you pick, and changes a song only when you edit its details.
What the app does, screen by screen: FEATURES.md.
Install
Download strawly-music-<version>-x86_64.flatpak and SHA256SUMS from the
releases page into a folder of
their own, then run these in that folder:
sha256sum -c SHA256SUMS
flatpak remote-add --user --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
flatpak install --user strawly-music-*-x86_64.flatpak
To update, install the newer bundle the same way with --reinstall. Your settings stay.
Build and test locally
1. Set up once
flatpak remote-add --user --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
flatpak install --user flathub org.kde.Sdk//6.11 org.kde.Platform//6.11 \
org.freedesktop.Sdk.Extension.rust-stable//25.08 org.flatpak.Builder
2. Build your checkout and run it
flatpak run --socket=session-bus org.flatpak.Builder --user --install --force-clean build-dir app.strawly.music.yml
flatpak run app.strawly.music
This replaces the installed Strawly Music with your build, and keeps your settings. To go back
to a release, install its bundle with flatpak install --user --reinstall.
3. Run the checks
The same checks as the CI: formatting, clippy, the build, qmllint and the tests. Any warning fails.
flatpak run --share=network --filesystem="${PWD}:ro" --env=QT_QPA_PLATFORM=offscreen --command=sh org.kde.Sdk//6.11 -c \
'sh "$1/.forgejo/check.sh" "$1"; status=$?; rm -rf /tmp/build; exit $status' sh "$PWD"
Clean up
rm -rf build-dir .flatpak-builder # the build files
flatpak uninstall --user --delete-data app.strawly.music # the app and its settings
How the code is laid out, the CI and releases: DEVELOPMENT.md.
More
- FEATURES.md: what the app does
- ROADMAP.md: what is planned
- CHANGELOG.md: what each release changed
- DEVELOPMENT.md: code, CI and releases
License
Source First License 1.1. See LICENSE.md. Free for non-commercial use.
The app uses these libraries from the KDE Flatpak runtime at run time. None of them is copied into this repository.
| Library | License | Used for |
|---|---|---|
| Qt 6 | LGPL-3.0-only | Window, QML interface, playback, settings |
| Kirigami | LGPL-2.0-or-later | KDE interface components |
| qqc2-desktop-style | LGPL-2.0-or-later, LGPL-3.0-only | Native Plasma look |
| KColorScheme and KConfig | LGPL-2.0-or-later | Following a new color scheme while the app runs |
| FFmpeg | LGPL-2.1-or-later | Decoding the songs, through Qt Multimedia |
| libpulse | LGPL-2.1-or-later | The app's volume in the sound server |
| libwayland | MIT | Bringing the window to the front when the app is started again |
The Rust crates built into the app are under the MIT or zlib License, the Unlicense, or the Unicode License V3. LICENSES/rust-crates.txt lists them. The code for the xdg-activation protocol, written from wayland-protocols while the app builds, is under the MIT License, in LICENSES/xdg-activation-v1.txt. All license texts are in LICENSES/.