diff --git a/.direnv/flake-profile b/.direnv/flake-profile
new file mode 120000
index 0000000..0c05709
--- /dev/null
+++ b/.direnv/flake-profile
@@ -0,0 +1 @@
+flake-profile-1-link
\ No newline at end of file
diff --git a/.direnv/flake-profile-1-link b/.direnv/flake-profile-1-link
new file mode 120000
index 0000000..815d486
--- /dev/null
+++ b/.direnv/flake-profile-1-link
@@ -0,0 +1 @@
+/nix/store/vvmz1kzp0iwsxsmlh0ss6snzn6mx9g4j-nix-shell-env
\ No newline at end of file
diff --git a/.envrc b/.envrc
new file mode 100644
index 0000000..8392d15
--- /dev/null
+++ b/.envrc
@@ -0,0 +1 @@
+use flake
\ No newline at end of file
diff --git a/.gitea/workflows/test.yml b/.gitea/workflows/test.yml
new file mode 100644
index 0000000..2a81d24
--- /dev/null
+++ b/.gitea/workflows/test.yml
@@ -0,0 +1,31 @@
+name: Test
+
+on:
+ pull_request:
+ branches:
+ - main
+ push:
+ branches:
+ - main
+
+jobs:
+ test:
+ name: Test
+ runs-on: ubuntu-latest
+ steps:
+ - name: Check out code
+ uses: actions/checkout@v5
+
+ - name: Set up Go
+ uses: actions/setup-go@v5
+ with:
+ go-version-file: go.mod
+
+ - name: Install TinyGo
+ run: |
+ wget https://github.com/tinygo-org/tinygo/releases/download/v0.40.1/tinygo_0.40.1_amd64.deb
+ sudo dpkg -i tinygo_0.40.1_amd64.deb
+ sudo apt install -y binaryen
+
+ - name: Run tests
+ run: make test
diff --git a/.github/ss-config.webp b/.github/ss-config.webp
deleted file mode 100644
index cb99c3d..0000000
Binary files a/.github/ss-config.webp and /dev/null differ
diff --git a/.github/ss-richpresence.webp b/.github/ss-richpresence.webp
deleted file mode 100644
index f800bfc..0000000
Binary files a/.github/ss-richpresence.webp and /dev/null differ
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
deleted file mode 100644
index dec0b97..0000000
--- a/.github/workflows/build.yml
+++ /dev/null
@@ -1,54 +0,0 @@
-name: Build
-
-on:
- pull_request:
- branches:
- - main
- push:
- branches:
- - main
-
-jobs:
- build:
- name: Build
- runs-on: ubuntu-latest
- steps:
- - name: Check out code
- uses: actions/checkout@v5
-
- - name: Set up Go
- uses: actions/setup-go@v5
- with:
- go-version-file: go.mod
-
- - name: Install TinyGo
- run: |
- wget https://github.com/tinygo-org/tinygo/releases/download/v0.40.1/tinygo_0.40.1_amd64.deb
- sudo dpkg -i tinygo_0.40.1_amd64.deb
- sudo apt install -y binaryen
-
- - name: Run tests
- run: make test
-
- - name: Append PR info to version
- if: github.event_name == 'pull_request'
- run: |
- PR_NUM=${{ github.event.pull_request.number }}
- SHA=$(echo "${{ github.event.pull_request.head.sha }}" | cut -c1-7)
- SUFFIX="PR${PR_NUM}-${SHA}"
- jq --arg suffix "$SUFFIX" '.version = .version + "-" + $suffix' manifest.json > manifest.tmp && mv manifest.tmp manifest.json
-
- - name: Append git SHA to version
- if: github.event_name == 'push'
- run: |
- SHA=$(echo "${{ github.sha }}" | cut -c1-7)
- jq --arg sha "$SHA" '.version = .version + "-" + $sha' manifest.json > manifest.tmp && mv manifest.tmp manifest.json
-
- - name: Build and package plugin
- run: make package
-
- - name: Upload artifact
- uses: actions/upload-artifact@v4
- with:
- name: discord-rich-presence
- path: discord-rich-presence.ndp
diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml
deleted file mode 100644
index 318e776..0000000
--- a/.github/workflows/create-release.yml
+++ /dev/null
@@ -1,89 +0,0 @@
-name: Create Release
-
-on:
- workflow_dispatch:
- inputs:
- version:
- description: "Release version (e.g., 1.2.3, without the 'v' prefix)"
- required: true
- type: string
- beta:
- description: "Beta number (1, 2, 3...). Leave empty for stable release"
- required: false
- type: string
- default: ""
-
-permissions:
- contents: write
-
-jobs:
- create-release:
- name: Create Release
- runs-on: ubuntu-latest
- steps:
- - name: Validate version format
- env:
- VERSION: ${{ inputs.version }}
- run: |
- if [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
- echo "::error::Invalid version format '$VERSION'. Use X.X.X (e.g., 1.2.3)"
- exit 1
- fi
-
- - name: Compute full version
- run: |
- VERSION="${{ inputs.version }}"
- BETA="${{ inputs.beta }}"
- if [[ -n "$BETA" && "$BETA" != "0" ]]; then
- VERSION="${VERSION}-beta-${BETA}"
- fi
- echo "VERSION=${VERSION}" >> "$GITHUB_ENV"
-
- - name: Check out code
- uses: actions/checkout@v5
-
- - name: Check tag does not already exist
- run: |
- if git ls-remote --tags origin "refs/tags/v${VERSION}" | grep -q .; then
- echo "::error::Tag v${VERSION} already exists"
- exit 1
- fi
-
- - name: Set up Go
- uses: actions/setup-go@v5
- with:
- go-version-file: go.mod
-
- - name: Run tests
- run: go test -race ./...
-
- - name: Update manifest.json version
- run: |
- jq --arg v "$VERSION" '.version = $v' manifest.json > manifest.tmp && mv manifest.tmp manifest.json
-
- - name: Commit, tag, and push
- run: |
- git config user.name "github-actions[bot]"
- git config user.email "github-actions[bot]@users.noreply.github.com"
- git add manifest.json
- git commit --allow-empty -m "Release v${VERSION}"
- git tag "v${VERSION}"
- git push origin main "v${VERSION}"
-
- - name: Install TinyGo
- run: |
- wget https://github.com/tinygo-org/tinygo/releases/download/v0.40.1/tinygo_0.40.1_amd64.deb
- sudo dpkg -i tinygo_0.40.1_amd64.deb
- sudo apt install -y binaryen
-
- - name: Build and package plugin
- run: make package
-
- - name: Create release
- uses: softprops/action-gh-release@v2
- with:
- tag_name: v${{ env.VERSION }}
- draft: true
- prerelease: ${{ inputs.beta != '' && inputs.beta != '0' }}
- files: discord-rich-presence.ndp
- generate_release_notes: true
diff --git a/.github/workflows/update-link-on-pr.yml b/.github/workflows/update-link-on-pr.yml
deleted file mode 100644
index f1259a4..0000000
--- a/.github/workflows/update-link-on-pr.yml
+++ /dev/null
@@ -1,38 +0,0 @@
-name: Add download link to PR
-
-on:
- workflow_run:
- workflows: ["Build"]
- types: [completed]
-
-jobs:
- pr_comment:
- if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success'
- runs-on: ubuntu-latest
- permissions:
- pull-requests: write
- steps:
- - name: Get PR number
- id: pr
- uses: actions/github-script@v7
- with:
- script: |
- const pulls = await github.rest.pulls.list({
- owner: context.repo.owner,
- repo: context.repo.repo,
- state: 'open'
- });
- const pr = pulls.data.find(p => p.head.sha === '${{ github.event.workflow_run.head_sha }}');
- if (pr) {
- core.setOutput('number', pr.number);
- }
-
- - name: Add download link comment
- if: steps.pr.outputs.number
- uses: marocchino/sticky-pull-request-comment@v2
- with:
- number: ${{ steps.pr.outputs.number }}
- message: |
- Download the plugin for this PR: [discord-rich-presence.zip](https://nightly.link/${{ github.repository }}/actions/runs/${{ github.event.workflow_run.id }}/discord-rich-presence.zip)
-
- Built from ${{ github.event.workflow_run.head_sha }} on ${{ github.event.workflow_run.updated_at }}
diff --git a/.gitignore b/.gitignore
index 76dcd7d..d44acd3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
*.wasm
*.ndp
tmp
-discord-rich-presence
+
+discordrome
.DS_Store
diff --git a/Makefile b/Makefile
index 8a0cd7b..96c4d57 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
SHELL := /usr/bin/env bash
.PHONY: test build package clean
-PLUGIN_NAME := discord-rich-presence
+PLUGIN_NAME := discodrome
WASM_FILE := plugin.wasm
TINYGO := $(shell command -v tinygo 2> /dev/null)
diff --git a/README.md b/README.md
index fe6a314..360e3b4 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,4 @@
-# Discord Rich Presence Plugin for Navidrome
-
-[](https://github.com/navidrome/discord-rich-presence-plugin/actions/workflows/build.yml)
-[](https://github.com/navidrome/discord-rich-presence-plugin/releases/latest/download/discord-rich-presence.ndp)
+# Discodrome, a work of Discord Rich Presence Plugin for Navidrome
**Attention: This plugin requires Navidrome 0.61.0 or later.**
@@ -9,7 +6,7 @@ This plugin integrates Navidrome with Discord Rich Presence, displaying your cur
The goal is to demonstrate the capabilities of Navidrome's plugin system by implementing a real-time presence feature using Discord's Gateway API.
It demonstrates how a Navidrome plugin can maintain real-time connections to external services while remaining completely stateless.
-Based on the [Navicord](https://github.com/logixism/navicord) project.
+Based on the [discord-rich-presence-plugin](https://github.com/navidrome/discord-rich-presence-plugin) project.
**⚠️ WARNING: This plugin requires storing Discord user tokens, which may violate Discord's Terms of Service. Use at your own risk.**
@@ -26,13 +23,12 @@ Based on the [Navicord](https://github.com/logixism/navicord) project.
- Optional album art from [Cover Art Archive](https://coverartarchive.org) for MusicBrainz-tagged music
- Optional image hosting via [uguu.se](https://uguu.se) for non-public Navidrome instances
-
## Installation
### Step 1: Download and Install the Plugin
-1. Download the `discord-rich-presence.ndp` file from the [releases page](https://github.com/navidrome/discord-rich-presence-plugin/releases)
+1. Download the `discodrome.ndp` file from the [releases page](https://git.atri.dad/atridad/discodrome/releases)
2. Copy it to your Navidrome plugins folder. Default location: `/plugins/`
### Step 2: Create a Discord Application
@@ -115,7 +111,6 @@ For album artwork to display in Discord, Discord needs to be able to access the
Access the plugin configuration in Navidrome: **Settings > Plugins > Discord Rich Presence**
-
### Configuration Fields
@@ -249,7 +244,7 @@ make build
make package
```
-The `make package` command creates `discord-rich-presence.ndp` containing the compiled WebAssembly module and manifest.
+The `make package` command creates `discodrome.ndp` containing the compiled WebAssembly module and manifest.
### Manual Build Options
@@ -257,16 +252,15 @@ The `make package` command creates `discord-rich-presence.ndp` containing the co
```sh
# Install TinyGo first: https://tinygo.org/getting-started/install/
tinygo build -target wasip1 -buildmode=c-shared -o plugin.wasm -scheduler=none .
-zip discord-rich-presence.ndp plugin.wasm manifest.json
+zip discodrome.ndp plugin.wasm manifest.json
```
#### Using Standard Go
```sh
GOOS=wasip1 GOARCH=wasm go build -buildmode=c-shared -o plugin.wasm .
-zip discord-rich-presence.ndp plugin.wasm manifest.json
+zip discodrome.ndp plugin.wasm manifest.json
```
### Output
- `plugin.wasm`: The compiled WebAssembly module
-- `discord-rich-presence.ndp`: The complete plugin package ready for installation
-
+- `discodrome.ndp`: The complete plugin package ready for installation
diff --git a/flake.lock b/flake.lock
new file mode 100644
index 0000000..03cb250
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,61 @@
+{
+ "nodes": {
+ "flake-utils": {
+ "inputs": {
+ "systems": "systems"
+ },
+ "locked": {
+ "lastModified": 1731533236,
+ "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1775036866,
+ "narHash": "sha256-ZojAnPuCdy657PbTq5V0Y+AHKhZAIwSIT2cb8UgAz/U=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "6201e203d09599479a3b3450ed24fa81537ebc4e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "root": {
+ "inputs": {
+ "flake-utils": "flake-utils",
+ "nixpkgs": "nixpkgs"
+ }
+ },
+ "systems": {
+ "locked": {
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000..addfee2
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,32 @@
+{
+ description = "Discodrome Development Environment";
+
+ inputs = {
+ nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
+ flake-utils.url = "github:numtide/flake-utils";
+ };
+
+ outputs =
+ {
+ nixpkgs,
+ flake-utils,
+ self,
+ }:
+ flake-utils.lib.eachDefaultSystem (
+ system:
+ let
+ pkgs = nixpkgs.legacyPackages.${system};
+ in
+ {
+ devShells.default = pkgs.mkShell {
+ buildInputs = with pkgs; [
+ go
+ tinygo
+ gnumake
+ binaryen
+ jq
+ ];
+ };
+ }
+ );
+}
diff --git a/go.mod b/go.mod
index ad204e2..96514cf 100644
--- a/go.mod
+++ b/go.mod
@@ -1,4 +1,4 @@
-module discord-rich-presence
+module discodrome
go 1.25.0
diff --git a/manifest.json b/manifest.json
index d549e92..520a4d7 100644
--- a/manifest.json
+++ b/manifest.json
@@ -1,10 +1,10 @@
{
"$schema": "https://raw.githubusercontent.com/navidrome/navidrome/refs/heads/master/plugins/manifest-schema.json",
- "name": "Discord Rich Presence",
- "author": "Navidrome Team",
+ "name": "Discodrome",
+ "author": "Atridad Lahiji",
"version": "1.0.0",
"description": "Discord Rich Presence integration for Navidrome",
- "website": "https://github.com/navidrome/discord-rich-presence-plugin",
+ "website": "https://git.atri.dad.com/atridad/discodrome",
"permissions": {
"users": {
"reason": "To process scrobbles on behalf of users"
@@ -20,9 +20,7 @@
},
"websocket": {
"reason": "To maintain real-time connection with Discord gateway",
- "requiredHosts": [
- "gateway.discord.gg"
- ]
+ "requiredHosts": ["gateway.discord.gg"]
},
"cache": {
"reason": "To store connection state and sequence numbers"
@@ -53,13 +51,7 @@
"type": "string",
"title": "Activity Name Display",
"description": "Choose what to display as the activity name in Discord Rich Presence",
- "enum": [
- "Default",
- "Track",
- "Album",
- "Artist",
- "Custom"
- ],
+ "enum": ["Default", "Track", "Album", "Artist", "Custom"],
"default": "Default"
},
"activitynametemplate": {
@@ -106,17 +98,11 @@
"minLength": 1
}
},
- "required": [
- "username",
- "token"
- ]
+ "required": ["username", "token"]
}
}
},
- "required": [
- "clientid",
- "users"
- ]
+ "required": ["clientid", "users"]
},
"uiSchema": {
"type": "VerticalLayout",