4.6 KiB
Executable File
4.6 KiB
Executable File
nirc-rs
nirc-rs is a multi-protocol terminal chat client written in Rust. It provides a unified TUI interface for IRC, Matrix, Discord, ADC/DC++, BitChat (P2P via libp2p), Revolt/Stout, Spacebar, and Nerimity — all in a single ncurses-style terminal window.
Features
- Multi-protocol: IRC (with TLS/SASL), Matrix (megolm E2EE), Discord (Gateway + REST), ADC/DC++, BitChat (P2P Gossipsub), Stout, Spacebar, Nerimity
- naim-style TUI: Right-side window list panel, chat area with naim-compatible formatting, status bar, input bar, debug console overlay
- HTML-like message markup: Bold, italic, underline, color, monospace, links, custom emoji themes
- File transfers: P2P file send via libp2p request-response (BitChat), progress bars, SHA-256 verification, cancellation
- Plugin system: Dynamic .so plugin loading for custom commands
- Per-channel logging: naim-format log files per channel/protocol
- Encrypted tunnels: Noise protocol tunnels between peers
- Multiplexed streams: yamux-based stream multiplexing for concurrent file transfers and tunnels
Supported Protocols
| Protocol | Tag | Description |
|---|---|---|
| IRC | IRC | Classic IRC with TLS, SASL, ISUPPORT |
| Matrix | Mtx | Matrix.org with megolm E2EE |
| Discord | Dsc | Discord Gateway + REST API |
| ADC/DC++ | ADC | Direct Connect hub client |
| BitChat | P2P | P2P chat via libp2p Gossipsub |
| Stout | Sto | Revolt/Stout REST + WebSocket |
| Spacebar | Spc | Spacebar REST + WebSocket |
| Nerimity | Ner | Nerimity REST + WebSocket |
Building
Requires Rust 1.75+ and a C compiler (for dependencies like sha2, ring).
# Clone
git clone https://git.dcos.net/dcosnet/nirc-rs.git
cd nirc-rs
# Build (release)
cargo build --release
# Or use the provided build script
./build.sh # release
./build.sh debug # debug
./build.sh check # cargo check only
./build.sh test # run tests
./build.sh clippy # lint
The binary is output to target/release/nirc-rs (or target/debug/nirc-rs).
Configuration
nirc-rs reads configuration from ~/.nirc/config.toml. Create it manually
or let the first run generate a template:
mkdir -p ~/.nirc
nirc-rs # generates a template config on first run
Server entries
Each protocol connection is defined as a [[servers]] block:
# IRC example
[[servers]]
name = "libera"
protocol = "irc"
address = "irc.libera.chat:6697"
tls = true
nick = "myuser"
[servers.extra]
password = "optional_nickserv_pass"
# Matrix example
[[servers]]
name = "matrix"
protocol = "matrix"
address = "https://matrix.org"
user_id = "@you:matrix.org"
[servers.extra]
password = "your_password"
# Discord example
[[servers]]
name = "discord"
protocol = "discord"
address = "https://discord.com/api"
bot_token = "your_bot_token_here"
# BitChat (P2P) example
[[servers]]
name = "bitchat"
protocol = "bitchat"
address = "/ip4/0.0.0.0/tcp/9394"
[servers.extra]
bootstrap = "/ip4/1.2.3.4/tcp/9394/p2p/QmSomePeerId"
nickname = "myhandle"
Usage
nirc-rs [config-path]
Key bindings
| Key | Action |
|---|---|
| Ctrl+N | Next window |
| Ctrl+P | Previous window |
| Alt+1-9 | Switch to window 1-9 |
| Page Up/Down | Scroll chat history |
| Tab | Cycle nickname completions |
| /command | Enter command mode |
| Ctrl+^ | Toggle debug console overlay |
| Ctrl+L | Redraw screen |
Commands
/connect <server>— Connect to a configured server/join <channel>— Join a channel/part— Leave current channel/msg <target> <text>— Send a direct message/me <text>— Send an action/emote/quit— Exit nirc-rs/bitchat peers— List discovered P2P peers/matrix verify <user>— Start SAS device verification
Architecture
src/main.rs— Application entry, event loop, TUI renderingsrc/config.rs— TOML config parsersrc/core/— Core types: App, ChatMessage, ProtocolType, commandssrc/protocols/— Protocol backends (IRC, Matrix, Discord, etc.)src/engine/— Dispatcher, crypto tunnels, multiplexersrc/tui/— Terminal UI: chat view, winlist, input bar, consolesrc/transfer/— File transfer engine and state managementsrc/plugins/— Dynamic plugin loader (.so)
License
MIT — see LICENSE for details.