Serverless and decentralized flat file chatting convention for users on a shared system. Comes w/ base implementation.
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
cmccabe 32b52b1d9c verbose newscan added 3 years ago
.gitignore Reworks the way items are listed and improves keeping file permissions on chat logs 4 years ago verbose newscan added 3 years ago
gab verbose newscan added 3 years ago
gab.1.gz Adds man page 3 years ago


This is the second version of gab. The original existed as a bash script and opperated off of a single chat log. This updated version creates individual logs in each users home directory. The permissions for these logs should be set up to be world readable but writable only by the user. The way the script is set up, writing to another user's log should be impossible.


Running gab with no arguments will show the most recent n messages where n is the system default number of messages to show.

-h, --help, help
Print the help message and exit

-m, --msg, msg
Follow this with quoted text to add a message to the chat log
If gab msg is run without a message then your $EDITOR will be opened for you to type in your message. Be aware that each line will be a separate message in the chat log. Try not to spam
gab -m "This is a message"
gab -m

-n, --new, new
This will report any channels that have new messages since you last viewed the channel.
This only shows channels you have previously contributed to, i.e. where you have a ~/.gab-channelname file in your home directory.
Put this line in your shell startup file and you will be notified on each login if there are new messages.
gab -n

-N, --new-verbose, new-verbose
This is the same as -n, but also produces output even when no new messages exist.
gab -N

-l, --list, list
View the chat log. Pass an integer for the number of recent posts you would like to view (defaults to 5)
gab -l 20

-b, --block, block
Block a user (you will not see their messages) by passing the user's name
gab -b some-spammy-user

-u, --unblock, unblock
Unblock a previously blocked user by passing the user's name
gab -u some-cool-user

-c, --channel, channel
Run without any further arguments, will list the available channels
Run with a channel name, will switch to that channel (creating it if it doesn't exist)
Creating a channel that ends in ! will create an unlisted channel that users can only join if they know it exists
gab -c
gab -c my-channel
gab -c my-secret-channel!

Man page

Gab comes with a man page. To install it, copy it to your man path. As an example:

$ sudo cp ./gab.1.gz /usr/local/share/man/man1/gab.1.gz
$ man gab


In order to keep gab reasonably snappy and reduce unneccessary file bloat, individual user chatlogs are limited to ~12kb in size. This is generally enough to have a solid backlog of text while letting ancient conversation naturally get forgotten (at least as far as the computer is concerned).

You may think to yourself: "hey, can I just edit my chatlog directly?" The answer is: yes. But in most cases you shouldnt. The program knows that it should not display any lines that are not formatted the way it expects. It also knows that the future has not happened yet and so you could not have said anything in the future. However, you could in theory get a timestamp for a future time to essentially schedule a comment, sort of? Times that it could be appropriate to edit a chat log include: correcting spelling from a previous post, changing what you said to either provide more accuracy or annoy your friends and win an argument of some form, or to delete a message. I think the best part about gab is that it is decentralized: you own your log and it is independent of program execution. As such, you have the right to remove stuff from it. You can unsay things, sort of (not from people's ears/eyes, but from being seen in the log again). This ability to be forgotten or to decide you no longer want something representing you has largely been lost on the internet and I am happy to have created something with this ability. Just remember, with great ability comes great responsibility (dont be a jerk and try not to be weird about how you edit your log).

Blocking/unblocking has been added in version 2.1. The hope is that on larger systems or systems with varried users that do not all get along harmoniously a user can prevent spam or aggressive (or otherwise obnoxious) users from appearing in their chatlog. This blocking can be undone at any time by issuing the unblock command. When a user gets unblocked any messages that were missed while they were blocked (that have not been wiped out by the ~12k file limit) will be viewable.