• Stars
    star
    889
  • Rank 51,338 (Top 2 %)
  • Language
    Rust
  • License
    MIT License
  • Created almost 9 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A terminal IRC client

tiny - Yet another terminal IRC client

tiny is an IRC client written in Rust.

Features

  • Clean UI: consecutive join/part/quit messages are shown in a single line, time stamps for a message is omitted if it's the same as the message before. (inspired by irc-core)

  • All mentions to the user are collected in a "mentions" tab, including server and channel information. "mentions" tab solves the problem of missing mentions to you in channels after hours of inactivity.

  • Mentions to the user in a channel is highlighted (the channel tab is also highlighted in the tab list)

  • Simple config file format for automatically connecting to servers, joining channels, registering the nickname etc. See configuration section below.

  • Nick tab-completion in channels

  • Nicks in channels are colored.

  • Disconnect detection and automatic reconnects. You can keep tiny running on your laptop and it automatically reconnects after a sleep etc.

  • Configurable key bindings inspired by terminal emulators and vim. See key bindings section below.

  • Configurable colors

  • SASL authentication

  • Configurable desktop notifications on new messages (opt-in feature behind a feature flag, see below)

  • znc compatible

  • TLS support

Installation

tiny works on Linux and OSX. Windows users can run it under Windows Subsystem for Linux.

For pre-built binaries see releases. To build from source make sure you have Rust 1.48 or newer. By default tiny uses rustls for TLS support, and desktop notifications are disabled.

  • To use system TLS library (OpenSSL or LibreSSL), add --no-default-features --features=tls-native to the command you're using. Note that this requires OpenSSL or LibreSSL headers and runtime libraries on Linux.

  • To enable desktop notifications add --features=desktop-notifications. This requires libdbus on Linux.

To install in a clone:

cargo install --path crates/tiny

If you don't want to clone the repo, you can use

cargo install --git https://github.com/osa1/tiny

If you have an older version installed, add --force to the command you're using.

Arch Linux users can install tiny from AUR.

tiny is tested on Linux and OSX.

Configuration

tiny looks for these places for a config file:

  • On Linux: $XDG_CONFIG_HOME/tiny/config.yml, on macOS: $HOME/Library/Application Support/tiny/config.yml
  • (when not found) $HOME/.config/tiny/config.yml
  • (when not found, deprecated) $HOME/.tinyrc.yml

When a config file is not found in one of these locations tiny creates one in the first path above with defaults and exits, printing path to the config file. Edit that file before re-running tiny to change the defaults.

A note on nick identification: Some IRC servers such as ircd-seven (used by Freenode) and InspIRCd (used by Mozilla) support identification via the PASS command. This way of identification (rather than sending a message to a service like NickServ) is better when some of the channels that you automatically join require identification. To use this method enter your nick password to the pass field in servers.

Using external commands for passwords

When a password field in the config file is a map with a command key, the value is used as the shell command to run to get the password.

For example, in this config:

sasl:
  username: osa1
  password:
    command: 'pass show "my irc password"'

tiny runs the pass ... command and uses last line printed by the command as the password.

Command line arguments

By default (i.e. when no command line arguments passed) tiny connects to all servers listed in the config. tiny considers command line arguments as patterns to be matched in server addresses, so you can pass command line arguments to connect to only a subset of servers specified in the config. For example, in this config:

servers:
    - addr: chat.freenode.net
      ...

    - addr: irc.gnome.org
      ...

By default tiny connects to both servers. You can connect to only the first server by passing freenode as a command line argument.

You can use --config <path> to specify your config file location.

Key bindings

Key bindings can be configured in the config file, see the wiki page for details.

Default key bindings:

  • C-a/C-e move cursor to beginning/end in the input field

  • C-k delete rest of the line

  • C-w delete a word backwards

  • C-left/C-right move one word backward/forward

  • page up/page down, shift-up/shift-down, or C-u/C-d to scroll

  • C-n/C-p next/previous tab

  • C-c enter quit (asks for confirmation)

  • alt-{1,9} switch to nth tab

  • alt-{char} switch to next tab with underlined char

  • alt-0 switch to last tab

  • alt-left/right move tab to left/right

  • C-x edit current message in $EDITOR

Commands

Commands start with / character.

  • /help: Show help messages of commands listed below.

  • /msg <nick> <message>: Send a message to a user. Creates a new tab.

  • /join <channel>: Join to a channel

  • /close: Close the current tab. Leaves the channel if the current tab is a channel. Leaves the server if the tab is a server. You can use /close <reason> to send a goodbye message.

  • /connect <hostname>:<port>: Connect to a server. Uses defaults in the config file for nick, realname, hostname and auto cmds.

  • /connect: Reconnect to the current server. Use if you don't want to wait tiny to reconnect automatically after a connectivity problem.

  • /away <msg>: Set away status

  • /away: Remove away status

  • /nick <nick>: Change nick

  • /names: List all nicks in the current channel. You can use /names <nick> to check if a specific nick is in the channel.

  • /reload: Reload TUI configuration

  • /clear: Clears tab contents

  • /switch <string>: Switch to the first tab which has the given string in the name.

  • /ignore: Ignore join/quit messages in a channel. Running this command in a server tab applies it to all channels of that server. You can check your ignore state in the status line.

  • /notify [off|mentions|messages]: Enable and disable desktop notifications. Running this command in a server tab applies it to all channels of that server. You can check your notify state in the status line.

  • /quit: Quit. You can use /quit <reason> to send a goodbye message.

Server commands

For commands not supported by tiny as a slash command, sending the command in the server tab will send the message directly to the server.

Examples:

  • LIST will list all channels on the server
  • MOTD will display the server Message of the Day
  • RULES will display server rules
  • etc...

Community

Join us at #tiny in irc.oftc.net to chat about anything related to tiny!

More Repositories

1

lexgen

A fully-featured lexer generator, implemented as a proc macro
Rust
52
star
2

language-lua

Lua parser and pretty-printer
Lua
51
star
3

sg

A syntax-aware grep-like code search tool
Rust
43
star
4

StrictCore

An experimental intermediate language for GHC
Haskell
37
star
5

mincaml

A MinCaml compiler implemented in Rust
Rust
34
star
6

MANTI

A pure subset of Prolog, implemented in Haskell
Haskell
31
star
7

parsegen

An LR parser generator, implemented as a proc macro
Rust
16
star
8

Shen.hs

Shen implementation in Haskell
Haskell
15
star
9

psc-lua

Lua backend for PureScript
Haskell
14
star
10

rhex

A curses-based hex editor
Rust
13
star
11

rho-torrent

Haskell
9
star
12

wasmrun

[WIP] A Wasm interpreter with debugging and inspection capabilities
Rust
8
star
13

privileged-concurrency

Haskell
7
star
14

CoreDump

Haskell
7
star
15

lcl

STL containers in Lua
C
6
star
16

tree-sitter-parse

A tool like tree-sitter-cli that can load parsers compiled to shared libraries
Rust
6
star
17

toylisp

my attempt to implement a [typed] Lisp-like language in Haskell
Haskell
5
star
18

hsyslog-tcp

syslog over TCP
Haskell
5
star
19

sc-plugin

Haskell
5
star
20

typed-duration

Thread delay and timeout functions with typed arguments
Haskell
5
star
21

Dextrack

A Garmin watch face with blood glucose monitoring
Monkey C
4
star
22

akow2

Extended/improved version of LD23 game, Another Kind of World
Lua
4
star
23

minCaml.hs

Haskell
4
star
24

rcbackup

Various rc and config files
Vim Script
4
star
25

synacor-challenge

My solution to the Synacor Challenge
Rust
4
star
26

spec_bench

Haskell
3
star
27

dolap-chat

Haskell
3
star
28

ghc-utils

Various tools I use when working on GHC
Rust
3
star
29

guru-rs

A gdb/rr GUI (this time in Rust)
Rust
3
star
30

int-proj

OCaml
3
star
31

h10

A Haskell 2010 type checker
JavaScript
3
star
32

amele

a Python + PyQT script for linux to watch folders for changes and run commands on them
Python
2
star
33

sicp-solutions

my solutions to exercises in `structure and interpretation of computer programs`
Scheme
2
star
34

ptm

Testing out program transformation ideas
Haskell
2
star
35

racket.rkt

An experimental compiler from a subset of [Typed] Racket to x86_64
Racket
2
star
36

external-sort

An external sorting library
Haskell
2
star
37

coq-in-hs

Haskell
2
star
38

nova

Haskell
2
star
39

analyze-ghc-timings

Haskell
2
star
40

talks

Talks I gave, with tex sources and source code listings
TeX
2
star
41

sd

Rust
1
star
42

k-CFA

Implementation of k-CFA control-flow analysis framework on a simple language
Haskell
1
star
43

streams

Haskell
1
star
44

sqlite-ranger

Haskell
1
star
45

cob

JavaScript
1
star
46

cl-mustache

{{ Mustache }} for Common Lisp
Common Lisp
1
star
47

advent_of_code

My "Advent of Code" solutions, since 2015. Using a different language each year.
C
1
star
48

StagedLambda

Coq
1
star
49

GenericInstsBenchmark

Haskell
1
star
50

migration-test

Experimenting with database migrations
Haskell
1
star
51

setops_bench

Haskell
1
star
52

notlex

Rust
1
star
53

rust_ld_preload_example

Override libc malloc/free with Rust functions
Rust
1
star
54

TemplateSpec

Haskell
1
star
55

Arsiv-duzenleyici

mp3, ogg ve flac dosyalarını id3 etiketlerine göre düzenleyip, albüm kapaklarını indiren basit bir program
Python
1
star
56

freer-logger

Haskell
1
star
57

dolap-chat-client

frontend for dolap chat server
JavaScript
1
star
58

noan

Pardus internship project
JavaScript
1
star
59

eff-playground

Haskell
1
star
60

lazycore

Haskell
1
star
61

dolap

JavaScript
1
star
62

guru

A gdb/rr GUI
Haskell
1
star
63

free-er

Haskell
1
star
64

monotone-framework

Haskell
1
star
65

pygame-playground

Pygame saçmalamalarım
Python
1
star
66

plugins

Haskell
1
star
67

array-fs

Filesystem-backed arrays
Haskell
1
star
68

chsc

Haskell
1
star
69

psc-lua-tests

PureScript
1
star
70

RandomArt.hs

Haskell
1
star
71

ktest.hs

Haskell
1
star