https://github.com/markmandel/discord-notification-center
Totally experimental, not supported or official linux gui for Discord notification management
https://github.com/markmandel/discord-notification-center
Last synced: 28 days ago
JSON representation
Totally experimental, not supported or official linux gui for Discord notification management
- Host: GitHub
- URL: https://github.com/markmandel/discord-notification-center
- Owner: markmandel
- License: apache-2.0
- Created: 2026-04-09T18:15:04.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2026-05-14T22:15:44.000Z (3 months ago)
- Last Synced: 2026-05-15T00:31:00.524Z (3 months ago)
- Language: Rust
- Size: 85.9 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# discord-notification-center
A notification center for Discord. The daemon listens for incoming notifications
via the Discord RPC IPC interface and stores them in a local SQLite database.
The `toggle` command opens a Wayland layer-shell panel (Rose Pine themed) that
displays unread notifications and lets you act on them.
## Commands
### `daemon` (default)
Connects to the running Discord client via IPC, authenticates, and subscribes to
`NOTIFICATION_CREATE` events. Each notification is persisted to the local SQLite
database, including the `guild_id` resolved via a follow-up `GET_CHANNEL` RPC call
(needed for Discord deep links).
If Discord is not running when the daemon starts, it waits and retries every 5
seconds until it can connect. If the connection drops while running (e.g. Discord
is restarted), the daemon reconnects automatically on the same 5-second poll.
A system notification (`notify-send`) is shown on first connect, on disconnection,
and on reconnect.
Only one daemon instance may run at a time; a second invocation will exit
immediately with an error.
Notifications older than 24 hours (excluding pinned) are deleted on startup and
once every 4 hours while the daemon is running.
```
discord-notification-center
discord-notification-center daemon
```
### `toggle`
Toggles the Wayland layer-shell notification panel: slides in from the right if
not visible, or closes it if already open. Bind this to a key in your compositor
for quick access.
```
discord-notification-center toggle
```
**Panel features:**
- Only notifications from the last 24 hours are shown (pinned notifications are
always visible regardless of age)
- Notifications are listed newest-first; new arrivals appear while the panel is
open (polled every second from the database)
- Sender avatars are loaded asynchronously from Discord's CDN
- Multiple unread messages from the same channel or DM are **grouped** into a
single summary row; hovering expands the group to show individual messages
- Each notification (and each row inside an expanded group) has two action buttons:
- **📌 / 📍** — pin or unpin (pinned notifications stay visible until explicitly unpinned)
- **✓ / ↩** — mark as read / mark as unread
- Clicking a notification (or a group header) navigates directly to that channel
in the Discord client and marks it as read
- **✓** on a group header marks all messages in that channel as read
- **✓ all** button in the header marks every notification as read
- **All** toggle (or **Ctrl+F**) switches to full-history mode and focuses the
filter field; switching back clears the filter
- **Filter field** (All mode only) — type to instantly filter notifications by
channel name, body text, sender, or message content; the **✕** button clears it
- **Esc** closes the panel
## Keyboard shortcuts
| Key | Action |
|-----|--------|
| `Ctrl+F` | Switch to All mode and focus the filter field |
| `Esc` | Close the panel |
## Configuration
Create a config file at `~/.config/discord-notification-center/config.toml`:
```toml
client_id = "your-discord-client-id"
client_secret = "your-discord-client-secret"
```
`client_id` and `client_secret` come from your application in the
[Discord Developer Portal](https://discord.com/developers/applications). The app
must have the `rpc` and `rpc.notifications.read` OAuth2 scopes enabled.
On first run the daemon will create the SQLite database automatically at
`~/.config/discord-notification-center/notifications.db`.
## Building
### Debian/Ubuntu dependencies
The GTK4 layer-shell library and its build dependencies must be installed before
`cargo build` will succeed:
```
sudo apt install libgtk4-layer-shell-dev libgtk-4-dev libwayland-dev wayland-protocols pkg-config
```
The runtime libraries (`libgtk4-layer-shell0`, `libgtk-4-1`, `libwayland-client0`)
are pulled in automatically as dependencies of the dev packages above.
### Compile
```
cargo build --release
```
## LICENCE
Apache 2.0