git/grrs/main

chore: point packaging at git.myn.sh, add issues

diff --git a/.gitignore b/.gitignore
index aee8f7f..38a7e9b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,11 @@ pkg/grrs-git/grrs/
pkg/grrs-git/*.tar.*
/target
.direnv
+*.bkp
+*~
+.DS_Store
+*.log
+/target/
+.cargo/
+# makepkg build tree: contains a nested copy of the repo
+pkg/**/src/
diff --git a/README.md b/README.md
index a2aacb6..48b42f2 100644
--- a/README.md
+++ b/README.md
@@ -21,7 +21,7 @@ A minimal terminal user interface for [Gensokyo Radio](https://gensokyoradio.net
cargo install myn-grrs
```
-### From Source (Radicle)
+### From Source
```sh
git clone https://git.myn.sh/grrs.git
(cd grrs && cargo install --path .)
@@ -30,7 +30,7 @@ git clone https://git.myn.sh/grrs.git
### With Nix
You can run it directly without installing:
```sh
-nix run "git+rad://z3dnwE7h9y4ndGdqeafNLP8eDPn3Y#grrs"
+nix run "git+https://git.myn.sh/grrs.git#grrs"
```
### Arch Linux
@@ -39,14 +39,14 @@ nix run "git+rad://z3dnwE7h9y4ndGdqeafNLP8eDPn3Y#grrs"
**For the stable release:**
```sh
-git clone https://rosa.radicle.network/rad:z3dnwE7h9y4ndGdqeafNLP8eDPn3Y.git grrs
+git clone https://git.myn.sh/grrs.git grrs
cd grrs/pkg/grrs
makepkg -si
```
**For the bleeding-edge git version:**
```sh
-git clone https://rosa.radicle.network/rad:z3dnwE7h9y4ndGdqeafNLP8eDPn3Y.git grrs
+git clone https://git.myn.sh/grrs.git grrs
cd grrs/pkg/grrs-git
makepkg -si
```
diff --git a/flake.nix b/flake.nix
index c566bff..b518a78 100644
--- a/flake.nix
+++ b/flake.nix
@@ -53,7 +53,7 @@
meta = {
description = "A minimal TUI for Gensokyo Radio";
- homepage = "https://radicle.network/nodes/rosa.radicle.network/rad%3Az3dnwE7h9y4ndGdqeafNLP8eDPn3Y";
+ homepage = "https://git.myn.sh/grrs";
license = pkgs.lib.licenses.unlicense;
mainProgram = "grrs";
platforms = pkgs.lib.platforms.linux;
diff --git a/issues/0001-feature-volume-control-keybinds.md b/issues/0001-feature-volume-control-keybinds.md
new file mode 100644
index 0000000..d8ee3b3
--- /dev/null
+++ b/issues/0001-feature-volume-control-keybinds.md
@@ -0,0 +1,8 @@
+---
+title: feature: volume control keybinds
+status: closed
+labels: []
+created: 2026-08-15
+closed:
+---
+had a request to add volume control keybinds. this should be possible to add and should function similarly to mute. will make a small addition to the UI to display audio level as %.
diff --git a/issues/0002-tweak-improve-documentation.md b/issues/0002-tweak-improve-documentation.md
new file mode 100644
index 0000000..e9749b1
--- /dev/null
+++ b/issues/0002-tweak-improve-documentation.md
@@ -0,0 +1,8 @@
+---
+title: tweak: improve documentation
+status: closed
+labels: []
+created: 2026-08-17
+closed:
+---
+documentation is lacking right now, would be nice to improve it for users
diff --git a/issues/0003-feature-ship-desktop-file.md b/issues/0003-feature-ship-desktop-file.md
new file mode 100644
index 0000000..abda97d
--- /dev/null
+++ b/issues/0003-feature-ship-desktop-file.md
@@ -0,0 +1,8 @@
+---
+title: feature: ship .desktop file
+status: closed
+labels: []
+created: 2026-08-17
+closed:
+---
+ship a .desktop file that can be used to launch grrs from a launcher that parses .desktop files, which would allow users to open grrs from the launcher and have it open their terminal of choice. may be necessary to work on the installation flow in this case, as ideally the user wouldn't need to manually install said .desktop file
diff --git a/issues/0004-feature-proper-config-file.md b/issues/0004-feature-proper-config-file.md
new file mode 100644
index 0000000..f6aeae4
--- /dev/null
+++ b/issues/0004-feature-proper-config-file.md
@@ -0,0 +1,8 @@
+---
+title: feature: proper config file
+status: closed
+labels: []
+created: 2026-08-17
+closed:
+---
+add a proper config file so that grrs can be configured there. this could include behaviour for vertical and horizontal layout switching, theming, some library settings, and some other useful miscellaneous settings
diff --git a/issues/0005-tweak-main-rs-broken-up.md b/issues/0005-tweak-main-rs-broken-up.md
new file mode 100644
index 0000000..bd2e2ff
--- /dev/null
+++ b/issues/0005-tweak-main-rs-broken-up.md
@@ -0,0 +1,8 @@
+---
+title: tweak: main.rs broken up
+status: closed
+labels: []
+created: 2026-08-17
+closed:
+---
+break up main.rs so the software isn't a single rust source file, making this easier to work with in the future
diff --git a/issues/0006-feature-dependency-check.md b/issues/0006-feature-dependency-check.md
new file mode 100644
index 0000000..7cdff1f
--- /dev/null
+++ b/issues/0006-feature-dependency-check.md
@@ -0,0 +1,8 @@
+---
+title: feature: dependency check
+status: closed
+labels: []
+created: 2026-08-17
+closed:
+---
+checking for dependencies prior to grrs loading. not positive of the best way to do this. perhaps by looking in given locations for the availability of a binary or library
diff --git a/issues/0007-feature-vertical-layout.md b/issues/0007-feature-vertical-layout.md
new file mode 100644
index 0000000..dae5622
--- /dev/null
+++ b/issues/0007-feature-vertical-layout.md
@@ -0,0 +1,8 @@
+---
+title: feature: vertical layout
+status: closed
+labels: []
+created: 2026-08-17
+closed:
+---
+this would be a vertical layout of the grrs elements in a way that works with portrait aspect ratios for a given terminal, similar to how kew is laid out
diff --git a/issues/0008-tweak-separation-of-grrs-files.md b/issues/0008-tweak-separation-of-grrs-files.md
new file mode 100644
index 0000000..423b1bb
--- /dev/null
+++ b/issues/0008-tweak-separation-of-grrs-files.md
@@ -0,0 +1,8 @@
+---
+title: tweak: separation of grrs files
+status: closed
+labels: []
+created: 2026-08-17
+closed:
+---
+separate files into .local/grrs and .config/grrs, as right now everything lives in .config/grrs, despite not really being config related
diff --git a/issues/0009-tweak-help-popup-and-library-tweaks.md b/issues/0009-tweak-help-popup-and-library-tweaks.md
new file mode 100644
index 0000000..a8f8bb2
--- /dev/null
+++ b/issues/0009-tweak-help-popup-and-library-tweaks.md
@@ -0,0 +1,8 @@
+---
+title: tweak: help popup and library tweaks
+status: closed
+labels: []
+created: 2026-08-17
+closed:
+---
+edits to the help popup (it's ugly and not the most helpful thing in the world) and library tweaks (changing the structure and layout) would be nice
diff --git a/issues/0010-rewrite-port-to-go.md b/issues/0010-rewrite-port-to-go.md
new file mode 100644
index 0000000..ec7ea9d
--- /dev/null
+++ b/issues/0010-rewrite-port-to-go.md
@@ -0,0 +1,8 @@
+---
+title: rewrite: port to go
+status: closed
+labels: [backburner]
+created: 2026-08-17
+closed:
+---
+ideally i'd be able to port this to go, where it'll then be renamed to gohei. ideally i'd be able to make use of charmbracelet's libraries.
diff --git a/issues/0011-feature-link-to-album-info-in-library.md b/issues/0011-feature-link-to-album-info-in-library.md
new file mode 100644
index 0000000..d163fcc
--- /dev/null
+++ b/issues/0011-feature-link-to-album-info-in-library.md
@@ -0,0 +1,8 @@
+---
+title: feature: link to album info in library
+status: closed
+labels: []
+created: 2026-08-18
+closed:
+---
+received request to implement links to album info in the library interface. perhaps this could be touhoudb or something else. maybe both!
diff --git a/issues/0012-feature-ability-to-copy-track-metadata-to-clipboar.md b/issues/0012-feature-ability-to-copy-track-metadata-to-clipboar.md
new file mode 100644
index 0000000..19a1527
--- /dev/null
+++ b/issues/0012-feature-ability-to-copy-track-metadata-to-clipboar.md
@@ -0,0 +1,8 @@
+---
+title: feature: ability to copy track metadata to clipboard
+status: closed
+labels: []
+created: 2026-08-20
+closed:
+---
+a commonly requested feature is the ability to be able to select text in the TUI or pull the track metadata into the clipboard so that those of us that do not have JP layouts/the ability to type japanese characters are able to search for the songs outside of grrs easier
diff --git a/issues/0013-feature-publish-on-aur-grrs-git-and-grrs.md b/issues/0013-feature-publish-on-aur-grrs-git-and-grrs.md
new file mode 100644
index 0000000..4dec9aa
--- /dev/null
+++ b/issues/0013-feature-publish-on-aur-grrs-git-and-grrs.md
@@ -0,0 +1,8 @@
+---
+title: feature: publish on AUR (grrs-git and grrs)
+status: closed
+labels: []
+created: 2026-08-22
+closed:
+---
+set up PKGBUILDs to distribute grrs to archlinux users via AUR. will need to write a PKGBUILD for grrs-git that pulls source directly from radicle seed. also need to write a PKGbuild for the grrs package that builds from the crates.io tarball. if i ever wanna do a grrs-bin it'll be necessary to host the pre-compiled binary somewhere. need to ensure that both PKGBUILDs correctly install the binary + planned .desktop file (see issue a9a668b). both packages will also need .SRCINFO files, and need to be tested locally using makepkg.
diff --git a/issues/0014-refactor-codebase-cleanup-and-deduplication.md b/issues/0014-refactor-codebase-cleanup-and-deduplication.md
new file mode 100644
index 0000000..f79085c
--- /dev/null
+++ b/issues/0014-refactor-codebase-cleanup-and-deduplication.md
@@ -0,0 +1,8 @@
+---
+title: refactor: codebase cleanup and deduplication
+status: closed
+labels: []
+created: 2026-08-22
+closed:
+---
+abstracting input handlers, path gen, and UI to deduplicate and improve maintainability before adding more shit
diff --git a/issues/0015-ui-album-art-from-touhoudb.md b/issues/0015-ui-album-art-from-touhoudb.md
new file mode 100644
index 0000000..3ddc3b6
--- /dev/null
+++ b/issues/0015-ui-album-art-from-touhoudb.md
@@ -0,0 +1,8 @@
+---
+title: ui: album art from touhoudb
+status: closed
+labels: []
+created: 2026-08-23
+closed:
+---
+it would be possible to make an api request using touhoudb's rest api and pull the album art from there instead, which would solve the issue of gensokyo radio's album art always being so low quality, would even allow me to add a feature to view just the album art at full quality in the interface, as a popup. would need to also write a fallback condition so that if the request to touhoudb fails, times out, or returns no results, the gensokyo radio art will be fetched instead. only real potential issue i can think of is metadata matching. album titles could vary slightly. gensokyo radio could use a translated english title, and touhoudb could use romaji. may have to play with how the search query is formatted to get a solid success rate.
diff --git a/issues/0016-feature-configurable-keybindings-in-config-toml.md b/issues/0016-feature-configurable-keybindings-in-config-toml.md
new file mode 100644
index 0000000..4c8db8c
--- /dev/null
+++ b/issues/0016-feature-configurable-keybindings-in-config-toml.md
@@ -0,0 +1,8 @@
+---
+title: feature: configurable keybindings in config.toml
+status: open
+labels: []
+created: 2026-08-28
+closed:
+---
+expose a [keys] table in the config so users can remap functions to whatever it is they prefer
diff --git a/issues/0017-feature-external-theme-definitions.md b/issues/0017-feature-external-theme-definitions.md
new file mode 100644
index 0000000..900c8f9
--- /dev/null
+++ b/issues/0017-feature-external-theme-definitions.md
@@ -0,0 +1,8 @@
+---
+title: feature: external theme definitions
+status: open
+labels: []
+created: 2026-08-28
+closed:
+---
+would allow people to use systems like pywal, matugen, etc in order to theme grrs automatically. probably unnecessary, we'll see if it gets added
diff --git a/issues/0018-feature-lossless-stream-authentication.md b/issues/0018-feature-lossless-stream-authentication.md
new file mode 100644
index 0000000..7b4690a
--- /dev/null
+++ b/issues/0018-feature-lossless-stream-authentication.md
@@ -0,0 +1,8 @@
+---
+title: feature: lossless stream authentication
+status: open
+labels: []
+created: 2026-08-28
+closed:
+---
+gensokyo radio offers a lossless flac stream at https://stream.gensokyoradio.net/4/ for their indigo subscribers. it uses basic http authentication with the listener's username and a custom pin. can add an authentication section to the config so subscribers are able to get access to the feed by changing the stream url and adding their authentication details to the config
diff --git a/issues/0019-feature-fuzzy-searching-for-liked-tracks.md b/issues/0019-feature-fuzzy-searching-for-liked-tracks.md
new file mode 100644
index 0000000..8e59a6f
--- /dev/null
+++ b/issues/0019-feature-fuzzy-searching-for-liked-tracks.md
@@ -0,0 +1,8 @@
+---
+title: feature: fuzzy searching for liked tracks
+status: closed
+labels: []
+created: 2026-08-28
+closed:
+---
+over time, the library of liked tracks is going to grow massively. it may be nice to add full on sorting to some degree, but until then, adding a function to search tracks when pressing / in the library tab would be good. could use a crate like nucleo or skim for this
diff --git a/issues/0020-feature-loudness-normalization-toggle.md b/issues/0020-feature-loudness-normalization-toggle.md
new file mode 100644
index 0000000..267bbce
--- /dev/null
+++ b/issues/0020-feature-loudness-normalization-toggle.md
@@ -0,0 +1,8 @@
+---
+title: feature: loudness normalization toggle
+status: closed
+labels: []
+created: 2026-08-28
+closed:
+---
+adding an option in the config.toml for utilizing mpv's loudnorm or dynaudnorm audio filter would allow for basic loudness normalization. may be nice to have
diff --git a/issues/0021-feature-stream-recording-track-ripping.md b/issues/0021-feature-stream-recording-track-ripping.md
new file mode 100644
index 0000000..f4cf401
--- /dev/null
+++ b/issues/0021-feature-stream-recording-track-ripping.md
@@ -0,0 +1,8 @@
+---
+title: feature: stream recording (track ripping)
+status: closed
+labels: []
+created: 2026-08-28
+closed:
+---
+adding a hotkey like r that dumps the current livestream segment to a tagged .opus or .mp3 file in a spot like ~/.local/share/grrs/recordings/ would be helpful. the fact that we are already pulling the cover art and metadata means we could also tag the file with id3. people could easily keep tracks they like this way
diff --git a/issues/0022-feature-headless-daemon-mode.md b/issues/0022-feature-headless-daemon-mode.md
new file mode 100644
index 0000000..4683ca7
--- /dev/null
+++ b/issues/0022-feature-headless-daemon-mode.md
@@ -0,0 +1,8 @@
+---
+title: feature: headless daemon mode
+status: closed
+labels: []
+created: 2026-08-28
+closed:
+---
+adding a command line flag to launch grrs purely in the background without the tui would allow users to just run it and control it via mpris without needing any windows open. then perhaps the user can just open grrs as needed and connect to the same socket in order to like songs as needed. additionally, in this case, it would be wise to add a configuration option perhaps to allow the user to switch to a daemon mode. in the daemon mode, the user could quit out of grrs normally with the q/^c and keep it in the background. daemon mode could introduce a keybind specifically meant for shutting down/quitting daemon mode
diff --git a/issues/0023-feature-history-tab.md b/issues/0023-feature-history-tab.md
new file mode 100644
index 0000000..bfbf631
--- /dev/null
+++ b/issues/0023-feature-history-tab.md
@@ -0,0 +1,8 @@
+---
+title: feature: history tab
+status: closed
+labels: []
+created: 2026-08-28
+closed:
+---
+i've had a request to implement a history tab, and i agree it would be a good idea. the gensokyo radio api already provides recent track data, so i could just parse that json array and make a new tab
diff --git a/issues/0024-feature-desktop-notifications.md b/issues/0024-feature-desktop-notifications.md
new file mode 100644
index 0000000..a0f9a3b
--- /dev/null
+++ b/issues/0024-feature-desktop-notifications.md
@@ -0,0 +1,8 @@
+---
+title: feature: desktop notifications
+status: closed
+labels: []
+created: 2026-08-28
+closed:
+---
+desktop notifications should just require adding the notify-rust crate, and then having it push the metadata out. it should be configurable via the configuration file as well.
diff --git a/issues/0025-feature-discord-rpc.md b/issues/0025-feature-discord-rpc.md
new file mode 100644
index 0000000..ed8797e
--- /dev/null
+++ b/issues/0025-feature-discord-rpc.md
@@ -0,0 +1,8 @@
+---
+title: feature: discord rpc
+status: closed
+labels: []
+created: 2026-08-28
+closed:
+---
+discord rpc should be quite simple to add. all i should need to do is add either the rpcdiscord or discord_rpc_client crate, and pass it a discord application id. then format a string with the track's metadata.
diff --git a/issues/0026-feature-tab-indicator-at-top-of-app.md b/issues/0026-feature-tab-indicator-at-top-of-app.md
new file mode 100644
index 0000000..1f080fa
--- /dev/null
+++ b/issues/0026-feature-tab-indicator-at-top-of-app.md
@@ -0,0 +1,8 @@
+---
+title: feature: tab indicator at top of app
+status: closed
+labels: []
+created: 2026-09-01
+closed:
+---
+an indicator to show whether the user is on the player, library, or history page would be nice. perhaps it can be displayed only when the user begins cycling tabs with tab, and then go away.
diff --git a/issues/0027-bug-previous-album-art-showing-in-notifications.md b/issues/0027-bug-previous-album-art-showing-in-notifications.md
new file mode 100644
index 0000000..97020fe
--- /dev/null
+++ b/issues/0027-bug-previous-album-art-showing-in-notifications.md
@@ -0,0 +1,8 @@
+---
+title: bug: previous album art showing in notifications
+status: closed
+labels: []
+created: 2026-09-01
+closed:
+---
+on some machines, perhaps due to differences in network speed, the desktop notifications are showing the album art of the previous track, instead of the current (new) track. i wonder what would be the best way to handle this. clearly the 1.5s buffer currently in place is not enough for some setups. however, increasing it would also be overkill for setups where 1.5s is already working. perhaps a dynamic way of determining that the art has changed, and firing off the notification once the art has changed.
diff --git a/issues/0028-fix-connection-issues.md b/issues/0028-fix-connection-issues.md
new file mode 100644
index 0000000..a717542
--- /dev/null
+++ b/issues/0028-fix-connection-issues.md
@@ -0,0 +1,8 @@
+---
+title: fix: connection issues
+status: closed
+labels: []
+created: 2026-09-07
+closed:
+---
+there are seemingly connection issues when connecting to gensokyo radio because of the new cdn, and currently mpv is only attempting to connect a single time. per octo's recommendation let's implement a checked to make sure the connection from mpv to gensokyo radio goes through correctly. number of attempts should be configurable via config file
diff --git a/justfile b/justfile
index 3e38070..989427d 100644
--- a/justfile
+++ b/justfile
@@ -28,8 +28,7 @@ test-pkg:
test-pkg-git:
cd pkg/grrs-git && makepkg -si
-# cut a new git tag and explicitly broadcast it to the radicle network
+# cut a new version tag and push it to the git server
publish-tag version:
git tag -a v{{ version }} -m "Release v{{ version }}"
- git push rad --tags
- rad sync --announce
+ git push ahjo main --tags
diff --git a/pkg/grrs-git/.SRCINFO b/pkg/grrs-git/.SRCINFO
index f7c6ba9..76f8326 100644
--- a/pkg/grrs-git/.SRCINFO
+++ b/pkg/grrs-git/.SRCINFO
@@ -2,7 +2,7 @@ pkgbase = grrs-git
pkgdesc = A minimal TUI for Gensokyo Radio
pkgver = r41.e29d341
pkgrel = 1
- url = https://radicle.network/nodes/git.myn.sh/grrs
+ url = https://git.myn.sh/grrs
arch = x86_64
license = Unlicense
makedepends = cargo
@@ -15,7 +15,7 @@ pkgbase = grrs-git
conflicts = grrs
options = !lto
options = !debug
- source = grrs::git+https://rosa.radicle.network/rad:z3dnwE7h9y4ndGdqeafNLP8eDPn3Y.git
+ source = grrs::git+https://git.myn.sh/grrs.git
sha256sums = SKIP
pkgname = grrs-git
diff --git a/pkg/grrs-git/PKGBUILD b/pkg/grrs-git/PKGBUILD
index d1397c8..845d19e 100644
--- a/pkg/grrs-git/PKGBUILD
+++ b/pkg/grrs-git/PKGBUILD
@@ -1,18 +1,18 @@
# Maintainer: Myn <hello@myn.sh>
pkgname=grrs-git
-pkgver=r41.e29d341
+pkgver=r42.d2ecef4
pkgrel=1
pkgdesc="A minimal TUI for Gensokyo Radio"
arch=('x86_64')
-url="https://radicle.network/nodes/git.myn.sh/grrs"
+url="https://git.myn.sh/grrs"
license=('Unlicense')
depends=('gcc-libs' 'glibc' 'mpv')
makedepends=('cargo' 'git' 'cmake')
options=('!lto' '!debug')
provides=('grrs')
conflicts=('grrs')
-source=("grrs::git+https://rosa.radicle.network/rad:z3dnwE7h9y4ndGdqeafNLP8eDPn3Y.git")
+source=("grrs::git+https://git.myn.sh/grrs.git")
sha256sums=('SKIP')
pkgver() {
diff --git a/pkg/grrs/.SRCINFO b/pkg/grrs/.SRCINFO
index 6792cf2..7264230 100644
--- a/pkg/grrs/.SRCINFO
+++ b/pkg/grrs/.SRCINFO
@@ -2,7 +2,7 @@ pkgbase = grrs
pkgdesc = A minimal TUI for Gensokyo Radio
pkgver = 0.1.9
pkgrel = 1
- url = https://radicle.network/nodes/git.myn.sh/grrs
+ url = https://git.myn.sh/grrs
arch = x86_64
license = Unlicense
makedepends = cargo
@@ -15,7 +15,7 @@ pkgbase = grrs
conflicts = grrs-git
options = !lto
options = !debug
- source = grrs::git+https://rosa.radicle.network/rad:z3dnwE7h9y4ndGdqeafNLP8eDPn3Y.git#tag=v0.1.9
+ source = grrs::git+https://git.myn.sh/grrs.git
sha256sums = 17152ec108e2892c5524f731b2c87c7b4f261deba9162859aa1569539cdf1c60
pkgname = grrs
diff --git a/pkg/grrs/PKGBUILD b/pkg/grrs/PKGBUILD
index ca38b7a..9d1fc86 100644
--- a/pkg/grrs/PKGBUILD
+++ b/pkg/grrs/PKGBUILD
@@ -5,14 +5,14 @@ pkgver=0.1.9
pkgrel=1
pkgdesc="A minimal TUI for Gensokyo Radio"
arch=('x86_64')
-url="https://radicle.network/nodes/git.myn.sh/grrs"
+url="https://git.myn.sh/grrs"
license=('Unlicense')
depends=('gcc-libs' 'glibc' 'mpv')
makedepends=('cargo' 'git' 'cmake')
options=('!lto' '!debug')
provides=('grrs')
conflicts=('grrs-git')
-source=("grrs::git+https://rosa.radicle.network/rad:z3dnwE7h9y4ndGdqeafNLP8eDPn3Y.git#tag=v0.1.9")
+source=("grrs::git+https://git.myn.sh/grrs.git")
sha256sums=('17152ec108e2892c5524f731b2c87c7b4f261deba9162859aa1569539cdf1c60')
prepare() {