- Rust 98.8%
- Nix 1.2%
## Summary Updates the README with accurate documentation, adds a Development section for contributors, fixes a terminal size display issue, and scopes CI to avoid duplicate runs. ## Changes - **Docs: README improvements** - Fix tokio link (was plain text while ratatui and forgejo-api were hyperlinked) - Replace HTML entities with Unicode equivalents - Clarify token scopes — removed notification scope (no features exist), reworded write scope recommendation - Complete auto-discovery docs — mentions push/admin access requirement, PR support filter, and exclusions - Add Ctrl-c to keybindings table (was implemented but undocumented) - Document 80x24 minimum terminal size requirement - Add Development section with Nix flake, Woodpecker CI, CONTRIBUTING.md, and SECURITY.md links - **Fix: Terminal size display** - Use plain x instead of Unicode multiplication sign in terminal size requirement - **CI: Woodpecker configuration** - Scope push events to main branch only to avoid duplicate PR runs on feature branches |
||
|---|---|---|
| .forgejo | ||
| src | ||
| .gitignore | ||
| .woodpecker.yaml | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CHANGELOG.md | ||
| CONTRIBUTING.md | ||
| flake.nix | ||
| LICENSE | ||
| README.md | ||
| screenshot.png | ||
| SECURITY.md | ||
fj-dash
Terminal dashboard for monitoring pull requests across Forgejo instances. Built with ratatui, tokio, and forgejo-api.
Installation
cargo install --path .
Requires a terminal at least 80x24 characters.
Configuration
Create ~/.config/fj-dash/config.toml:
[[instance]]
name = "my-forgejo"
url = "https://forgejo.example.com"
token = "your-api-token"
repos = ["owner/repo1", "owner/repo2"]
name— Tab label shown in the UIurl— Base URL of your Forgejo instancetoken— API token (Settings → Applications → Generate Token). Recommended scopes: repository (read/write), user (read), and issue (read/write). Read-only dashboards only need read:repository and read:user. Write scopes are recommended so you won't need to regenerate the token when future features (approve, merge, comment) landrepos— Optional. Omit to auto-discover repos you have push access to (excludes archived repos, mirrors, and repos without pull request support)
Multiple instances are supported; each gets its own tab:
[[instance]]
name = "work"
url = "https://git.work.com"
token = "token-a"
repos = ["team/backend", "team/frontend"]
[[instance]]
name = "personal"
url = "https://codeberg.org"
token = "token-b"
tea CLI Fallback
If no config.toml exists, fj-dash reads credentials from the
tea CLI config (~/.config/tea/config.yml).
All logins become instance tabs with automatic repo discovery.
Keybindings
| Key | Action |
|---|---|
j / Down |
Move selection down |
k / Up |
Move selection up |
p |
Toggle preview pane |
h / Left |
Previous preview tab (Description / Comments) |
l / Right |
Next preview tab |
PgDn |
Scroll preview down |
PgUp |
Scroll preview up |
Tab |
Next instance tab |
Shift-Tab |
Previous instance tab |
Enter |
Open PR in browser |
r |
Refresh all instances |
Ctrl-c |
Quit |
q |
Quit |
Preview Pane
Press p to open a split preview showing the selected PR's description
(rendered from Markdown) and comments. Use h/l to switch tabs and
PgDn/PgUp to scroll.
The preview pane can be configured in config.toml:
[preview]
open = true # start with preview open (default: false)
width = 50 # pane width as % of terminal (default: 45, range: 20-80)
CI & Review Status
The PR table includes CI and Rev columns showing build and review status at a glance:
| Symbol | Meaning |
|---|---|
✓ |
Success / Approved |
✗ |
Failure / Changes requested |
● |
Pending |
! |
Warning (CI only) |
— |
No status |
CI status is fetched from commit statuses; review status from pull request reviews. Both load progressively after the PR list appears.
Pagination
PR fetching is limited to 50 PRs per repository (single API page). When a repo hits this limit, a footer indicator appears in the table. Full pagination is not yet implemented.
Commit Integrity
All commits are GPG signed. PRs are merged locally to ensure every commit in the history is cryptographically verified.
Development
A Nix flake provides the full toolchain (rustc, cargo, clippy,
rustfmt, rust-analyzer). With direnv you can
direnv allow and everything is ready.
cargo test
cargo clippy -- -D warnings
cargo fmt --check
CI runs these same checks via Woodpecker on every pull
request and on pushes to main.
See CONTRIBUTING.md for the full contribution guide and SECURITY.md for the vulnerability disclosure policy.
Acknowledgments
Inspired by gh-dash, a beautiful GitHub dashboard for the terminal.
